Module Creation/it

Creare dei Moduli
Aggiungere in FreeCAD dei nuovi moduli e dei nuovi ambienti di lavoro è molto facile.

Chiameremo modulo qualsiasi estensione di FreeCAD, invece un ambiente di lavoro (workbench) è una configurazione speciale della GUI che raggruppa alcune barre degli strumenti e dei menu.

Di solito si crea un nuovo modulo che contiene un proprio ambiente di lavoro.

I moduli possono essere programmati in C++ o in Python, o in una miscela di entrambi, ma i file di inizializzazione (init) del modulo devono essere in Python.

Impostare un nuovo modulo con questi file init è facile, e può essere fatto manualmente o con lo Strumento per la costruzione di FreeCAD.

__

Utilizzare lo strumento di costruzione di FreeCAD
Creare un nuovo modulo dell'applicazione in FreeCAD è piuttosto semplice. Nella struttura di sviluppo FreeCAD esiste lo Strumento per la costruzione di FreeCAD (fcbt) che fa per voi le cose più importanti. Si tratta di uno script Python e si trova in: trunk/src/Tools/fcbt.py Quando l'interprete Python è stato installato correttamente è possibile eseguire lo script da una riga di comando con: python fcbt.py Viene visualizzato il seguente menu:

FreeCAD Build Tool Usage: fcbt [command parameter] possible commands are: - DistSrc        (DS)   Build a source Distr. of the current source tree - DistBin        (DB)   Build a binary Distr. of the current source tree - DistSetup      (DI)   Build a Setup Distr. of the current source tree - DistSetup      (DUI)  Build a User Setup Distr. of the current source tree - DistAll        (DA)   Run all three above modules - BuildDoc       (BD)   Create the documentation (source docs) - NextBuildNumber (NBN) Increase the Build Number of this Version - CreateModule   (CM)   Insert a new FreeCAD Module in the module directory For help on the modules type: fcbt ?

Al prompt dei comandi digitare CM per avviare la creazione di un modulo: Insert command: CM

Ora viene chiesto di specificare un nome per il nuovo modulo. Supponiamo, ad esempio, di chiamarlo TestMod: Please enter a name for your application: TestMod

Dopo aver premuto Invio fcbt inizia a copiare tutti i file necessari per il nuovo modulo in una nuova cartella in trunk/src/Mod/TestMod/

Dopo tutti i file vengono modificati con il nome del nuovo modulo. Ora l'unica cosa da fare è aggiungere i due nuovi progetti "appTestMod" e "appTestModGui" al proprio workspace (su Windows) o al proprio makefile targets (unix). Ecco fatto!

Impostare manualmente un nuovo modulo
Per creare un nuovo modulo servono due cose:

In aggiunta, è anche possibile mettere un file Init.py. La differenza è che il file InitGui.py viene caricato solo quando FreeCAD viene eseguito in modalità GUI mentre il file Init.py viene sempre caricato. Dato che stiamo creando un ambiente di lavoro, lo metteremo in InitGui.py, perché gli ambienti di lavoro, ovviamente, vengono utilizzati solo in modalità GUI.
 * Una nuova cartella nella cartella Mod di FreeCAD (entrambe in InstalledPath/FreeCAD/Mod oppure in UserPath/.FreeCAD/Mod). È possibile assegnare alla cartella un nome a piacere.
 * All'interno di tale cartella, un file InitGui.py. Tale file verrà eseguito automaticamente all'avvio di FreeCAD (come esempio, mettere un print ("hello world") all'interno)

Creare un nuovo ambiente
All'interno del file InitGui.py, una delle prima cosa da fare è quella di definire un ambiente di lavoro. Ecco il codice minimo che è possibile utilizzare:

class MyWorkbench ( Workbench ): "My workbench object" Icon = """ 			/* XPM */ 			static const char *test_icon[]={ 			"16 16 2 1", 			"a c #000000", 			". c None", 			"................", 			"................", 			"..############..", 			"..############..", 			"..############..", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"................", 			"................"}; 			""" MenuText = "My Workbench" ToolTip = "This is my extraordinary workbench"

def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): import myModule1, myModule2 self.appendToolbar("My Tools", ["MyCommand1","MyCommand2"]) self.appendMenu("My Tools", ["MyCommand1","MyCommand2"]) Log ("Loading MyModule... done\n") def Activated(self): # do something here if needed... Msg ("MyWorkbench.Activated\n") def Deactivated(self): # do something here if needed... Msg ("MyWorkbench.Deactivated\n") FreeCADGui.addWorkbench(MyWorkbench)

L'ambiente di lavoro deve avere tutti questi attributi definiti:


 * L'attributo Icon è un'immagine XPM (la maggior parte dei software come GIMP sono in grado di convertire un'immagine in formato xpm, che è un file di testo. È quindi possibile incollare qui il contenuto)
 * MenuText è il nome dell'ambiente di lavoro così come appare nella lista degli ambienti
 * Tooltip appare quando vi si passa sopra con il mouse
 * Initialize viene eseguito all'avvio di FreeCAD, e deve creare tutti i menu e le barre degli strumenti che l'ambiente di lavoro userà. Se avete intenzione di costruire il vostro modulo in C++, è possibile definire anche i menu e barre degli strumenti all'interno del modulo C++, invece di definirli in questo file InitGui.py. Importante è che siano creati ora, e non quando il modulo viene attivato.
 * Activated viene eseguito quando l'utente passa a questo ambiente di lavoro
 * Deactivated viene eseguito quando l'utente passa da questo ad un altro ambiente di lavoro o chiude FreeCAD

Creare dei comandi di FreeCAD in Python
Di solito si definiscono tutti gli strumenti (chiamati comandi in FreeCAD) in un altro modulo, quindi si importa quel modulo prima di creare le barre degli strumenti e i menu. Questo è il codice minimo che è possibile utilizzare per definire un comando:

import FreeCAD,FreeCADGui class MyTool: "My tool object" def GetResources(self): return {"MenuText": "My Command", "Accel": "Ctrl+M", "ToolTip": "My extraordinary command", "Pixmap" : """ 			/* XPM */ 			static const char *test_icon[]={ 			"16 16 2 1", 			"a c #000000", 			". c None", 			"................", 			"................", 			"..############..", 			"..############..", 			"..############..", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"......####......", 			"................", 			"................"}; 			"""} def IsActive(self): if FreeCAD.ActiveDocument == None: return False else: return True def Activated(self): # do something here... FreeCADGui.addCommand('MyCommand1',MyTool)


 * Il metodo GetResources deve restituire un dizionario con gli attributi visivi del vostro strumento. Accel definisce un tasto di scelta rapida, ma non è obbligatorio.
 * Il metodo IsActive definisce se il comando è attivo o disattivo (grigio) nei menu e nelle barre degli strumenti.
 * Il metodo Activated viene eseguito quando il comando viene richiamato tramite un pulsante della barra degli strumenti o del menu o anche da uno script.

Creare dei comandi di FreeCAD in C++
Ancora da documentare.