Embedding FreeCADGui/fr

Introduction
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 création d'un fichier UI avec QtDesigner, et de le convertir en code Python avec l'outil pyuic:

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"
Alternativement, vous pouvez également utiliser le module FreeCADGui pour extraire une représentation coin/openInventor des objets de votre scène, puis utilisez des données coin, dans une visionneuse externe (votre application).

Voici un moyen facile d'obtenir la représentation 3D d'un objet:

Ensuite, créez un visualiseur autonome avec pivy :

Ensuite, il vous suffit de lancer votre visualiseur :

Utilisation d'un module tiers
Au lieu d'utiliser le visualiseur Sogui, vous pouvez aussi utiliser un module tiers plus moderne. C'est probablement la meilleure des 3 solutions.

Sans exécuter le Gui de FreeCAD
A partir de FreeCAD rev2760, il est maintenant possible d'obtenir la représentation d'un objet quelconque coin FreeCAD sans devoir ouvrir la fenêtre principale.

Il est donc extrêmement facile de mettre en œuvre votre propre visualiseur, et, rester transparent pour les mises à jour de FreeCAD.

Après avoir importé le module FreeCADGui, vous devez le mettre à niveau avec la méthode setupWithoutGUI, après quoi, vous pouvez utiliser tous les fournisseurs de vue de FreeCAD, pour obtenir les nœuds coin/openInventor.

Ou, si vous utilisez le module pivy Sogui et qu'il ne fonctionne pas chez vous, (le module Sogui devient obsolète, et, les développeurs, désormais favorisent la bibliothèque coin, qui a une interaction bien meilleure avec qt), c'est le même scénario, mais avec une aide tierce :

Additional information

 * Embedding a view to another (QT) application?
 * Using Gui functions without Gui.showMainWindow in python script
 * Acess Scenegraph through python API in without Gui mode
 * FreeCAD Hangs When Called from Python
 * Problem with FreeCADGui

In the source code there are examples of embedding FreeCAD with various graphical toolkits:
 * src/Tools/embedded