Embedding FreeCADGui/es

Introduction
Ya sabes que puedes importar el módulo de FreeCAD en una aplicación en Python, y utilizar todas sus herramientas desde la aplicación anfritriona. Pero el entorno gráfico de usuario GUI de FreeCAD también puede importarse como un módulo de Python. Normalmente solo puedes importar el interfaz completo como un todo, no unas partes de él. Esto es porque el sistema de interfaz de FreeCAD no sólo está hecho de complementos (widgets) y barras de herramientas independientes, pero es una construcción compleja donde varios componentes individuales (como el sistema de selección, etc.) son necesarios para que la vista 3D principal pueda funcionar.

Pero, trasteando un poco, es posible importar el interfaz completo de FreeCAD, luego mover la vista 3D desde allí a tu propia aplicación Qt. Mostraremos aquí 3 métodos diferentes.

Utilizando el complemento (widget) de la vista 3D de FreeCAD directamente
Debes ser consciente de que existen muchos problemas con este enfoque. El tratamiento de eventos de Qt parece que no funciona (ni idea del por qué) y si utilizas el menú contextual de la vista 3D la aplicación se cuelga. Un método mejor podría ser crear tu propio SoQtExaminerViewer de la vista 3D o SoQtViewer y "empujar" el contenido de la vista 3D de FreeCAD, como se muestra en las otras secciones más abajo.

Primero, consigue la ventana principal vía PyQt:

Luego consigue la vista View3DInventor del mismo modo:

El siguiente código es generado automáticamente, por la creación de un interfaz de usuario con QtDesigner, y convirtiéndola a código en Python con la herramienta pyuic:

Luego, crea una ventana principal que debería ser la ventana principal de tu aplicación, aplica el setup de la interfaz de usuario UI de arriba para añadir un área MDI y "mueve" mueve nuestra vista 3D a ella

Creación de un Visor examinador soGui
Alternativamente, también puedes utilizar el módulo FreeCADGui para extraer una representación de coin/openInventor de los objetos de tu escena, luego utilizar esos datos de coin en un visor externo (tu aplicación). Aquí tienes un sencillo modo para obtener la representación de un objeto:

Luego, crea un visor te a autónomo con pivy:

entonces simplemente necesitas ejecutar tu visor:

Utilizando el módulo quarter
En lugar de utilizar el visor sogui, también puedes utilizar el más reciente módulo quarter. Esta es posiblemente la mejor solución de las tres.

Incluso sin encender el entorno gráfico de usuario de FreeCAD
Desde la revisión rev2760 de FreeCAD, es posible obtener la representación en coin de cualquier objeto de FreeCAD sin abrir la ventana principal. Esto hace extremadamente sencillo implementar tu propio visor y transparentemente tener a FreeCAD actualizándolo. Después de la importación del módulo FreeCADGui, necesitas encenderlo con el método setupWithoutGUI, después del cual puedes utilizar todos los proveedores de vistas de FreeCAD para obtener nodos coin/openInventor.

O, si no te funciona utilizando el modulo sogui de pivy (el módulo sogui se está haciendo obsoleto y los desarrolladores de coin están ahora a favor de la nueva biblioteca quarter, la cual tiene una integración mucho mejor con Qt), este es el mismo archivo de guión pero utilizando quarter:

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