Part scripting/de: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 10: Line 10:
==Einführung==
==Einführung==


<div class="mw-translate-fuzzy">
Die im Modul Part verwendete Hauptdatenstruktur ist der Datentyp [http://en.wikipedia.org/wiki/Boundary_representation BRep] von OpenCascade.
Die im Modul Part verwendete Hauptdatenstruktur ist der Datentyp [http://en.wikipedia.org/wiki/Boundary_representation BRep] von OpenCascade.
Fast alle Inhalte und Objekttypen des Part Moduls sind per [[Python/de|Python]] Skripten verfügbar. Dazu gehören geometrische Primitive wie Linie und Kreis (oder Bogen) und die gesamte Palette der TopoFormen, wie Knoten, Kanten, Drähte, Flächen, Festkö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 Bool'sche Vereinigung/Differenz/Überschneidung verfügbar. Entdecke den Inhalt des Part Moduls, wie auf der Seite [[FreeCAD Scripting Basics/de|FreeCAD Grundlagen SKripten]] beschrieben, um mehr zu erfahren.
Fast alle Inhalte und Objekttypen des Part Moduls sind per [[Python/de|Python]] Skripten verfügbar. Dazu gehören geometrische Primitive wie Linie und Kreis (oder Bogen) und die gesamte Palette der TopoFormen, wie Knoten, Kanten, Drähte, Flächen, Festkö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 Bool'sche Vereinigung/Differenz/Überschneidung verfügbar. Entdecke den Inhalt des Part Moduls, wie auf der Seite [[FreeCAD Scripting Basics/de|FreeCAD Grundlagen SKripten]] beschrieben, um mehr zu erfahren.
</div>


<div class="mw-translate-fuzzy">
Das grundlegendste Objekt, das erstellt werden kann, ist ein [[Part Feature/de|Part Formelement]], das eine einfache {{PropertyData/de|Platzierungs}} Eigenschaft und Grundeigenschaften hat, um seine Farbe und sein Aussehen zu definieren.
Das grundlegendste Objekt, das erstellt werden kann, ist ein [[Part Feature/de|Part Formelement]], das eine einfache {{PropertyData/de|Platzierungs}} Eigenschaft und Grundeigenschaften hat, um seine Farbe und sein Aussehen zu definieren.
</div>


<div class="mw-translate-fuzzy">
Ein weiteres einfaches Objekt, das in geometrischen 2D Objekten verwendet wird, ist [[Part Part2DObject/de|Part Part2DObjekt]], das die Basis von [[Sketcher_SketchObject/de|Skizzierer SkizzeObjekt]] ist. ([[Sketcher Workbench/de|Skizzierer]]), und die meisten [[Draft Workbench/de|Entwurfselemente]].
Ein weiteres einfaches Objekt, das in geometrischen 2D Objekten verwendet wird, ist [[Part Part2DObject/de|Part Part2DObjekt]], das die Basis von [[Sketcher_SketchObject/de|Skizzierer SkizzeObjekt]] ist. ([[Sketcher Workbench/de|Skizzierer]]), und die meisten [[Draft Workbench/de|Entwurfselemente]].
</div>


===Siehe auch===
===Siehe auch===
Line 32: Line 38:


Dieses Skript befindet sich im Installationsverzeichnis des Programms und kann untersucht werden, um zu sehen, wie die Basisgrundelemente aufgebaut sind.
Dieses Skript befindet sich im Installationsverzeichnis des Programms und kann untersucht werden, um zu sehen, wie die Basisgrundelemente aufgebaut sind.

{{Code|code=
{{Code|code=
$INSTALL_DIR/Mod/Part/parttests/part_test_objects.py
$INSTALL_DIR/Mod/Part/parttests/part_test_objects.py
Line 38: Line 45:
==Beispiele==
==Beispiele==


===Line===

<div class="mw-translate-fuzzy">
Zum erstellen eines Linienelements schalte um zur Python Konsole und gib ein:
Zum erstellen eines Linienelements schalte um zur Python Konsole und gib ein:
</div>


{{Code|code=
{{Code|code=
import Part,PartGui
import FreeCAD as App
import Part
doc=App.newDocument()

l=Part.LineSegment()
doc = App.newDocument()
l.StartPoint=(0.0,0.0,0.0)

l.EndPoint=(1.0,1.0,1.0)
line = Part.LineSegment()
doc.addObject("Part::Feature","Line").Shape=l.toShape()
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()
doc.recompute()
}}
}}


<div class="mw-translate-fuzzy">
Lass uns das obige Python Beispiel Schritt für Schritt betrachten:
Lass uns das obige Python Beispiel Schritt für Schritt betrachten:
</div>


{{Code|code=
{{Code|code=
import Part,PartGui
import FreeCAD as App
import Part
doc=App.newDocument()
doc = App.newDocument()
}}
}}


<div class="mw-translate-fuzzy">
lädt die Part Modul und erstellt ein neues Dokument
lädt die Part Modul und erstellt ein neues Dokument
</div>


{{Code|code=
{{Code|code=
l=Part.LineSegment()
line = Part.LineSegment()
l.StartPoint=(0.0,0.0,0.0)
line.StartPoint = (0.0, 0.0, 0.0)
l.EndPoint=(1.0,1.0,1.0)
line.EndPoint = (1.0, 1.0, 1.0)
}}
}}


Line 68: Line 89:


{{Code|code=
{{Code|code=
doc.addObject("Part::Feature","Line").Shape=l.toShape()
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
}}
}}


<div class="mw-translate-fuzzy">
Dadurch wird dem Dokument ein Part Objekttyp hinzugefügt und weist die Formdarstellung des Liniensegments der 'Form' Eigenschaft des hinzugefügten Objekts zu. Es ist wichtig, hier zu verstehen, dass wir ein geometrisches Grundelement (das Part.LineSegment) verwendet haben, um daraus eine TopoForm zu erstellen (die toShape() Methode). Nur Formen können dem Dokument hinzugefügt werden. In FreeCAD werden Geometrie Grundelemente als "Baustrukturen" für Formen verwendet.
Dadurch wird dem Dokument ein Part Objekttyp hinzugefügt und weist die Formdarstellung des Liniensegments der 'Form' Eigenschaft des hinzugefügten Objekts zu. Es ist wichtig, hier zu verstehen, dass wir ein geometrisches Grundelement (das Part.LineSegment) verwendet haben, um daraus eine TopoForm zu erstellen (die toShape() Methode). Nur Formen können dem Dokument hinzugefügt werden. In FreeCAD werden Geometrie Grundelemente als "Baustrukturen" für Formen verwendet.
</div>


{{Code|code=
{{Code|code=
Line 77: Line 101:
}}
}}


<div class="mw-translate-fuzzy">
Aktualisiert das Dokument. Damit auch die visuelle Darstellung des neuen Part Objekts.
Aktualisiert das Dokument. Damit auch die visuelle Darstellung des neuen Part Objekts.
</div>


<div class="mw-translate-fuzzy">
Beachte, dass ein Liniensegment durch Angabe der Anfangs-und Endpunkt direkt im Konstruktor erstellt werden kann, z.B. Part.LineSegment (Punkt1, Punkt2), oder wir können eine Standardlinie erstellen und seine Eigenschaften anschießend festlegen, wie wir es hier gemacht haben.
Beachte, dass ein Liniensegment durch Angabe der Anfangs-und Endpunkt direkt im Konstruktor erstellt werden kann, z.B. Part.LineSegment (Punkt1, Punkt2), oder wir können eine Standardlinie erstellen und seine Eigenschaften anschießend festlegen, wie wir es hier gemacht haben.
</div>


<div class="mw-translate-fuzzy">
Eine Linie kann erstellt werden auch mit:
Eine Linie kann erstellt werden auch mit:
</div>


{{Code|code=
{{Code|code=
import FreeCAD
import FreeCAD as App
import Part
import Part
DOC = FreeCAD.newDocument()


def mycreateLine(pt1, pt2, objName):
def my_create_line(pt1, pt2, obj_name):
obj = DOC.addObject("Part::Line", objName)
obj = App.ActiveDocument.addObject("Part::Line", obj_name)
obj.X1 = pt1[0]
obj.X1 = pt1[0]
obj.Y1 = pt1[1]
obj.Y1 = pt1[1]
Line 98: Line 127:
obj.Z2 = pt2[2]
obj.Z2 = pt2[2]


DOC.recompute()
App.ActiveDocument.recompute()
return obj
return obj


line = mycreateLine((0,0,0), (0,10,0), "LineName")
line = my_create_line((0, 0, 0), (0, 10, 0), "LineName")
}}
}}

===Circle===


Ein Kreis kann in ähnlicher Weise erstellt werden:
Ein Kreis kann in ähnlicher Weise erstellt werden:


{{Code|code=
{{Code|code=
import FreeCAD as App
import Part
import Part

doc = App.activeDocument()
doc = App.activeDocument()

c = Part.Circle()
circle = Part.Circle()
c.Radius=10.0
circle.Radius = 10.0
f = doc.addObject("Part::Feature", "Circle")
obj = doc.addObject("Part::Feature", "Circle")
f.Shape = c.toShape()
obj.Shape = circle.toShape()

doc.recompute()
doc.recompute()
}}
}}


<div class="mw-translate-fuzzy">
oder mit:
oder mit:
</div>


{{Code|code=
{{Code|code=
import FreeCAD
import FreeCAD as App
import Part
import Part
DOC = FreeCAD.newDocument()


def mycreateCircle(rad, objName):
def my_create_circle(rad, obj_name):
obj = DOC.addObject("Part::Circle", objName)
obj = App.ActiveDocument.addObject("Part::Circle", obj_name)
obj.Radius = rad
obj.Radius = rad


DOC.recompute()
App.ActiveDocument.recompute()
return obj
return obj


circle = mycreateCircle(5.0, "CircleName")
circle = my_create_circle(5.0, "CircleName")
}}
}}


or create a circle defined by it's center, axis and radius using:
Alternatively we can create a circle by defining its center, axis and radius:


{{Code|code=
{{Code|code=
import FreeCAD as App
import Part
import Part

doc = App.activeDocument()
doc = App.activeDocument()

center = App.Vector(1,2,3)
axis = App.Vector(1,1,1)
center = App.Vector(1, 2, 3)
axis = App.Vector(1, 1, 1)
radius = 10
radius = 10
c=Part.Circle(center,axis,radius)
circle = Part.Circle(center, axis, radius)
f = doc.addObject("Part::Feature", "Circle")
obj = doc.addObject("Part::Feature", "Circle")
f.Shape = c.toShape()
obj.Shape = circle.toShape()

doc.recompute()
doc.recompute()
}}
}}


Or by defining three points on its circumference:
or create a circle defined by three points using:


{{Code|code=
{{Code|code=
import FreeCAD as App
import Part
import Part

doc = App.activeDocument()
doc = App.activeDocument()

p1 = App.Vector(10,0,0)
p2 = App.Vector(0,10,0)
p1 = App.Vector(10, 0, 0)
p3 = App.Vector(0,0,10)
p2 = App.Vector(0, 10, 0)
c = Part.Circle(p1,p2,p3)
p3 = App.Vector(0, 0, 10)
circle = Part.Circle(p1, p2, p3)
f = doc.addObject("Part::Feature", "Circle")
obj = doc.addObject("Part::Feature", "Circle")
f.Shape = c.toShape()
obj.Shape = circle.toShape()

doc.recompute()
doc.recompute()
}}
}}


<div class="mw-translate-fuzzy">
Bemerke wieder, wir verwendeten den Kreis (Geometrie Grundelement), um eine Form daraus zu erstellen. Wir können natürlich noch immer auf unsere Konstruktionsgeometrie später zugreifen, und zwar so:
Bemerke wieder, wir verwendeten den Kreis (Geometrie Grundelement), um eine Form daraus zu erstellen. Wir können natürlich noch immer auf unsere Konstruktionsgeometrie später zugreifen, und zwar so:
</div>


{{Code|code=
{{Code|code=
s = f.Shape
shape = obj.Shape
e = s.Edges[0]
edge = shape.Edges[0]
c = e.Curve
curve = edge.Curve
}}
}}


<div class="mw-translate-fuzzy">
Hier nehmen wir die Form unseres Objekts f, dann nehmen wir die Liste der Kanten. In diesem Fall wird es nur eine geben, weil wir die ganze Form aus einem einzelnen Kreis machten, also nehmen wir nur das erste Element der Kantenliste, und wir nehmen seinen Verlauf. Jede Kante hat einen Verlauf, welches das Geometrie Grundelement ist, worauf der Verlauf basiert ist.
Hier nehmen wir die Form unseres Objekts f, dann nehmen wir die Liste der Kanten. In diesem Fall wird es nur eine geben, weil wir die ganze Form aus einem einzelnen Kreis machten, also nehmen wir nur das erste Element der Kantenliste, und wir nehmen seinen Verlauf. Jede Kante hat einen Verlauf, welches das Geometrie Grundelement ist, worauf der Verlauf basiert ist.
</div>

===Arc===

An arc can be created like this:

{{Code|code=
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()
}}

This draws a half circle. The center is at (0, 0, 0). The radius is 10. P1 is the start point on +X axis. P2 is the middle point on +Y axis and P3 is the end point on -X axis.

You can also create an arc from a circle:

{{Code|code=
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()
}}


It needs a circle, and a start angle and end angle in radians.
Gehe auf die Seite [[Topological data scripting/de|Topologisches Datenskripting]], wenn du mehr wissen möchtest.





Revision as of 20:35, 13 February 2022

Einführung

Die im Modul Part verwendete Hauptdatenstruktur ist der Datentyp BRep von OpenCascade. Fast alle Inhalte und Objekttypen des Part Moduls sind per Python Skripten verfügbar. Dazu gehören geometrische Primitive wie Linie und Kreis (oder Bogen) und die gesamte Palette der TopoFormen, wie Knoten, Kanten, Drähte, Flächen, Festkö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 Bool'sche Vereinigung/Differenz/Überschneidung verfügbar. Entdecke den Inhalt des Part Moduls, 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-EigenschaftPlatzierungs Eigenschaft und Grundeigenschaften hat, um seine Farbe und sein Aussehen zu definieren.

Ein weiteres einfaches Objekt, das in geometrischen 2D Objekten verwendet wird, ist Part Part2DObjekt, das die Basis von Skizzierer SkizzeObjekt ist. (Skizzierer), und die meisten Entwurfselemente.

Siehe auch

Testskript

Teste die Erstellung von Part Grundelementen mit einem Skript. introduced in version 0.19

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

Line

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

Lass uns das obige Python Beispiel Schritt für Schritt betrachten:

import FreeCAD as App
import Part
doc = App.newDocument()

lädt die Part Modul 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()

Dadurch wird dem Dokument ein Part Objekttyp hinzugefügt und weist die Formdarstellung des Liniensegments der 'Form' Eigenschaft des hinzugefügten Objekts zu. Es ist wichtig, hier zu verstehen, dass wir ein geometrisches Grundelement (das Part.LineSegment) verwendet haben, um daraus eine TopoForm zu erstellen (die toShape() Methode). Nur Formen können dem Dokument hinzugefügt werden. In FreeCAD werden Geometrie Grundelemente als "Baustrukturen" für Formen verwendet.

doc.recompute()

Aktualisiert das Dokument. Damit auch die visuelle Darstellung des neuen Part Objekts.

Beachte, dass ein Liniensegment durch Angabe der Anfangs-und Endpunkt direkt im Konstruktor erstellt werden kann, z.B. Part.LineSegment (Punkt1, Punkt2), oder wir können eine Standardlinie erstellen und seine Eigenschaften anschießend festlegen, wie wir es hier gemacht haben.

Eine Linie kann erstellt werden auch 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")

Circle

Ein Kreis kann in ähnlicher 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")

Alternatively we can create a circle by defining its center, axis and 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()

Or by defining three points on its circumference:

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

Bemerke wieder, wir verwendeten den Kreis (Geometrie Grundelement), um eine Form daraus zu erstellen. Wir können natürlich noch immer auf unsere Konstruktionsgeometrie später zugreifen, und zwar so:

shape = obj.Shape
edge = shape.Edges[0]
curve = edge.Curve

Hier nehmen wir die Form unseres Objekts f, dann nehmen wir die Liste der Kanten. In diesem Fall wird es nur eine geben, weil wir die ganze Form aus einem einzelnen Kreis machten, also nehmen wir nur das erste Element der Kantenliste, und wir nehmen seinen Verlauf. Jede Kante hat einen Verlauf, welches das Geometrie Grundelement ist, worauf der Verlauf basiert ist.

Arc

An arc can be created like this:

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

This draws a half circle. The center is at (0, 0, 0). The radius is 10. P1 is the start point on +X axis. P2 is the middle point on +Y axis and P3 is the end point on -X axis.

You can also create an arc from a circle:

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

It needs a circle, and a start angle and end angle in radians.