Part scripting/it: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
No edit summary
 
(35 intermediate revisions by 2 users not shown)
Line 2: Line 2:


{{Docnav
{{Docnav
|[[FreeCAD_Scripting_Basics|FreeCAD Scripting Basics]]
|[[FreeCAD_Scripting_Basics/it|Script di base per FreeCAD]]
|[[Topological_data_scripting|Topological data scripting]]
|[[Topological_data_scripting/it|Script di dati topologici]]
}}
}}


{{TOCright}}
{{TOCright}}


==Introduction==
<span id="Introduction"></span>
==Introduzione==


The main data structure used in the Part module is the [http://en.wikipedia.org/wiki/Boundary_representation BRep] data type from [[OpenCASCADE|OpenCASCADE]]. Almost all contents and object types of the Part module are available in [[Python|Python]] scripting. This includes geometric primitives, such as Lines, Circles and Arcs, and the whole range of TopoShapes, like Vertexes, Edges, Wires, Faces, Solids and Compounds. For each of those objects, several creation methods exist, and for some of them, especially the TopoShapes, advanced operations like boolean union/difference/intersection are also available. Explore the contents of the Part module, as described in the [[FreeCAD_Scripting_Basics|FreeCAD Scripting Basics]] page, to know more.
La struttura dati principale utilizzata nel modulo Parte è il tipo di dati [https://it.wikipedia.org/wiki/B-Rep BRep] da [[OpenCASCADE/it|OpenCASCADE]]. Quasi tutti i contenuti e i tipi di oggetti del modulo Part sono disponibili per lo scripting con [[Python/it|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 [[FreeCAD_Scripting_Basics/it|Script di base per FreeCAD]], per saperne di più.


The most basic object that can be created is a [[Part_Feature|Part Feature]], which has a simple {{PropertyData|Placement}} property, and basic properties to define its color and appearance.
L'oggetto più semplice che può essere creato è [[Part_Feature/it|Part]], che ha una semplice proprietà {{PropertyData|Placement}} e le proprietà di base per definirne il colore e l'aspetto.


Another simple object used in 2D geometrical objects is the [[Part_Part2DObject|Part Part2DObject]], which is the base of the [[Sketcher_SketchObject|Sketcher SketchObject]] and most [[Draft_Workbench|Draft elements]].
Un altro oggetto semplice utilizzato negli oggetti geometrici 2D è il [[Part_Part2DObject/it|Part Part2DObject]], che è la base di [[Sketcher_SketchObject/it|Sketcher SketchObject]] e della maggior parte dei [[Draft_Workbench|Draft elements]].


<span id="See_also"></span>
===See also===
===Vedere anche===


* [[Topological_data_scripting|Topological data scripting]]
* [[Topological_data_scripting/it|Script di dati topologici]]
* [[OpenCASCADE|OpenCASCADE]]
* [[OpenCASCADE/it|OpenCASCADE]]


<span id="Test_script"></span>
==Test script==
==Script di test==


Test the creation of [[Part_Primitives|Part Primitives]] with a script. {{Version|0.19}}
Testare la creazione di [[Part_Primitives/it|Primitive Part]] con uno script.


{{Code|code=
{{Code|code=
Line 30: Line 33:
}}
}}


Questo script si trova nella cartella d'installazione del programma e può essere esaminato per vedere come vengono costruite le primitive di base.
This script is located in the installation directory of the program, and can be examined to see how the basic primitives are built.


{{Code|code=
{{Code|code=
Line 36: Line 39:
}}
}}


==Examples==
<span id="Examples"></span>
==Esempi==


===Line===
<span id="Line"></span>
===Linea===


To create a line element switch to the [[Python_console|Python console]] and enter:
Per creare un elemento di linea, passa alla [[Python_console/it|console Python]] e inserisci:


{{Code|code=
{{Code|code=
Line 57: Line 62:
}}
}}


Esaminiamo passo dopo passo l'esempio Python sopra:
Let's go through the above Python example step by step:


{{Code|code=
{{Code|code=
Line 65: Line 70:
}}
}}


This loads the FreeCAD and Part modules and creates a new document.
Questo carica i moduli di FreeCAD e Part e crea un nuovo documento.


{{Code|code=
{{Code|code=
Line 73: Line 78:
}}
}}


La linea è in realtà un segmento di retta, quindi ha un inizio e un punto finale.
Line is actually a line segment, hence the start and endpoint.


{{Code|code=
{{Code|code=
Line 80: Line 85:
}}
}}


This adds a Part object type to the document and assigns the shape representation of the line segment to the {{Incode|Shape}} property of the added object. It is important to understand here that we use a geometric primitive (the {{Incode|Part.LineSegment}}) to create a TopoShape out of it (with the {{Incode|toShape()}} method). Only shapes can be added to the document. In FreeCAD geometric primitives are used as "building structures" for shapes.
Questo aggiunge un tipo di oggetto Parte al documento e assegna la rappresentazione della forma del segmento di linea alla proprietà {{Incode|Shape}} dell'oggetto aggiunto. È importante capire qui che usiamo una primitiva geometrica (il {{Incode|Part.LineSegment}}) per creare un TopoShape da esso (con il metodo {{Incode|toShape()}}). Solo le forme possono essere aggiunte al documento. In FreeCAD le primitive geometriche sono usate come "strutture edilizie" per le forme.


{{Code|code=
{{Code|code=
Line 86: Line 91:
}}
}}


Aggiorna il documento. Questo prepara anche la rappresentazione visiva del nuovo oggetto Part.
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 {{Incode|Part.LineSegment(point1, point2)}}, or we can create a default line and set its properties afterwards, as we did here.
Si noti che un segmento di linea può anche essere creato specificandone l'inizio e il punto finale direttamente nel costruttore, ad esempio {{Incode|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:
A Line can also be created using:


{{Code|code=
{{Code|code=
Line 112: Line 117:
}}
}}


===Circle===
<span id="Circle"></span>
===Cerchio===


Un cerchio può essere creato in modo simile:
A circle can be created in a similar way:


{{Code|code=
{{Code|code=
Line 130: Line 136:
}}
}}


oppure usando:
Or using:


{{Code|code=
{{Code|code=
Line 146: Line 152:
}}
}}


In alternativa possiamo creare un cerchio definendone il centro, l'asse e il raggio:
Alternatively we can create a circle by defining its center, axis and radius:


{{Code|code=
{{Code|code=
Line 164: Line 170:
}}
}}


Oppure definendo tre punti sulla sua circonferenza:
Or by defining three points on its circumference:


{{Code|code=
{{Code|code=
Line 182: Line 188:
}}
}}


Si noti ancora, che abbiamo usato il cerchio (primitiva geometrica) per costruire una forma. Ovviamente possiamo ancora accedere alla nostra geometria di costruzione in seguito, facendo:
Note again, we used the circle (geometric primitive) to construct a shape. We can of course still access our construction geometry afterwards, by doing:


{{Code|code=
{{Code|code=
Line 190: Line 196:
}}
}}


Here we take the {{Incode|Shape}} of our object {{Incode|obj}} and then its list of {{Incode|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 {{Incode|Edges}} list, and then take its curve. Every edge has a {{Incode|Curve}}, which is the geometric primitive it is based on.
Qui prendiamo il {{Incode|Shape}} del nostro oggetto {{Incode|obj}} e poi la sua lista di {{Incode|Edges}}. In questo caso ci sarà un solo bordo perché abbiamo ricavato la forma da un unico cerchio. Quindi prendiamo solo il primo elemento nell'elenco {{Incode|Edges}}, successivamente prendiamo la sua curva. Ogni bordo ha un {{Incode|Curve}}, che è la primitiva geometrica su cui si basa.


<span id="Arc"></span>
===Arc===
===Arco===


Un arco può essere creato in questo modo:
An arc can be created like this:


{{Code|code=
{{Code|code=
Line 212: Line 219:
}}
}}


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.
Così si disegna un semicerchio. Il centro è a (0, 0, 0). Il raggio è 10. P1 è il punto iniziale sull'asse +X. P2 è il punto medio sull'asse +Y e P3 è il punto finale sull'asse -X.


Possiamo anche creare un arco da un cerchio:
We can also create an arc from a circle:


{{Code|code=
{{Code|code=
Line 233: Line 240:
}}
}}


È necessario un cerchio, un angolo iniziale e un angolo finale in radianti.
It needs a circle, and a start angle and end angle in radians.




{{Docnav
{{Docnav
|[[FreeCAD_Scripting_Basics|FreeCAD Scripting Basics]]
|[[FreeCAD_Scripting_Basics/it|Script di base per FreeCAD]]
|[[Topological_data_scripting|Topological data scripting]]
|[[Topological_data_scripting/it|Script di dati topologici]]
}}
}}



Latest revision as of 20:04, 20 May 2023

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.

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

In alternativa possiamo creare un cerchio definendone il centro, l'asse e il raggio:

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

Oppure definendo tre punti sulla sua circonferenza:

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

Si noti ancora, che abbiamo usato il cerchio (primitiva geometrica) per costruire una forma. Ovviamente possiamo ancora accedere alla nostra geometria di costruzione in seguito, facendo:

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

Qui prendiamo il Shape del nostro oggetto obj e poi la sua lista di Edges. In questo caso ci sarà un solo bordo perché abbiamo ricavato la forma da un unico cerchio. Quindi prendiamo solo il primo elemento nell'elenco Edges, successivamente prendiamo la sua curva. Ogni bordo ha un Curve, che è la primitiva geometrica su cui si basa.

Arco

Un arco può essere creato in questo modo:

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

Così si disegna un semicerchio. Il centro è a (0, 0, 0). Il raggio è 10. P1 è il punto iniziale sull'asse +X. P2 è il punto medio sull'asse +Y e P3 è il punto finale sull'asse -X.

Possiamo anche creare un arco da un cerchio:

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

È necessario un cerchio, un angolo iniziale e un angolo finale in radianti.