Manual:Creating and manipulating geometry/ro: Difference between revisions

From FreeCAD Documentation
No edit summary
(Updating to match new version of source page)
 
(37 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
<languages/>

{{Docnav
|[[Manual:A gentle introduction|A gentle introduction]]
|[[Manual:Creating parametric objects|Creating parametric objects]]
|[[Manual:Introduction|Manual start]]
|IconC=Crystal Clear manual.png
}}

{{Manual:TOC}}
{{Manual:TOC}}


În capitolele anterioare, am aflat despre diferitele ateliere de lucru ale FreeCAD și despre modul în care fiecare dintre ele implementează propriile instrumente și tipuri de geometrii. Același concept se aplică atunci când lucrați din codul Python.
În capitolele anterioare, am aflat despre diferitele ateliere de lucru ale FreeCAD și despre modul în care fiecare dintre ele implementează propriile instrumente și tipuri de geometrii. Același concept se aplică atunci când lucrați din codul Python.


<div class="mw-translate-fuzzy">
De asemenea, am văzut că marea majoritate a atelierelor de lucru FreeCAD depind de una foarte fundamentală: [[Workbench Part]]. De fapt, multe alte ateliere de lucru, cum ar fi [[Draft_Module|Draft]] și [[Arch_Module|Arch]], fac exact ceea ce vom face în acest capitol: utilizează codul Python pentru a crea și manipula geometria pieselor.
De asemenea, am văzut că marea majoritate a atelierelor de lucru FreeCAD depind de una foarte fundamentală: [[Part Workbench]]. De fapt, multe alte ateliere de lucru, cum ar fi [[Draft_Workbench|Draft]] și [[Arch_Workbench|Arch]], fac exact ceea ce vom face în acest capitol: utilizează codul Python pentru a crea și manipula geometria pieselor.
</div>


Deci, primul lucru pe care trebuie să-l facem pentru a lucra cu geometria pieselor, este de a face Python echivalentă cu comutarea la Workbench Part: import modulul Part:
Deci, primul lucru pe care trebuie să-l facem pentru a lucra cu geometria pieselor, este de a face Python echivalentă cu comutarea la Workbench Part: import modulul Part:


{{Code|code=
import Part
import Part
}}


Luați un minut pentru a explora conținutul Atelierului Part (Workbench), tastând Part și navigând prin diferitele metode propuse aici. Atelierul Piese (Part) oferă mai multe funcții de comode, cum ar fi makeBox, makeCircle, etc ... care vor construi instantaneu un obiect pentru tine. Încercați aceasta, de exemplu:
Luați un minut pentru a explora conținutul Atelierului Part (Workbench), tastând Part și navigând prin diferitele metode propuse aici. Atelierul Piese (Part) oferă mai multe funcții de comode, cum ar fi makeBox, makeCircle, etc ... care vor construi instantaneu un obiect pentru tine. Încercați aceasta, de exemplu:


{{Code|code=
Part.makeBox(3,5,7)
Part.makeBox(3,5,7)
}}


Când apăsați Enter după introducerea liniei de mai sus, în vizualizarea 3D nu va apărea nimic, dar ceva similar va fi tipărit pe consolă Python:
Când apăsați Enter după introducerea liniei de mai sus, în vizualizarea 3D nu va apărea nimic, dar ceva similar va fi tipărit pe consolă Python:


{{Code|code=
<Solid object at 0x5f43600>
<Solid object at 0x5f43600>
}}


Aici intră în scenă un concept important. Ceea ce am creat aici este o Formă de Piesă Acesta nu este un document obiect al FreeCAD (nu încă). În FreeCAD, obiectele și geometria lor sunt independente. Gândiți-vă la un document obiect al FreeCAD ca la un container, care va găzdui o formă. Obiectele parametrice vor avea de asemenea proprietăți precum Lungime și Lățime și vor '''recalculate''' forma lor din zbor, ori de câte ori se schimbă una dintre proprietăți. Ceea ce am făcut aici este de a calcula manual o formă.
Aici intră în scenă un concept important. Ceea ce am creat aici este o Formă de Piesă Acesta nu este un document obiect al FreeCAD (nu încă). În FreeCAD, obiectele și geometria lor sunt independente. Gândiți-vă la un document obiect al FreeCAD ca la un container, care va găzdui o formă. Obiectele parametrice vor avea de asemenea proprietăți precum Lungime și Lățime și vor '''recalculate''' forma lor din zbor, ori de câte ori se schimbă una dintre proprietăți. Ceea ce am făcut aici este de a calcula manual o formă.
Line 22: Line 38:
Acum putem crea cu ușurință un document obiect "generic" în documentul curent (asigurați-vă că aveți cel puțin un nou document deschis) și dați-i o formă de cutie așa cum am și făcut-o:
Acum putem crea cu ușurință un document obiect "generic" în documentul curent (asigurați-vă că aveți cel puțin un nou document deschis) și dați-i o formă de cutie așa cum am și făcut-o:


{{Code|code=
boxShape = Part.makeBox(3,5,7)
boxShape = Part.makeBox(3,5,7)
myObj = FreeCAD.ActiveDocument.addObject("Part::Feature","MyNewBox")
myObj = FreeCAD.ActiveDocument.addObject("Part::Feature","MyNewBox")
myObj.Shape = boxShape
myObj.Shape = boxShape
FreeCAD.ActiveDocument.recompute()
FreeCAD.ActiveDocument.recompute()
}}


Note how we handled myObj.Shape , notice that it is done exactly like we did it in the previous chapter, when we changed other properties of an object, such as box.Height = 5 . In fact, '''Shape''' is also a property, just like '''Height'''. Only it takes a Part Shape, not a number. In the next chapter we will have a better look at how these parametric objects are constructed.
Notați cum am tratat myObj.Shape, vedeți acest lucru se face exact așa cum am făcut în capitolul anterior, când am schimbat alte proprietăți ale unui obiect, cum ar fi box.Height = 5. În realitate, '''Shape''' este de asemenea o proprietate, la fel ca '''Height'''. Doar aveți nevoie de o formă de Piesă, nu de un număr. În capitolul următor, vom examina mai detaliat modul în care sunt construite aceste obiecte parametrice.


<div class="mw-translate-fuzzy">
For now, let's explore our Part Shapes in more detail. At the end of the chapter about [Manual:Traditional modeling, the CSG way|traditional modeling with the Part Workbench] we showed a table that explains how Part Shapes are constructed, and their different components (Vertices, edges, faces, etc). The exact same components exist here and can be retrieved from Python. Part Shapes always have the following attributes: Vertexes, Edges, Wires, Faces, Shells and Solids. All of them are lists, that can contain any number of elements or be empty:
Pentru moment, să explorăm mai detaliat Formatele noastre. La finalul capitolului, atelierul Part ([Manual:Traditional modeling, the CSG way|traditional modeling with the Part Workbench]) am arătat o masă care explică modul în care sunt construite formele în Part, precum și componentele lor diferite (Vertex, Edges, Faces, etc.). Exact aceleași componente există aici și pot fi preluate din Python. Formele de Piese (Shape Part) au întotdeauna următoarele atribute: Vertexes, Edges, Wires, Faces, Shells and Solids. Toate acestea sunt liste, care pot conține orice număr de elemente sau să fie vide
</div>


{{Code|code=
print(boxShape.Vertexes)
print(boxShape.Edges)
print(boxShape.Vertexes)
print(boxShape.Wires)
print(boxShape.Edges)
print(boxShape.Faces)
print(boxShape.Wires)
print(boxShape.Shells)
print(boxShape.Faces)
print(boxShape.Solids)
print(boxShape.Shells)
print(boxShape.Solids)
}}


<div class="mw-translate-fuzzy">
For example, let's find the area of each face of our box shape above:
De exemplu, hai să găsim zona de mai sus a fiecărei fațete a formei noastre de cutie de mai sus:
</div>


{{Code|code=
for f in boxShape.Faces:
for f in boxShape.Faces:
print(f.Area)
print(f.Area)
}}


Pentru fiecare margine, există un punct de început și un punct final:
Or, for each edge, its start point and end point:


{{Code|code=
for e in boxShape.Edges:
for e in boxShape.Edges:
print("New edge")
print("New edge")
print("Start point:")
print("Start point:")
Line 51: Line 78:
print("End point:")
print("End point:")
print(e.Vertexes[1].Point)
print(e.Vertexes[1].Point)
}}


As you see, if our boxShape has a "Vertexes" attribute, each Edge of the boxShape also has a "Vertexes" attribute. As we can expect, the boxShape will have 8 vertices, while the edge will only have 2, which are both part of the list of 8.
După cum vedeți, dacă boxShape are un atribut "Vertexes", fiecare Edge al boxShape are și un atribut "Vertexes". Așa cum ne putem aștepta, boxShape va avea 8 vârfuri, în timp ce marginea va avea doar 2, care fac parte din lista celor 8.


Noi putem verifica întodeauna care este tipul formei :
We can always check what is the type of a shape:


{{Code|code=
print(boxShape.ShapeType)
print(boxShape.Faces[0].ShapeType)
print(boxShape.ShapeType)
print(boxShape.Vertexes[2].ShapeType)
print(boxShape.Faces[0].ShapeType)
print(boxShape.Vertexes[2].ShapeType)
}}


So to resume the topic of Part Shapes: Everything starts with Vertices. With one or two vertices, you form an Edge (full circles have only one vertex). With one or more Edges, you form a Wire. With one or more closed Wires, you form a Face (the additional Wires become "holes" in the Face). With one or more Faces, you form a Shell. When a Shell is fully closed (watertight), you can form a Solid from it. And finally, you can join any number of Shapes of any types together, which is then called a Compound.
Deci, pentru a relua tema Formele piesei (Part Shape): Totul începe cu Vertex. Cu unul sau două vârfuri, formați o margine (un cerc complet are doar un vertex). Cu una sau mai multe muchii, formați un fir(polilinie). Cu unul sau mai multe cabluri închise, formați o față (firele suplimentare devin "găuri" în fața). Cu una sau mai multe fire, formați un o cochilie(Shell). Atunci când un Shell este complet închis (etanș), puteți forma un Solid din acesta. Și, în final, puteți alăturați oricâte forme(Shape) de orice tip, împreună, formând ceea ce se numește un compus(Compound).


Acum putem încerca să creăm forme complexe de la zero, prin construirea tuturor componentelor lor una câte una. De exemplu, să încercăm să creăm un volum ca acesta:
We can now try creating complex shapes from scratch, by constructing all their components one by one. For example, let's try to create a volume like this:


[[Image:Exercise_python_03.jpg]]
[[Image:Exercise_python_03.jpg]]


Vom începe prin a crea o formă plană în felul următor:
We will start by creating a planar shape like this:


[[Image:Wire.png]]
[[Image:Wire.png]]


În primul rând, să formăm cele patru puncte de bază:
First, let's create the four base points:


{{Code|code=
V1 = FreeCAD.Vector(0,10,0)
V2 = FreeCAD.Vector(30,10,0)
V1 = FreeCAD.Vector(0,10,0)
V3 = FreeCAD.Vector(30,-10,0)
V2 = FreeCAD.Vector(30,10,0)
V4 = FreeCAD.Vector(0,-10,0)
V3 = FreeCAD.Vector(30,-10,0)
V4 = FreeCAD.Vector(0,-10,0)
}}


Apoi creăm două segmente liniare:
Then we can create the two linear segments:


[[Image:Line.png]]
[[Image:Line.png]]


{{Code|code=
L1 = Part.Line(V1,V2)
L2 = Part.Line(V4,V3)
L1 = Part.LineSegment(V1,V2)
L2 = Part.LineSegment(V4,V3)
}}


<div class="mw-translate-fuzzy">
Note that we didn't need to create Vertices. We could immediately create Part.Lines from FreeCAD Vectors. This is because here we haven't created Edges yet. A Part.Line (as well as Part.Circle, Part.Arc, Part.Ellipse or Part.BSpline) does not create an Edge, but rather a base geometry on which an Edge will be created. Edges are always made from such a base geometry, which is stored in its Curve attribute. So if you have an Edge, doing:
Notați că nu era nevoie să creăm Vertices? Am putea crea imediat Parts.Lines de la FreeCAD Vectors. Asta pentru că nu am creat Edges încă. O Part.Line (precum și Part.Circle, Part.Arc, Part.Ellipse sau Part.BSpline) nu creează o Edge, ci mai degrabă o geometrie de bază pe care va fi creată o Edge. Muchiile (Edges) sunt întotdeauna făcute dintr-o astfel de geometrie de bază, care se numește atributul Curve. Deci, dacă aveți o margine, faceți:
</div>


{{Code|code=
print(Edge.Curve)
print(Edge.Curve)
}}


will show you what kind of Edge it is, i.e. if it's based on a line, an arc, etc... But let's come back to our exercise, and build the arc segments. For this, we will need a third point, so we can use the convenient Part.Arc, which takes 3 points:
va arăta ce fel de margine este, adică dacă se bazează pe o linie, pe un arc etc. Dar ne întoarcem la exercițiul nostru și construim segmentele arcului. Pentru aceasta, vom avea nevoie de un al treilea punct, astfel încât putem folosi convenabil Part.Arc, care are 3 puncte:


[[Image:Circel.png]]
[[Image:Circel.png]]


{{Code|code=
VC1 = FreeCAD.Vector(-10,0,0)
C1 = Part.Arc(V1,VC1,V4)
VC1 = FreeCAD.Vector(-10,0,0)
VC2 = FreeCAD.Vector(40,0,0)
C1 = Part.Arc(V1,VC1,V4)
C2 = Part.Arc(V2,VC2,V3)
VC2 = FreeCAD.Vector(40,0,0)
C2 = Part.Arc(V2,VC2,V3)
}}


Now we have 2 lines (L1 and L2) and 2 arcs (C1 and C2). We need to turn them into edges:
Acum avem 2 linii (L1 and L2) și 2 arcuri (C1 and C2). trebuei le transformăm în muchii(edges):


{{Code|code=
E1 = Part.Edge(L1)
E2 = Part.Edge(L2)
E1 = Part.Edge(L1)
E3 = Part.Edge(C1)
E2 = Part.Edge(L2)
E4 = Part.Edge(C2)
E3 = Part.Edge(C1)
E4 = Part.Edge(C2)
}}


<div class="mw-translate-fuzzy">
Alternatively, base geometries also have a toShape() function that do exactly the same thing:
Alternativ, geometrii de bază au, de asemenea, o funcție toShape () care face exact același lucru:
</div>


{{Code|code=
E1 = L1.toShape()
E2 = L2.toShape()
E1 = L1.toShape()
E2 = L2.toShape()
...
...
}}


<div class="mw-translate-fuzzy">
Once we have a series of Edges, we can now form a Wire, by giving it a list of Edges. We do need to take care of the order.
Odată ce avem o serie de margini, putem acum să formăm o polilinie, oferindu-i o listă de muchii. Trebuie să avem grijă de ordinea lor.
</div>


{{Code|code=
W = Part.Wire([E1,E4,E2,E3])
W = Part.Wire([E1,E4,E2,E3])
}}


Și putem verifica dacă polilinia dvs. a fost corect înțeleasă și că contrul este corect închis:
And we can check if our Wire was correctly understood, and that it is correctly closed:


{{Code|code=
print( W.isClosed() )
print( W.isClosed() )
}}


Care va imprima "Adevărat" sau "Fals". Pentru a face o fațetă, avem nevoie de polilinii închise, deci este întotdeauna o idee bună să verificați faptul acesta înainte de a crea fațetă. Acum putem crea o fațetă, oferindu-i o singură polilinie (sau o listă de polilinii dacă vrem și găuri în fațetă):
Which will print "True" or "False". In order to make a Face, we need closed Wires, so it is always a good idea to check that before creating the Face. Now we can create a Face, by giving it a single Wire (or a list of Wires if we want holes):


{{Code|code=
F = Part.Face(W)
F = Part.Face(W)
}}


Then we extrude it:
Then we extrude it:


{{Code|code=
P = F.extrude(FreeCAD.Vector(0,0,10))
P = F.extrude(FreeCAD.Vector(0,0,10))
}}


Note that P is already a Solid:
Note that P is already a Solid:


{{Code|code=
print(P.ShapeType)
print(P.ShapeType)
}}


Acest lucru se datorează faptului că atunci când extrudăm o singură față, întotdeauna obținem un Solid. Acest lucru nu ar fi cazul, de exemplu, dacă am fi extrudat o poliline(Wire) în schimb:
This is because when we extrude a single Face, we always get a Solid. This wouldn't be the case, for example, if we had extruded the Wire instead:


{{Code|code=
S = W.extrude(FreeCAD.Vector(0,0,10))
S = W.extrude(FreeCAD.Vector(0,0,10))
print(s.ShapeType)
print(S.ShapeType)
}}


Care, desigur, ne va da o cochilie goală, cu fațetele de sus și de jos lipsă.
Which will of course give us a hollow shell, with the top and bottom faces missing.


Now that we have our final Shape, we are anxious to see it on screen! So let's create a generic object, and assign our new Solid to it:
Acum avem Forma noastră finală, suntem nerăbdători o vedem pe ecran! Deci, creăm un obiect generic și să-l atribuim noului nostru Solid :


{{Code|code=
myObj2 = FreeCAD.ActiveDocument.addObject("Part::Feature","My_Strange_Solid")
myObj2 = FreeCAD.ActiveDocument.addObject("Part::Feature","My_Strange_Solid")
myObj2.Shape = P
myObj2.Shape = P
FreeCAD.ActiveDocument.recompute()
FreeCAD.ActiveDocument.recompute()
}}


În mod alternativ, modulul Part oferă, de asemenea, o scurtătură care face operația de mai sus mai rapidă (dar nu puteți alege numele obiectului):
În mod alternativ, modulul Part oferă, de asemenea, o scurtătură care face operația de mai sus mai rapidă (dar nu puteți alege numele obiectului):


{{Code|code=
Part.show(P)
Part.show(P)
}}


Toate cele de mai sus, și multe altele, sunt explicate în detaliu pe pagina [[Topological_data_scripting | Part Scripting]], împreună cu exemple.
Toate cele de mai sus, și multe altele, sunt explicate în detaliu pe pagina [[Topological_data_scripting | Part Scripting]], împreună cu exemple.
Line 153: Line 217:
* [[Part_Workbench|The Part Workbench]]
* [[Part_Workbench|The Part Workbench]]
* [[Topological_data_scripting|Part scripting]]
* [[Topological_data_scripting|Part scripting]]


{{Docnav
|[[Manual:A gentle introduction|A gentle introduction]]
|[[Manual:Creating parametric objects|Creating parametric objects]]
|[[Manual:Introduction|Manual start]]
|IconC=Crystal Clear manual.png
}}

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{clear}}

