Embedding FreeCADGui/fr

Vous savez déjà que vous pouvez importer le module FreeCAD dans une application Python, et d'utiliser tous les outils de l'application hôte. Mais l'interface utilisateur FreeCAD (GUI) peut également être importée en tant que module Python. Normalement, vous pouvez importer l'interface complète dans son ensemble, et non pas des portions de celui-ci. C'est parce que le système d'interface FreeCAD n'est pas seulement faite de widgets indépendants, et, de barres d'outils, mais, cette interface est une construction complexe, où plusieurs composantes invisibles (tels que le système de sélection, etc) sont nécessaires à la vue 3D, pour pouvoir fonctionner.

Mais, avec un peu de "hacking", il est possible d'importer toute l'interface de FreeCAD, alors déplacez la vue 3D de FreeCAD dans votre propre application Qt.

Nous vous montrons ici, 3 méthodes différentes.

En utilisant directement le widget vue 3D de FreeCAD
Soyez conscient qu'il y a d'énormes problèmes dans cette approche. La gestion des événements Qt ne semble pas fonctionner (pourquoi ?? aucune idée !), et, si vous utilisez la vue 3D, du menu contextuel, l'application se bloque. Une meilleure façon serait de créer votre propre vue 3D SoQtExaminerViewer ou SoQtViewer et "pousser" le contenu de la vue 3d de FreeCAD dans votre code, comme indiqué dans les sections ci-dessous.

Tout d'abord, obtenir la fenêtre principale via PyQt : Ensuite, récupérez les View3DInventor de la même façon : Le code suivant est généré automatiquement, par la création d'un fichier QtDesigner, et de le convertir en code Python avec l'outil pyuic :

Conversion de notre boîte de dialogue en code Python avec "pyuic"
Maintenant, nous allons sauver notre widget quelque part. Il sera sauvegardé dans un fichier .Ui, que nous allons facilement convertir en script Python avec pyuic.

Dans windows, le programme est livré avec pyuic pyqt (à vérifier), sur Linux, vous aurez probablement besoin de l'installer séparément à partir de votre gestionnaire de paquets (sur debian-systèmes basés sur, il fait partie du paquet pyqt4-dev-tools).

Pour faire la conversion, vous aurez besoin d'ouvrir une fenêtre de terminal (ou une fenêtre d'invite de commandes), accédez à l'endroit où vous avez enregistré votre fichier ui :
 * pyuic.py est l'outil qui convertit les fichiers qt-designer .ui (Interface Utilisateur) en fichier .py (code Python), la ligne de commande dans la console DOS est :

pyuic -x fichier.ui > fichier.py


 * vous pouvez créer un fichier .bat pour automatiser la commande:
 * copiez cette ligne dans un fichier texte et sauvez le sous le nom "compile.bat"

@"C:\Python27\python" "C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" -x %1.ui > %1.py


 * puis tapez à la ligne de commande " compile fichier " sans extension, le nom "fichier" entré .ui, sera le nom sortant avec extension .py
 * ATTENTION: il faut que les fichiers soient présents et accessibles, vérifiez que les fichiers sont présents et que les chemins sont justes !
 * pour cet exemple entièrement automatique et simplifié, "compile.bat" est au même endroit que le fichier.ui à convertir en fichier.py

Autres liens de documentation "Python and Qt", sur Développez.com et bien d'autres.

Sur certains systèmes, le programme est appelé pyuic4 au lieu de pyuic (attention à la compatibilité). Il sert simplement de convertisseur de fichier .Ui en un script python .py.

Ensuite, créez la fenêtre principale, qui devrait être la fenêtre principale de votre application, et appliquez la configuration UI (UI setup) ci-dessus, dans le but d'ajouter une zone MDI et "bouger" notre point de vue 3d pour elle.

Création d'un examinateur "soGui Examiner Viewer"
Alternatively, you can also use the FreeCADGui module to extract a coin/openInventor representation of the objects of your scene, then use that coin data in an external viewer (your application). Here is an easy way to get the 3d representation of an object: Then, create a standalone viewer with pivy: Then you just need to run your viewer:

Using the quarter module
Instead of using the sogui viewer, you can also use the more modern quarter module. This is probably the best solution of the 3.

Without even firing up the FreeCAD Gui
Starting from FreeCAD rev2760, it is now possible to obtain the coin representation of any FreeCAD object without opening the main window. This makes it extremely easy to implement your own viewer and transparently have FreeCAD updating it. After importing the FreeCADGui module, you need to fire it up with the setupWithoutGUI method, after which you can use all of FreeCAD's view providers to obtain coin/openInventor nodes. Or, if using pivy's sogui module doesn't work for you (the sogui module is becoming obsoleted and the coin developers are now favoring the new quarter library, which has much better interaction with qt), this is the same script but with using quarter: