Part scripting/de: Difference between revisions
No edit summary |
No edit summary |
||
(23 intermediate revisions by 2 users not shown) | |||
Line 8: | Line 8: | ||
{{TOCright}} |
{{TOCright}} |
||
<span id="Introduction"></span> |
|||
==Einführung== |
==Einführung== |
||
Line 13: | Line 14: | ||
Fast alle Inhalte und Objekttypen des Part Moduls stehen dem [[Python/de|Python]]-Skripten zur Verfügung. Dazu gehören geometrische Primitive wie Linien, Kreise, Bögen und die gesamte Palette der TopoFormen, wie Knoten, Kanten, Drähte, Flächen, Volumenkörper und Verbünde. Für jedes dieser Objekte gibt es mehrere Erstellungsmethoden, und für einige von ihnen, insbesondere die TopoFormen, sind auch fortgeschrittene Operationen wie Boolesche Vereinigung/Differenz/Überschneidung verfügbar. Entdecke den Inhalt des Moduls Part, wie auf der Seite [[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen Skripten]] beschrieben, um mehr zu erfahren. |
Fast alle Inhalte und Objekttypen des Part Moduls stehen dem [[Python/de|Python]]-Skripten zur Verfügung. Dazu gehören geometrische Primitive wie Linien, Kreise, Bögen und die gesamte Palette der TopoFormen, wie Knoten, Kanten, Drähte, Flächen, Volumenkörper und Verbünde. Für jedes dieser Objekte gibt es mehrere Erstellungsmethoden, und für einige von ihnen, insbesondere die TopoFormen, sind auch fortgeschrittene Operationen wie Boolesche Vereinigung/Differenz/Überschneidung verfügbar. Entdecke den Inhalt des Moduls Part, wie auf der Seite [[FreeCAD_Scripting_Basics/de|FreeCAD Grundlagen Skripten]] beschrieben, um mehr zu erfahren. |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | Ein weiteres einfaches Objekt, das in geometrischen 2D |
||
</div> |
|||
<span id="See_also"></span> |
|||
===Siehe auch=== |
===Siehe auch=== |
||
Line 26: | Line 24: | ||
* [[OpenCASCADE/de|OpenCASCADE]] |
* [[OpenCASCADE/de|OpenCASCADE]] |
||
<span id="Test_script"></span> |
|||
==Testskript== |
==Testskript== |
||
Teste die Erstellung von [[Part_Primitives/de|Part Grundelementen]] mit einem Skript. |
Teste die Erstellung von [[Part_Primitives/de|Part Grundelementen]] mit einem Skript. |
||
{{Code|code= |
{{Code|code= |
||
Line 41: | Line 40: | ||
}} |
}} |
||
<span id="Examples"></span> |
|||
==Beispiele== |
==Beispiele== |
||
= |
<span id="Line"></span> |
||
⚫ | |||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 64: | Line 63: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 74: | Line 71: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 91: | Line 86: | ||
}} |
}} |
||
⚫ | Dies fügt dem Dokument ein Part-Objekt hinzu und weist die Formdarstellung des Liniensegments der Eigenschaft {{Incode|Form}} des hinzugefügten Objekts zu. Es ist hier wichtig zu verstehen, dass wir ein geometrisches Grundelement (das {{Incode|Part.LineSegment}}) verwenden, um daraus eine TopoForm zu erstellen (mit der Methode {{Incode|toShape()}}). Nur Formen können dem Dokument hinzugefügt werden. In FreeCAD werden geometrische Grundelemente als "Bauelemente" für Formen verwendet. |
||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 99: | Line 92: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 131: | Line 118: | ||
}} |
}} |
||
= |
<span id="Circle"></span> |
||
===Kreis=== |
|||
Ein Kreis kann |
Ein Kreis kann auf ähnliche Weise erstellt werden: |
||
{{Code|code= |
{{Code|code= |
||
Line 149: | Line 137: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 167: | Line 153: | ||
}} |
}} |
||
Alternativ kann ein Kreis durch das Festlegen von Mittelpunkt, Achse und Radius: |
|||
Alternatively we can create a circle by defining its center, axis and radius: |
|||
{{Code|code= |
{{Code|code= |
||
Line 185: | Line 171: | ||
}} |
}} |
||
Oder durch das Festlegen dreier Punkte auf seinem Umfang: |
|||
Or by defining three points on its circumference: |
|||
{{Code|code= |
{{Code|code= |
||
Line 203: | Line 189: | ||
}} |
}} |
||
⚫ | |||
<div class="mw-translate-fuzzy"> |
|||
⚫ | |||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 213: | Line 197: | ||
}} |
}} |
||
⚫ | Hier nehmen wir die Form {{Incode|Shape}} unseres Objekts {{Incode|obj}} und dann seine Liste der Kanten {{Incode|Edges}}. In diesem Fall wird es nur eine Kante geben, weil wir die ganze Form aus einem einzelnen Kreis erstellt haben. So nehmen wir nur das erste Element der Liste der Kanten {{Incode|Edges}} und danach seine Kurve. Jede Kante hat eine Kurve {{Incode|Curve}}, die das geometrische Grundelement ist, auf dem die Kante basiert. |
||
<div class="mw-translate-fuzzy"> |
|||
⚫ | Hier nehmen wir die Form unseres Objekts |
||
</div> |
|||
<span id="Arc"></span> |
|||
⚫ | |||
===Bogen=== |
|||
Ein Bogen kann auch so erstellt werden: |
|||
An arc can be created like this: |
|||
{{Code|code= |
{{Code|code= |
||
Line 237: | Line 220: | ||
}} |
}} |
||
Dies zeichnet einen Halbkreis. Der Mittelpunkt liegt bei (0, 0, 0). Der Radius ist 10. P1 ist der Startpunkt auf der positiven X-Achse. P2 ist der Mittelpunktauf der positiven Y-Achse und P3 ist der Endpunkt auf der negativen X-Achse. |
|||
Ein Bogen kann auch aus einem Kreis erstellt werden: |
|||
We can also create an arc from a circle: |
|||
{{Code|code= |
{{Code|code= |
||
Line 258: | Line 241: | ||
}} |
}} |
||
Er benötigt einen Kreis sowie Start- und Endwinkel im Bogenmaß. |
|||
It needs a circle, and a start angle and end angle in radians. |
|||
Latest revision as of 21:55, 22 May 2023
Einführung
Die im Modul Part verwendete Hauptdatenstruktur ist der Datentyp BRep von OpenCASCADE. Fast alle Inhalte und Objekttypen des Part Moduls stehen dem Python-Skripten zur Verfügung. Dazu gehören geometrische Primitive wie Linien, Kreise, Bögen und die gesamte Palette der TopoFormen, wie Knoten, Kanten, Drähte, Flächen, Volumenkörper und Verbünde. Für jedes dieser Objekte gibt es mehrere Erstellungsmethoden, und für einige von ihnen, insbesondere die TopoFormen, sind auch fortgeschrittene Operationen wie Boolesche Vereinigung/Differenz/Überschneidung verfügbar. Entdecke den Inhalt des Moduls Part, wie auf der Seite FreeCAD Grundlagen Skripten beschrieben, um mehr zu erfahren.
Das grundlegendste Objekt, das erstellt werden kann, ist ein Part Formelement, das eine einfache Daten-EigenschaftPlacement und Grundeigenschaften hat, um seine Farbe und sein Aussehen zu definieren.
Ein weiteres einfaches Objekt, das in geometrischen 2D-Objekten verwendet wird, ist das Part Part2DObjekt, das die Basis des Sketcher SketchObjects und der meisten Draft-Elemente ist.
Siehe auch
Testskript
Teste die Erstellung von Part Grundelementen mit einem Skript.
import parttests.part_test_objects as pto
pto.create_test_file("example_file")
Dieses Skript befindet sich im Installationsverzeichnis des Programms und kann untersucht werden, um zu sehen, wie die Basisgrundelemente aufgebaut sind.
$INSTALL_DIR/Mod/Part/parttests/part_test_objects.py
Beispiele
Linie
Zum erstellen eines Linienelements schalte um zur Python-Konsole und gib ein:
import FreeCAD as App
import Part
doc = App.newDocument()
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
doc.recompute()
Das obige Python-Beispiel Schritt für Schritt betrachtet:
import FreeCAD as App
import Part
doc = App.newDocument()
Dies lädt die Module FreeCAD und Part und erstellt ein neues Dokument.
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
Line ist eigentlich eine Linienabschnitt, folglich der Anfangs- und Endpunkt.
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
Dies fügt dem Dokument ein Part-Objekt hinzu und weist die Formdarstellung des Liniensegments der Eigenschaft Form
des hinzugefügten Objekts zu. Es ist hier wichtig zu verstehen, dass wir ein geometrisches Grundelement (das Part.LineSegment
) verwenden, um daraus eine TopoForm zu erstellen (mit der Methode toShape()
). Nur Formen können dem Dokument hinzugefügt werden. In FreeCAD werden geometrische Grundelemente als "Bauelemente" für Formen verwendet.
doc.recompute()
Aktualisiert das Dokument. Dies bereitet auch die visuelle Darstellung des neuen Part-Objekts auf.
Beachte, dass ein Linienabschnitt auch durch Angabe von Anfangs- und Endpunkt direkt im Konstruktor erstellt werden kann, z.B. Part.LineSegment(point1, point2)
, oder wir können eine Standardlinie erstellen und ihre Eigenschaften im Nachhinein festlegen, wie wir es hier gemacht haben.
Eine Linie kann auch erstellt werden mit:
import FreeCAD as App
import Part
def my_create_line(pt1, pt2, obj_name):
obj = App.ActiveDocument.addObject("Part::Line", obj_name)
obj.X1 = pt1[0]
obj.Y1 = pt1[1]
obj.Z1 = pt1[2]
obj.X2 = pt2[0]
obj.Y2 = pt2[1]
obj.Z2 = pt2[2]
App.ActiveDocument.recompute()
return obj
line = my_create_line((0, 0, 0), (0, 10, 0), "LineName")
Kreis
Ein Kreis kann auf ähnliche Weise erstellt werden:
import FreeCAD as App
import Part
doc = App.activeDocument()
circle = Part.Circle()
circle.Radius = 10.0
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Oder mit:
import FreeCAD as App
import Part
def my_create_circle(rad, obj_name):
obj = App.ActiveDocument.addObject("Part::Circle", obj_name)
obj.Radius = rad
App.ActiveDocument.recompute()
return obj
circle = my_create_circle(5.0, "CircleName")
Alternativ kann ein Kreis durch das Festlegen von Mittelpunkt, Achse und Radius:
import FreeCAD as App
import Part
doc = App.activeDocument()
center = App.Vector(1, 2, 3)
axis = App.Vector(1, 1, 1)
radius = 10
circle = Part.Circle(center, axis, radius)
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Oder durch das Festlegen dreier Punkte auf seinem Umfang:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(0, 0, 10)
circle = Part.Circle(p1, p2, p3)
obj = doc.addObject("Part::Feature", "Circle")
obj.Shape = circle.toShape()
doc.recompute()
Beachte wieder, wir verwendeten den Kreis (geometrisches Grundelement), um eine Form zu erstellen. Wir können natürlich weiterhin im Nachhinein auf unsere Konstruktionsgeometrie zugreifen, und zwar so:
shape = obj.Shape
edge = shape.Edges[0]
curve = edge.Curve
Hier nehmen wir die Form Shape
unseres Objekts obj
und dann seine Liste der Kanten Edges
. In diesem Fall wird es nur eine Kante geben, weil wir die ganze Form aus einem einzelnen Kreis erstellt haben. So nehmen wir nur das erste Element der Liste der Kanten Edges
und danach seine Kurve. Jede Kante hat eine Kurve Curve
, die das geometrische Grundelement ist, auf dem die Kante basiert.
Bogen
Ein Bogen kann auch so erstellt werden:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(-10, 0, 0)
arc = Part.Arc(p1, p2, p3)
obj = doc.addObject("Part::Feature", "Arc")
obj.Shape = arc.toShape()
doc.recompute()
Dies zeichnet einen Halbkreis. Der Mittelpunkt liegt bei (0, 0, 0). Der Radius ist 10. P1 ist der Startpunkt auf der positiven X-Achse. P2 ist der Mittelpunktauf der positiven Y-Achse und P3 ist der Endpunkt auf der negativen X-Achse.
Ein Bogen kann auch aus einem Kreis erstellt werden:
import FreeCAD as App
import Part
doc = App.activeDocument()
p1 = App.Vector(10, 0, 0)
p2 = App.Vector(0, 10, 0)
p3 = App.Vector(-10, 0, 0)
circle = Part.Circle(p1, p2, p3)
arc = Part.ArcOfCircle(circle, 0.0, 0.7854)
obj = doc.addObject("Part::Feature", "Arc")
obj.Shape = arc.toShape()
doc.recompute()
Er benötigt einen Kreis sowie Start- und Endwinkel im Bogenmaß.
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub
- Grundkörper: Würfel, Kegel, Zylinder, Kugel, Torus, Grundkörper, Shapebuilder
- Objekte ändern: Boolesche Operationen, Vereinigung, Schnitt, Ausschneiden, Join features, Connect, Embed, Cutout
- Aufteilungswerkzeuge: Boolesche Fragmente, Slice a part, Slice, XOR, Part Defeaturing
- Verbund: Erzeuge Verbund, Verbund auflösen, Compound Filter; Extrudieren, Kanten abrunden, Drehen, Schnitt, Schnitte..., Abschrägen, Spiegelung, Ruled Surface, Sweep, Loft
- Offset-Werkzeuge: 3D Offset, 2D Offset, Dicke, Projection on surface