Latest revision as of 19:29, 4 November 2023

În capitolele anterioare, am aflat despre diferitele ateliere de lucru ale FreeCAD și despre modul în care fiecare dintre ele implementează propriile instrumente și tipuri de geometrii. Același concept se aplică atunci când lucrați din codul Python.

De asemenea, am văzut că marea majoritate a atelierelor de lucru FreeCAD depind de una foarte fundamentală: Part Workbench. De fapt, multe alte ateliere de lucru, cum ar fi Draft și Arch, fac exact ceea ce vom face în acest capitol: utilizează codul Python pentru a crea și manipula geometria pieselor.

Deci, primul lucru pe care trebuie să-l facem pentru a lucra cu geometria pieselor, este de a face Python echivalentă cu comutarea la Workbench Part: import modulul Part:

import Part

Luați un minut pentru a explora conținutul Atelierului Part (Workbench), tastând Part și navigând prin diferitele metode propuse aici. Atelierul Piese (Part) oferă mai multe funcții de comode, cum ar fi makeBox, makeCircle, etc ... care vor construi instantaneu un obiect pentru tine. Încercați aceasta, de exemplu:

Part.makeBox(3,5,7)

Când apăsați Enter după introducerea liniei de mai sus, în vizualizarea 3D nu va apărea nimic, dar ceva similar va fi tipărit pe consolă Python:

