Modul-Erstellung

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

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

Hinzufügen von neuen Modulen und Arbeitsbereichen zu FreeCAD ist sehr einfach. Ein Modul ist jede Erweiterung von FreeCAD, während ein Arbeitsbereich eine spezielle GUI-Konfiguration, die einige Werkzeugleisten und Menüs gruppiert. Normalerweise kannst Du ein neues Modul erstellen, das seinen eigenen Arbeitsbereich enthält.

Module können in C++ oder Python programmiert werden oder in einem Mix aus beiden, aber die Modul-Init-Dateien müssen in Python geschrieben sein. Die Erstellung eines neuen Module mit diesen Init-Dateien ist einfach und kann entweder manuell oder mit dem FreeCAD-Build-Werkzeug erfolgen.

Das FreeCAD-Build-Werkzeug benutzen

Erzeugen eines Anwendungsmoduls in FreeCAD ist ziemlich einfach. Das FreeCAD Build Tool (fcbt) erledigt die meiste Schwerarbeit. Es ist ein Python-Skript, das im FreeCAD-Entwicklungsbaum zu finden ist:

trunk/src/Tools/fcbt.py

Wenn der Python-Interpreter korrekt installiert ist, lässt sich das Skript auf der Kommandozeile ausführen mit

python fcbt.py

Es wird das folgende Menü zeigen:

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> ?

Die Eingabe von CM am Kommandozeilen-Prompt starten das Erzeugen eines Moduls:

Insert command: ''CM''

Du wirst gebeten, einen Namen für das neue Modul einzugeben. Nehmen wir TestMod für dieses Beispiel:

Please enter a name for your application: ''TestMod''

Nach Drücken von Enter startet 'fcbt' mit dem Kopieren aller notwendigen Dateien für Dein Modul in einen neuen Ordner unterhalb von

trunk/src/Mod/TestMod/

Dann werden alle Dateien mit dem neuen Modulnamen modifiziert. Das Einzige, was Du noch tun musst, die beiden Projekte appTestMod und appTestModGui zu Deinem Arbeitsplatz (unter Windows) oder zu Deinen Makefile-Targets (Unix) hinzuzufügen. Das war's!

Ein neues Modul manuell erstellen

Du brauchst zwei Dinge zur Erstellung eines neuen Moduls:

  • Ein neuer Ordner im FreeCAD-Mod-Ordner (entweder in InstalledPath/FreeCAD/Mod oder in UserPath/.FreeCAD/Mod). Der Name ist frei wählbar.
  • In diesem Ordner eine InitGui.py-Datei. Diese Datei wird automatisch beim Start von FreeCAD ausgeführt (sie kann leer sein, aber einfach zum Testen, schreib print("Hallo Welt") hinein)

Zusätzlich kannst Du eine Datei Init.py hinzufügen. Die Datei 'InitGui.py' wird nur geladen, wenn FreeCAD im GUI-Modus ausgeführt wird, die Datei 'Init.py' wird immer geladen. Weil wir einen Arbeitsbereich erstellen, werden wir den Code allerdings in 'InitGui.py' schreiben, denn Arbeitsbereiche sind GUI-Werkzeuge.

Einen neuen Arbeitsbereich erstellen

Zuerst wirst Du in der Datei InitGui.py einen Arbeitsbereich definieren wollen. Du kannst das folgende Beispiel als Vorlage benutzen:

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)

Für einen Arbeitsbereich müssen die folgenden Attribute definiert werden:

  • Icon - Ein XPM-Bild. Die meisten Bild-(Verarbeitungs-)Programme (wie GIMP) können ein Bild ins XPM-Format (eine Textdatei) konvertieren. Du kannst den Inhalt hierher kopieren.
  • MenuText - Der Arbeitsbereichname, wie er in der Arbeitsbereichliste erscheint
  • Tooltip - Definiert den Tooltip-Text
  • Initialize() - Wird beim Start von FreeCAD ausgeführt und erzeugt alle Menü und Werkzeugleisten, die der Arbeitsbereich benutzen wird. Wenn Du Dein Modul in C++ erstellst, kann Du auch die Menüs und Werkzeugleisten im C+-Modul erstellen anstatt in der 'InitGui.py'-Datei. Wichtig ist, dass sie jetzt erstellt werden, bevor das Modul erzeugt wird.
  • Activated() - Wird ausgeführt, wenn der Benutzer zu Deinem Arbeitsbereich wechselt
  • Deactivated() - Wird ausgeführt, wenn der Benutzer zu einem anderem Arbeitsbereich wechselt oder FreeCAD verlässt

FreeCAD-Befehle in Python erstellen

Normalerweise definierst Du alle Werkzeuge (in FreeCAD 'Befehle' genannt) in einem weiteren Modul, importierst dieses Modul vor der Erstellung der Werkzeugleisten und Menüs. Hier ist ein einfaches Beispiel, das als Vorlage benutzt werden kann:

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

Beachte, dass drei Methoden definiert werden:

  • GetResources() - Liefert ein Dictionary mit den visuellen Attributen Deines Werkzeugs zurück. Der Accel-Parameter definiert ein optionales Standardtastenkürzel.
  • IsActive() - Legt fest, ob der Befehl aktiv ist oder nicht. Inaktive Befehle sind durch ein ausgegrautes Piktogramm in Menüs und Werkzeugleisten gekennzeichnet.
  • Activated() - Ausgeführt, wenn der Befehl aufgerufen wird, entweder durch einen Werkzeugleisten-Button, Menü oder Script-API-Aufruf.

FreeCAD-Befehle in C++ erstellen

To Be Documented

Verweise