Tutorial: Erstellen von Addons für FreeCAD
Lernziel: Erstelle ein einfaches Addon, das eine neue Arbeitsumgebung mit einer Schaltfläche hinzufügt und beim Klicken eine Nachricht anzeigt.
Schritt 1. Vorbereitung des Addon-Ordners
Stelle sicher, dass du folgenden Ordner hast:
.../FreeCAD/Mod/HelloWorldAddon/
Falls nicht – erstelle ihn.
Der Ordnername ist wichtig: Er muss mit dem Modulnamen im Code übereinstimmen.
Wir verwenden HelloWorldAddon.
Erstelle in diesem Ordner zwei Dateien:
InitGui.pyhello_workbench.py
Wichtig: Verwende keine Leerzeichen oder kyrillische Zeichen in Datei- und Ordnernamen!
Schritt 2. Datei InitGui.py – Einstiegspunkt
Diese Datei wird von FreeCAD beim Start automatisch ausgeführt, wenn sie sich im Addon-Ordner befindet.
Öffne sie in einem Editor und füge folgenden Code ein:
# InitGui.py
import FreeCADGui
from HelloWorldAddon.hello_workbench import HelloWorldWorkbench
FreeCADGui.addWorkbench(HelloWorldWorkbench())
Was macht dieser Code?
- Importiert unsere Arbeitsumgebung aus der Datei
hello_workbench.py - Registriert sie in der FreeCAD-Oberfläche über
FreeCADGui.addWorkbench()
Hinweis:from HelloWorldAddon.hello_workbench – hier ist HelloWorldAddon der Ordnername und hello_workbench der Dateiname ohne die Erweiterung .py.
Schritt 3. Datei hello_workbench.py – Addon-Logik
Nun erstellen wir die Arbeitsumgebung selbst.
Füge folgenden Code in hello_workbench.py ein:
# hello_workbench.py
import FreeCAD, FreeCADGui
from PySide import QtGui
# === BEFEHL: Was passiert beim Klick auf die Schaltfläche? ===
class HelloWorldCommand:
def GetResources(self):
"""Gibt Daten zur Anzeige des Befehls zurück"""
return {
"MenuText": "Sag Hallo", # Text im Menü
"ToolTip": "Zeige eine Begrüßung", # Tooltip
"Pixmap": "" # Pfad zum Symbol (zunächst leer)
}
def Activated(self):
"""Wird aufgerufen, wenn die Schaltfläche geklickt wird"""
QtGui.QMessageBox.information(
None,
"FreeCAD Addon",
"Hallo Welt!\nDu hast gerade dein erstes Addon gestartet!"
)
def IsActive(self):
"""Wann ist der Befehl verfügbar? (hier: immer → True)"""
return True
# === ARBEITSUMGEBUNG: fasst Befehle zusammen ===
class HelloWorldWorkbench(FreeCADGui.Workbench):
# Name, der in der Liste angezeigt wird
MenuText = "Hello World"
ToolTip = "Meine erste Arbeitsumgebung"
def Initialize(self):
"""Wird aufgerufen, wenn die Arbeitsumgebung aktiviert wird"""
# Liste der Befehlsnamen
self.list = ["HelloWorldCommand"]
# Symbolleiste hinzufügen
self.appendToolbar("Hello Tools", self.list)
# Menüeintrag hinzufügen
self.appendMenu("Hello World", self.list)
def GetClassName(self):
"""Erforderliche Methode für Python-Arbeitsumgebungen"""
return "Gui::PythonWorkbench"
# === BEFEHLSREGISTRIERUNG ===
FreeCADGui.addCommand("HelloWorldCommand", HelloWorldCommand())
Code-Analyse nach Komponenten:
- Befehl (
HelloWorldCommand)
GetResources()– beschreibt, wie der Befehl in der Oberfläche erscheintActivated()– definiert, was beim Klick geschiehtIsActive()– legt fest, wann die Schaltfläche aktiv ist (z. B. nur bei geöffnetem Dokument)
- Arbeitsumgebung (
HelloWorldWorkbench)
- Erbt von
FreeCADGui.Workbench - Die Methode
Initialize()fügt Befehle zur Symbolleiste und zum Menü hinzu GetClassName()teilt FreeCAD mit: „Dies ist eine Python-Arbeitsumgebung“
- Registrierung
FreeCADGui.addCommand()verknüpft den Namen"HelloWorldCommand"mit der Klasse
Schritt 4. Funktionsprüfung
- Speichere beide Dateien
- Starte FreeCAD neu
- Wähle in der Arbeitsumgebung-Auswahl „Hello World“
- Klicke auf die Schaltfläche „Sag Hallo“
Ein Fenster mit der Nachricht „Hallo Welt!“ sollte erscheinen.
Praktische Aufgabe
- Ändere den angezeigten Text.
- Füge ein zweites Kommando hinzu – z. B. „Zeige Datum“, das das aktuelle Datum anzeigt.
- Experimentiere mit
IsActive()– lasse die Schaltfläche z. B. nur aktiv sein, wenn ein Dokument geöffnet ist:
def IsActive(self):
return FreeCAD.ActiveDocument is not None
Was kommt als Nächstes?
In Lektion 3 werden wir:
- Lernen, wie man echte 3D-Objekte (Quader, Zylinder) per Python erstellt
- Die Dokumentenstruktur von FreeCAD verstehen
- Ein Addon bauen, das parametrische Körper erzeugt
Damit beginnt die echte CAD-Entwicklung!