<Solid object at 0x5f43600>

Aici intră în scenă un concept important. Ceea ce am creat aici este o Formă de Piesă Acesta nu este un document obiect al FreeCAD (nu încă). În FreeCAD, obiectele și geometria lor sunt independente. Gândiți-vă la un document obiect al FreeCAD ca la un container, care va găzdui o formă. Obiectele parametrice vor avea de asemenea proprietăți precum Lungime și Lățime și vor recalculate forma lor din zbor, ori de câte ori se schimbă una dintre proprietăți. Ceea ce am făcut aici este de a calcula manual o formă.

Acum putem crea cu ușurință un document obiect "generic" în documentul curent (asigurați-vă că aveți cel puțin un nou document deschis) și dați-i o formă de cutie așa cum am și făcut-o:

boxShape = Part.makeBox(3,5,7)
myObj = FreeCAD.ActiveDocument.addObject("Part::Feature","MyNewBox")
myObj.Shape = boxShape
FreeCAD.ActiveDocument.recompute()

Notați cum am tratat myObj.Shape, vedeți că acest lucru se face exact așa cum am făcut în capitolul anterior, când am schimbat alte proprietăți ale unui obiect, cum ar fi box.Height = 5. În realitate, Shape este de asemenea o proprietate, la fel ca Height. Doar aveți nevoie de o formă de Piesă, nu de un număr. În capitolul următor, vom examina mai detaliat modul în care sunt construite aceste obiecte parametrice.

