Creare dei Moduli

From FreeCAD Documentation
Jump to: navigation, search
This page is a translated version of the page Module Creation and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎polski • ‎română • ‎русский • ‎svenska • ‎Türkçe • ‎中文(中国大陆)‎

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 name> [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
 - NextBuildNumber (NBN)  Increase the Build Number of this Version
 - CreateModule    (CM)   Insert a new FreeCAD Module in the module directory
 - CreatePyModule  (CP)   Insert a new FreeCAD Python Module in the module directory

For help on the modules type:
  fcbt <command name> ?

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:

  • 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)

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.

Creare un nuovo ambiente (workbench)

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.

Link