Embedding FreeCADGui/it

Introduction
Sapete già che è possibile importare il modulo FreeCAD in una applicazione Python e utilizzare tutti i suoi strumenti dall'applicazione che lo ospita, ma l'interfaccia utente (GUI) di FreeCAD può anche essere importata come modulo Python. Normalmente è possibile importare solo, in blocco, l'interfaccia completa, e non le sue singole parti. Questo perché il sistema dell'interfaccia di FreeCAD non è fatto soltanto di widget e di barre degli strumenti indipendenti, ma è una costruzione complessa in cui sono necessari diversi componenti invisibili (come ad esempio il sistema di selezione, ecc) affinchè la vista 3D principale possa funzionare.

Ma, con un po' di hacking, è possibile importare prima l'intera interfaccia di FreeCAD e poi spostare la vista 3D nella propria applicazione Qt. Qui sono descritti 3 metodi diversi.

Utilizzando direttamente il componente aggiuntivo (Widget) di FreeCAD per la vista 3D
Tenete presente che con questo approccio ci sono molti problemi. L'elaborazione di Qt sembra non funzionare (nessuna idea sul perché) e quando si utilizza il menu contestuale della vista 3D l'applicazione si blocca. Un approccio migliore potrebbe essere quello di creare il proprio SoQtExaminerViewer o SoQtViewer della vista 3D e "spingere" il contenuto della vista FreeCAD 3D, come mostrato più avanti, nelle altre sezioni.

In primo luogo, ottenere la finestra principale via PyQt:

Poi ottenere la vista View3DInventor nello stesso modo:

Il seguente codice viene generato automaticamente, tramite la creazione di una interfaccia grafica di QtDesigner, e convertito in codice python con lo strumento pyuic:

Quindi, creare una finestra principale che dovrebbe essere la finestra principale dell'applicazione, applicarvi sopra la configurazione dell'interfaccia utente per aggiungere una zona MDI e "spostare" in essa la vista 3D

Creazione di un esaminatore "soGui Viewer"

In alternativa, è possibile utilizzare anche il modulo FreeCADGui per estrarre una rappresentazione coin/openInventor degli oggetti di scena, quindi utilizzare tali dati coin in un visualizzatore esterno (la propria applicazione). Ecco un modo facile per ottenere la rappresentazione 3D di un oggetto:

Quindi, creare un visualizzatore autonomo con pivy:

Poi basta eseguire il proprio visualizzatore:

Utlizzando il modulo Quarter
Invece di utilizzare il visualizzatore soGui, è possibile utilizzare il più moderno modulo Quarter. Delle tre soluzioni questa è probabilmente la migliore.

Senza avviare la GUI di FreeCAD
A partire da FreeCAD rev2760 è possibile avere la rappresentazione coin di qualsiasi oggetto di FreeCAD senza aprire la finestra principale. Questo rende estremamente facile implementare il proprio visualizzatore e avere FreeCAD aggiornato. Dopo aver importato il modulo FreeCADGui, è necessario attivarlo con il metodo setupWithoutGUI, dopo di che è possibile utilizzare tutti i fornitori di viste di FreeCAD per ottenere i nodi coin/openInventor.

Oppure, se utilizzando il modulo sogui di pivy per voi non funziona (il modulo sogui sta diventando obsoleto e gli sviluppatori di coin ora stanno favorendo la nuova libreria Quarter che ha una migliore interazione con qt), questo è lo stesso script, ma utilizzando 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