Lernziel: Lerne, über Python feste Körper (Quader, Zylinder) zu erstellen, verstehe die Dokumentenstruktur von FreeCAD und erstelle ein Addon, das ein parametrisches Bauteil erzeugt.
Teil 1. Wie ist ein Dokument in FreeCAD aufgebaut?
Bevor du Objekte erstellst, ist es wichtig, die Datenhierarchie in FreeCAD zu verstehen:
- Dokument – ist eine geöffnete Datei (.FCStd). Alles, was du erstellst, befindet sich innerhalb eines Dokuments.
- Objekt – ist ein parametrisches Objekt: Quader, Zylinder, Skizze usw.
- Form – ist ein geometrischer Körper (B-Rep), der visualisiert werden kann.
Du arbeitest immer im Kontext des aktiven Dokuments.
So erhältst du das aktuelle Dokument:
doc = FreeCAD.ActiveDocument
Falls kein Dokument existiert, erstelle ein neues:
doc = FreeCAD.newDocument("MeinEntwurf")
Teil 2. Erstellen eines Quaders per Python
Das einfachste 3D-Objekt in FreeCAD ist Part::Box.
Code-Beispiel:
doc = FreeCAD.ActiveDocument or FreeCAD.newDocument()
box = doc.addObject("Part::Box", "MeinQuader")
box.Length = 20.0
box.Width = 10.0
box.Height = 5.0
doc.recompute()
Was passiert hier?
doc.addObject("Part::Box", "MeinQuader")
→ Erstellt ein neues Objekt vom Typ „Quader“ mit dem Namen „MeinQuader“.- Das Objekt besitzt parametrische Eigenschaften:
Length,Width,Height. doc.recompute()→ Baut das Modell neu auf (zwingend erforderlich nach Änderungen!).
Alle Maße sind standardmäßig in Millimetern angegeben.
Teil 3. Addon: „Parametrischer Quader“
Nun erstellen wir ein Addon, das einen Quader mit vorgegebenen Abmessungen erzeugt.
Schritt 1. Ordner erstellen
.../Mod/ParamBoxAddon/
Schritt 2. Datei InitGui.py
# InitGui.py
import FreeCADGui
from ParamBoxAddon.param_box_workbench import ParamBoxWorkbench
FreeCADGui.addWorkbench(ParamBoxWorkbench())
Schritt 3. Datei param_box_workbench.py
# param_box_workbench.py
import FreeCAD, FreeCADGui
class CreateBoxCommand:
def GetResources(self):
return {
"MenuText": "Quader erstellen",
"ToolTip": "Erstelle einen parametrischen Quader mit Standardgröße"
}
def Activated(self):
# Dokument abrufen oder erstellen
doc = FreeCAD.ActiveDocument
if not doc:
doc = FreeCAD.newDocument("QuaderEntwurf")
# Quaderobjekt erstellen
box = doc.addObject("Part::Box", "MeinParamQuader")
box.Length = 30.0
box.Width = 20.0
box.Height = 10.0
# Neuberechnung ist zwingend erforderlich!
doc.recompute()
# Optional: Objekt auswählen
FreeCADGui.Selection.clearSelection()
FreeCADGui.Selection.addSelection(box)
def IsActive(self):
return True
class ParamBoxWorkbench(FreeCADGui.Workbench):
MenuText = "Parametrischer Quader"
ToolTip = "Erstelle einen einfachen parametrischen Quader"
def Initialize(self):
self.list = ["CreateBoxCommand"]
self.appendToolbar("Quader-Werkzeuge", self.list)
self.appendMenu("ParamQuader", self.list)
def GetClassName(self):
return "Gui::PythonWorkbench"
FreeCADGui.addCommand("CreateBoxCommand", CreateBoxCommand())
Schritt 4. Funktionsprüfung
- Speichere die Dateien
- Starte FreeCAD neu
- Wähle die Arbeitsumgebung „Parametrischer Quader“ aus
- Klicke auf die Schaltfläche „Quader erstellen“
Ein grauer Quader sollte im 3D-Fenster erscheinen.
Prüfe die Parametrie!
- Klicke im Modellbaum („Model“) doppelt auf
MeinParamQuader - Ändere im Datenpanel z. B. die Länge auf
50 - Drücke Enter → das Modell aktualisiert sich automatisch!
Das ist parametrisches Modellieren.
Teil 4. Weitere Grundobjekte
Du kannst mehr als nur Quader erstellen. Hier einige Beispiele:
Zylinder
cyl = doc.addObject("Part::Cylinder", "MeinZylinder")
cyl.Radius = 10.0
cyl.Height = 25.0
Kugel
sphere = doc.addObject("Part::Sphere", "MeineKugel")
sphere.Radius = 15.0
Kegel
cone = doc.addObject("Part::Cone", "MeinKegel")
cone.Radius1 = 10.0 # unterer Radius
cone.Radius2 = 5.0 # oberer Radius
cone.Height = 20.0
Alle diese Objekte stammen aus dem Part-Modul, das in FreeCAD integriert ist.
Praktische Aufgabe
- Ändere das Addon so, dass es stattdessen einen Zylinder erstellt.
- Stelle sicher, dass das Objekt beim Erstellen einen eindeutigen Namen erhält (z. B.
Quader_1,Quader_2, …), falls ein Objekt mit diesem Namen bereits existiert. - Füge einen zweiten Befehl – „Zylinder erstellen“ – in dieselbe Arbeitsumgebung ein.
Hinweis für eindeutige Namen:
base_name = "MeinQuader"
index = 1
name = base_name
while name in [obj.Name for obj in doc.Objects]:
name = f"{base_name}_{index}"
index += 1
box = doc.addObject("Part::Box", name)
Tipps zum Debuggen
- Rufe immer
doc.recompute()nach Änderungen auf. - Verwende
FreeCAD.Console.PrintMessage("Text\n")zur Fehlersuche (Nachrichten erscheinen in der „Berichtsansicht“). - Prüfe vor der Arbeit, ob ein Dokument existiert.
Was kommt als Nächstes?
In Lektion 4 werden wir:
- Lernen, eine grafische Benutzeroberfläche (GUI) mit Eingabefeldern zu erstellen
- Ein Fenster entwickeln, in dem der Benutzer Länge, Breite und Höhe eingibt
- Durch Klick auf eine Schaltfläche einen Quader mit diesen Parametern erzeugen
Damit wird es bereits ein echtes Werkzeug – nicht nur eine Demonstration!