Skizzierer Skripten

From FreeCAD Documentation
Jump to navigation Jump to search
This page is a translated version of the page Sketcher scripting and the translation is 54% complete.
Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎polski • ‎português do Brasil • ‎русский

Creating a SketchObject using Python

We create a SketchObject like this:

import FreeCAD as App
import Part
import Sketcher

doc = App.newDocument()  

sketch = doc.addObject("Sketcher::SketchObject", "Sketch")
sketch.addGeometry(Part.LineSegment(App.Vector(1.2, 1.8, 0),
                                    App.Vector(5.2, 5.3, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(6.5, 1.5, 0),
                                    App.Vector(10.2, 5.0, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(12.2, 1.0, 0),
                                    App.Vector(15.4, 5.0, 0)), False)

doc.recompute()

It also adds three lines in the newly created Sketch.

Erstellen einer Beschränkung mit Python

Eine geometrische Beschränkung Sketcher ConstrainCoincident.svg Sketcher ConstrainPointOnObject.svg Sketcher ConstrainVertical.svg Sketcher ConstrainHorizontal.svg Sketcher ConstrainParallel.svg Sketcher ConstrainPerpendicular.svg Sketcher ConstrainTangent.svg Sketcher ConstrainEqual.svg Sketcher ConstrainSymmetric.svg Sketcher ConstrainBlock.svg und die spezielle Sketcher ConstrainInternalAlignment.svg InterneAusrichtungsbeschränkungen können von Makros und von der Python Konsole aus durch Verwendung des folgenden Befehls erstellt werden:

sketch.addConstraint(Sketcher.Constraint(ConstraintType, EdgeOrPartOfEdge))

Eine maßliche Beschränkung Sketcher ConstrainLock.svg Sketcher ConstrainDistanceX.svg Sketcher ConstrainDistanceY.svg Sketcher ConstrainDistance.svg Sketcher ConstrainRadius.svg Sketcher ConstrainDiameter.svg Sketcher ConstrainAngle.svg und die spezielle Beschränkung Sketcher ConstrainSnellsLaw.svg Snelliusches Gesetz kann von Makros und von der Python Konsole aus durch Verwendung des folgenden Befehls erstellt werden:

sketch.addConstraint(Sketcher.Constraint(DimensionalConstraintType, EdgeOrPartOfEdge, App.Units.Quantity("float_value unit")))

e.g.

sketch.addConstraint(Sketcher.Constraint(DimensionalConstraintType, EdgeOrPartOfEdge, App.Units.Quantity("123.0 mm")))

Das erste Argument Beschränkungstyp wird weiter unten in Beschränkungstypen beschrieben.

Eine Beschränkung kann bis zu sechs Argumente annehmen, die Kanten sind oder angeben, welches Abschnittsteil einer Kante von der Beschränkung verwendet wird. In der Dokumentation der einzelnen Beschränkungen findest du Details darüber, welche Kombinationen von Kanten und Unterteilen von Kanten als Argumente übergeben werden können. Das Hauptproblem bei dieser Funktion besteht darin, die Zeilennummer und die Knotennummer der zu bearbeitenden Linien korrekt zu identifizieren. Die folgenden Abschnitte beschreiben, wie man Identifiziere die Nummerierung einer Linie) und wie man Identifiziere die Nummerierung der Unterteile einer Linie).

Beschränkungstypen

Bei geometrischen Beschränkungen ist das erste Argument eines der folgenden. Die möglichen Kombinationen von Argumenten, die für jede Beschränkung zulässig sind, findest du auf der entsprechenden Funktionsseite.

Code Icon Feature
"Coincident" Sketcher ConstrainCoincident.svg Coincident
"PointOnObject" Sketcher ConstrainPointOnObject.svg Point On Object
"Vertical" Sketcher ConstrainVertical.svg Vertical
"Horizontal" Sketcher ConstrainHorizontal.svg Horizontal
"Parallel" Sketcher ConstrainParallel.svg Parallel
"Perpendicular" Sketcher ConstrainPerpendicular.svg Perpendicular
"Tangent" Sketcher ConstrainTangent.svg Tangent
"Equal" Sketcher ConstrainEqual.svg Equal
"Symmetric" Sketcher ConstrainSymmetric.svg Symmetric
"Block" Sketcher ConstrainBlock.svg Block

Die Sketcher ConstrainInternalAlignment.svg InterneAusrichtungsbeschränkungen verhalten sich für die Zwecke der Skripterstellung wie geometrische Beschränkungen. Auch hier findest du auf der entsprechenden Funktionsseite die möglichen Kombinationen von Argumenten, die für jede Beschränkung zulässig sind.

Code Icon Feature
"InternalAlignment:EllipseMajorDiameter" Sketcher ConstrainInternalAlignment.svg InternalAlignment
"InternalAlignment:EllipseMinorDiameter" Sketcher ConstrainInternalAlignment.svg InternalAlignment
"InternalAlignment:EllipseFocus1" Sketcher ConstrainInternalAlignment.svg InternalAlignment
"InternalAlignment:EllipseFocus2" Sketcher ConstrainInternalAlignment.svg InternalAlignment

Bei Bemaßungsbeschränkungen ist das erste Argument eines der folgenden. Die möglichen Kombinationen von Argumenten, die für jede Beschränkung zulässig sind, findest du auf der entsprechenden Funktionsseite.

Code Icon Feature
"DistanceX" Sketcher ConstrainDistanceX.svg Horizontal distance
"DistanceY" Sketcher ConstrainDistanceY.svg Vertical distance
"Distance" Sketcher ConstrainDistance.svg Distance
"Radius" Sketcher ConstrainRadius.svg Radius
"Diameter" Sketcher ConstrainDiameter.svg Diameter
"Angle" Sketcher ConstrainAngle.svg Angle
"AngleViaPoint" Sketcher ConstrainAngle.svg Angle