Pentru moment, să explorăm mai detaliat Formatele noastre. La finalul capitolului, atelierul Part ([Manual:Traditional modeling, the CSG way|traditional modeling with the Part Workbench]) am arătat o masă care explică modul în care sunt construite formele în Part, precum și componentele lor diferite (Vertex, Edges, Faces, etc.). Exact aceleași componente există aici și pot fi preluate din Python. Formele de Piese (Shape Part) au întotdeauna următoarele atribute: Vertexes, Edges, Wires, Faces, Shells and Solids. Toate acestea sunt liste, care pot conține orice număr de elemente sau să fie vide

print(boxShape.Vertexes)
print(boxShape.Edges)
print(boxShape.Wires)
print(boxShape.Faces)
print(boxShape.Shells)
print(boxShape.Solids)

De exemplu, hai să găsim zona de mai sus a fiecărei fațete a formei noastre de cutie de mai sus:

for f in boxShape.Faces:
   print(f.Area)

Pentru fiecare margine, există un punct de început și un punct final:

for e in boxShape.Edges:
   print("New edge")
   print("Start point:")
   print(e.Vertexes[0].Point)
   print("End point:")
   print(e.Vertexes[1].Point)

După cum vedeți, dacă boxShape are un atribut "Vertexes", fiecare Edge al boxShape are și un atribut "Vertexes". Așa cum ne putem aștepta, boxShape va avea 8 vârfuri, în timp ce marginea va avea doar 2, care fac parte din lista celor 8.

