Module Creation/it

=Creare dei Moduli=

Aggiungere in FreeCAD nuovi moduli e 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 menu.

Di solito si crea un nuovo modulo che contiene il suo 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 il vostro interprete Python è stato installato correttamente è possibile eseguire lo script da una riga di comando con: python fcbt.py Verrà 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

Vi verrà ora chiesto di specificare un nome per il nuovo modulo. Supponiamo di chiamarlo TestMod ad esempio: Please enter a name for your application: TestMod

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

Poi tutti i file vengono modificati con il nome del vostro nuovo modulo. L'unica cosa che dovete fare ora è aggiungere i due nuovi progetti "appTestMod" e "appTestModGui" al vostro workspace (su Windows) o ai vostri makefile targets (unix). Ecco fatto!

Impostare un nuovo modulo manualmente
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 caricato sempre. Ma 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 FreeCAD (per 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 del software come GIMP in grado di convertire un'immagine in formato xpm, il quale è un file di testo. È quindi possibile incollare il contenuto qui)
 * MenuText è il nome dell'ambiente di lavoro così come appare nella lista degli ambienti
 * Tooltip appare quando si passa sopra con il mouse
 * Initialize viene eseguito all'avvio di FreeCAD, e deve creare tutti i menu e 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++, e non in questo file InitGui.py. Importante è che sono 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 dal questo ad un altro ambiente di lavoro o chiude FreeCAD

Creare 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 di barra degli strumenti o del menu o anche da uno script.

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