Script di Part

From FreeCAD Documentation
Revision as of 10:37, 30 October 2022 by Simone.b (talk | contribs) (Created page with "oppure usando:")

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

Esaminiamo passo dopo passo l'esempio Python sopra:

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

Questo carica i moduli di FreeCAD e Part e crea un nuovo documento.

line = Part.LineSegment()
line.StartPoint = (0.0, 0.0, 0.0)
line.EndPoint = (1.0, 1.0, 1.0)

La linea è in realtà un segmento di retta, quindi ha un inizio e un punto finale.

obj = doc.addObject("Part::Feature", "Line")
obj.Shape= line.toShape()

Questo aggiunge un tipo di oggetto Parte al documento e assegna la rappresentazione della forma del segmento di linea alla proprietà Shape dell'oggetto aggiunto. È importante capire qui che usiamo una primitiva geometrica (il Part.LineSegment) per creare un TopoShape da esso (con il metodo toShape()). Solo le forme possono essere aggiunte al documento. In FreeCAD le primitive geometriche sono usate come "strutture edilizie" per le forme.

doc.recompute()

Aggiorna il documento. Questo prepara anche la rappresentazione visiva del nuovo oggetto Part.

Si noti che un segmento di linea può anche essere creato specificandone l'inizio e il punto finale direttamente nel costruttore, ad esempio Part.LineSegment(point1, point2), oppure possiamo creare una linea predefinita e impostarne le proprietà in seguito, come abbiamo fatto qui.

È inoltre possibile creare una linea utilizzando:

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

Cerchio

Un cerchio può essere creato in modo simile:

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

oppure usando:

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.