Die Sketcher ConstrainSnellsLaw.svg Snelliusches Gesetz Beschränkungen verhalten sich für die Zwecke der Skripterstellung wie Bemaßungsbeschränkungen. Auch hier findest du auf der entsprechenden Funktionsseite die möglichen Kombinationen von Argumenten, die für jede Beschränkung zulässig sind.

Code Icon Feature
"SnellsLaw" Sketcher ConstrainSnellsLaw.svg Snell's law

Die Sketcher ConstrainLock.svg Schloss Beschränkung ist ein GUI Befehl, der eine Sketcher ConstrainDistanceX.svg Horizontaler Abstand und eine Sketcher ConstrainDistanceY.svg Vertikaler Abstandsbeschränkung erzeugt, es ist keine eigene Beschränkung.

Identifizierung der Nummerierung einer Linie

Ich habe drei Linien gezeichnet, wie in der folgenden Abbildung dargestellt.

PartDesignConstraintPointOnPointScriptingFigure1.jpg

Durch bewegen des Mauszeigers über die Linie, kannst du die Zeilennummer unten links im FreeCAD Fenster sehen, siehe nächste Abbildung.

PartDesignConstraintPointOnPointScriptingFigure2.jpg

Leider beginnt die angezeigte Nummerierung in den FreeCAD Fenstern bei 1, während die Nummerierung der Linie, die für das Skript verwendet wird, bei 0 beginnt: Das bedeutet, dass du jedes Mal, wenn du dich auf eine Zeile beziehen willst, eine Zahl abziehen musst.

Positive Zahlen bezeichnen Skizzenkanten (Geraden, Kreise, Kegel, B-Splines usw.). Die folgenden Werte können verwendet werden, um Elemente zu kennzeichnen, die keine Skizzenkanten sind:

  • -1 bezeichnet die horizontale x Achse
  • -2 bezeichnet die vertikale y Achse
  • -n bezeichnet die externe Geometrieelementnummer n-3 (z. B. würde das externe Geometrieelement mit Index 0 in der reduzierten Liste App.ActiveDocument.Sketch.ExternalGeometry mit -3 bezeichnet, das folgende Element in der reduzierten Liste mit -4 usw.).

Identifizierung der Nummerierung der Abschnittsteile einer Linie

Um festzulegen, welcher Teil einer Linie von einer Beschränkung betroffen ist, kannst du die folgenden Werte verwendet werden:

  • 0, um anzugeben, dass die Beschränkung die gesamte Kante betrifft.
  • 1, um anzuzeigen, dass die Beschränkung den Anfangspunkt der Kante betrifft (ein Vollkreis hat keinen Anfangspunkt).
  • 2, um anzuzeigen, dass die Beschränkung den Endpunkt der Kante betrifft.
  • 3, um anzuzeigen, dass die Beschränkung den Mittelpunkt der Kante betrifft. Für Sketcher CompCreateCircle.pngKreise und Sketcher CompCreateConic.pngKegel (Ellipsen) ist dies der Mittelpunkt des Kreises bzw. das Zentrum (Schnittpunkt von Haupt- und Nebenachse) der Ellipse. Bei geraden Sketcher CreateLine.svgLinien kann 3 nicht zur Angabe des Mittelpunktes verwendet werden.
  • n, um anzuzeigen, dass die Beschränkung den n-ten Pol eines Sketcher CompCreateBSpline.pngB-Spline betrifft.

Die mit 1 und 2 gekennzeichneten Knoten sind in der Reihenfolge ihrer Erstellung nummeriert. Um die Reihenfolge ihrer Erstellung herauszufinden (wenn du viele Linien hast, kannst du dich nicht erinnern, welchen Knoten du zuerst erstellt hast), musst du nur den Mauszeiger über die beiden Knoten einer Linie bewegen, siehe folgende Abbildung.

PartDesignConstraintPointOnPointScriptingFigure3.jpg

Wenn du z. B. 4 und 5 liest, bedeutet dies, dass der Knoten mit der niedrigeren Nummer (4 in diesem Beispiel) mit der Nummer 1 (zuerst im Skriptbefehl) und der Knoten mit der höheren Nummer (5 in diesem Beispiel) mit der Nummer 2 im Skriptbefehl referenziert wird.

Beispiel

Nehmen wir das vorherige Beispiel der drei Linien. Die nachfolgende Abbildung zeigt die Nummerierung der einzelnen Linien und deren Knoten gemäß der Konvention für die Skripterstellung.

PartDesignConstraintPointOnPointScriptingFigure3Bis.jpg

blauer Text: Nummerierung der Linie, svhwarzer Text: Nummerierung der Knoten

Der Befehl Sketch.addConstraint(Sketcher.Constraint('Coincident',1,2,2,1)) ergibt folgendes Ergebnis:

PartDesignConstraintPointOnPointScriptingFigure4.jpg

The full code to draw the three lines and add a Coincident constraint on two points from two lines is like this:

import FreeCAD as App
import Part
import Sketcher

doc = App.newDocument()  

sketch = doc.addObject("Sketcher::SketchObject", "Sketch")
sketch.addGeometry(Part.LineSegment(App.Vector(1.2, 1.8, 0),
                                    App.Vector(5.2, 5.3, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(6.5, 1.5, 0),
                                    App.Vector(10.2, 5.0, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(12.2, 1.0, 0),
                                    App.Vector(15.4, 5.0, 0)), False)
sketch.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1))

doc.recompute()