Noi putem verifica întodeauna care este tipul formei :

print(boxShape.ShapeType)
print(boxShape.Faces[0].ShapeType)
print(boxShape.Vertexes[2].ShapeType)

Deci, pentru a relua tema Formele piesei (Part Shape): Totul începe cu Vertex. Cu unul sau două vârfuri, formați o margine (un cerc complet are doar un vertex). Cu una sau mai multe muchii, formați un fir(polilinie). Cu unul sau mai multe cabluri închise, formați o față (firele suplimentare devin "găuri" în fața). Cu una sau mai multe fire, formați un o cochilie(Shell). Atunci când un Shell este complet închis (etanș), puteți forma un Solid din acesta. Și, în final, puteți să alăturați oricâte forme(Shape) de orice tip, împreună, formând ceea ce se numește un compus(Compound).

Acum putem încerca să creăm forme complexe de la zero, prin construirea tuturor componentelor lor una câte una. De exemplu, să încercăm să creăm un volum ca acesta:

Vom începe prin a crea o formă plană în felul următor:

În primul rând, să formăm cele patru puncte de bază:

V1 = FreeCAD.Vector(0,10,0)
V2 = FreeCAD.Vector(30,10,0)
V3 = FreeCAD.Vector(30,-10,0)
V4 = FreeCAD.Vector(0,-10,0)

