Script di Part
Introduzione
La struttura dati principale utilizzata nel modulo Parte è il tipo di dati BRep da OpenCASCADE. Quasi tutti i contenuti e i tipi di oggetti del modulo Part sono disponibili per lo scripting con Python. Ciò include le primitive geometriche, come linee, cerchi e archi, e l'intera gamma di forme topografiche, come vertici, bordi, fili, facce, solidi e composti. Per ciascuno di questi oggetti esistono diversi metodi di creazione e per alcuni di essi, in particolare TopoShapes, sono disponibili anche operazioni avanzate come unione/differenza/intersezione booleana. Si possono esplorare i contenuti del modulo Parte, come descritto nella pagina Script di base per FreeCAD, per saperne di più.
L'oggetto più semplice che può essere creato è Part, che ha una semplice proprietà DatiPlacement e le proprietà di base per definirne il colore e l'aspetto.
Un altro oggetto semplice utilizzato negli oggetti geometrici 2D è il Part Part2DObject, che è la base di Sketcher SketchObject e della maggior parte dei Draft elements.
Vedere anche
Script di test
Testare la creazione di Primitive Part con uno script. disponibile dalla versione 0.19
import parttests.part_test_objects as pto
pto.create_test_file("example_file")
Questo script si trova nella cartella d'installazione del programma e può essere esaminato per vedere come vengono costruite le primitive di base.
$INSTALL_DIR/Mod/Part/parttests/part_test_objects.py
Esempi
Linea
Per creare un elemento di linea, passa alla console Python e inserisci:
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()
Let's go through the above Python example step by step:
import FreeCAD as App
import Part
doc = App.newDocument()
This loads the FreeCAD and Part modules and creates a new document.
line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)
Line is actually a line segment, hence the start and endpoint.
obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()
This adds a Part object type to the document and assigns the shape representation of the line segment to the Shape
property of the added object. It is important to understand here that we use a geometric primitive (the Part.LineSegment
) to create a TopoShape out of it (with the toShape()
method). Only shapes can be added to the document. In FreeCAD geometric primitives are used as "building structures" for shapes.
doc.recompute()
Updates the document. This also prepares the visual representation of the new Part object.
Note that a line segment can also be created by specifying its start and endpoint directly in the constructor, for example Part.LineSegment(point1, point2)
, or we can create a default line and set its properties afterwards, as we did here.
A Line can also be created using:
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
A circle can be created in a similar way:
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()
Or using:
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()
Note again, we used the circle (geometric primitive) to construct a shape. We can of course still access our construction geometry afterwards, by doing:
shape = obj.Shape
edge = shape.Edges[0]
curve = edge.Curve
Here we take the Shape
of our object obj
and then its list of Edges
. In this case there will be only one edge because we made the shape out of a single circle. So we take only the first item in the Edges
list, and then take its curve. Every edge has a Curve
, which is the geometric primitive it is based on.
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.
We 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.
- 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
- Primitives: Box, Cylinder, Sphere, Cone, Torus, Tube, Create primitives, Shape builder
- Creation and modification: Extrude, Revolve, Mirror, Fillet, Chamfer, Make face from wires, Ruled Surface, Loft, Sweep, Section, Cross sections, 3D Offset, 2D Offset, Thickness, Projection on surface, Attachment
- Boolean: Make compound, Explode Compound, Compound Filter, Boolean, Cut, Fuse, Common, Connect, Embed, Cutout, Boolean fragments, Slice apart, Slice, XOR
- Measure: Measure Linear, Measure Angular, Measure Refresh, Clear All, Toggle All, Toggle 3D, Toggle Delta