Apoi creăm două segmente liniare:

L1 = Part.LineSegment(V1,V2)
L2 = Part.LineSegment(V4,V3)

Notați că nu era nevoie să creăm Vertices? Am putea crea imediat Parts.Lines de la FreeCAD Vectors. Asta pentru că nu am creat Edges încă. O Part.Line (precum și Part.Circle, Part.Arc, Part.Ellipse sau Part.BSpline) nu creează o Edge, ci mai degrabă o geometrie de bază pe care va fi creată o Edge. Muchiile (Edges) sunt întotdeauna făcute dintr-o astfel de geometrie de bază, care se numește atributul Curve. Deci, dacă aveți o margine, faceți:

print(Edge.Curve)

vă va arăta ce fel de margine este, adică dacă se bazează pe o linie, pe un arc etc. Dar să ne întoarcem la exercițiul nostru și să construim segmentele arcului. Pentru aceasta, vom avea nevoie de un al treilea punct, astfel încât să putem folosi convenabil Part.Arc, care are 3 puncte:

VC1 = FreeCAD.Vector(-10,0,0)
C1 = Part.Arc(V1,VC1,V4)
VC2 = FreeCAD.Vector(40,0,0)
C2 = Part.Arc(V2,VC2,V3)

Acum avem 2 linii (L1 and L2) și 2 arcuri (C1 and C2). trebuei să le transformăm în muchii(edges):

E1 = Part.Edge(L1)
E2 = Part.Edge(L2)
E3 = Part.Edge(C1)
E4 = Part.Edge(C2)

Alternativ, geometrii de bază au, de asemenea, o funcție toShape () care face exact același lucru:

E1 = L1.toShape()
E2 = L2.toShape()
 ...

Odată ce avem o serie de margini, putem acum să formăm o polilinie, oferindu-i o listă de muchii. Trebuie să avem grijă de ordinea lor.

W = Part.Wire([E1,E4,E2,E3])

Și putem verifica dacă polilinia dvs. a fost corect înțeleasă și că contrul este corect închis:

print( W.isClosed() )

Care va imprima "Adevărat" sau "Fals". Pentru a face o fațetă, avem nevoie de polilinii închise, deci este întotdeauna o idee bună să verificați faptul acesta înainte de a crea fațetă. Acum putem crea o fațetă, oferindu-i o singură polilinie (sau o listă de polilinii dacă vrem și găuri în fațetă):

F = Part.Face(W)

Then we extrude it:

P = F.extrude(FreeCAD.Vector(0,0,10))

Note that P is already a Solid:

print(P.ShapeType)

Acest lucru se datorează faptului că atunci când extrudăm o singură față, întotdeauna obținem un Solid. Acest lucru nu ar fi cazul, de exemplu, dacă am fi extrudat o poliline(Wire) în schimb:

S = W.extrude(FreeCAD.Vector(0,0,10))
print(S.ShapeType)

Care, desigur, ne va da o cochilie goală, cu fațetele de sus și de jos lipsă.

Acum că avem Forma noastră finală, suntem nerăbdători să o vedem pe ecran! Deci, să creăm un obiect generic și să-l atribuim noului nostru Solid :

myObj2 = FreeCAD.ActiveDocument.addObject("Part::Feature","My_Strange_Solid")
myObj2.Shape = P
FreeCAD.ActiveDocument.recompute()

În mod alternativ, modulul Part oferă, de asemenea, o scurtătură care face operația de mai sus mai rapidă (dar nu puteți alege numele obiectului):

Part.show(P)

Toate cele de mai sus, și multe altele, sunt explicate în detaliu pe pagina Part Scripting, împreună cu exemple.

De citit în plus