Difference between revisions of "Mesh to Part/ro"

From FreeCAD Documentation
Jump to navigation Jump to search
(Updating to match new version of source page)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
<languages/>
 
<languages/>
== Conversia obiectelor Piese în Plase ==
 
  
 +
{{Page in progress}}
 +
 +
{{Docnav
 +
|[[Mesh_Scripting|Mesh Scripting]]
 +
|[[Scenegraph|Scenegraph]]
 +
}}
 +
 +
{{TOCright}}
 +
 +
<div class="mw-translate-fuzzy">
 +
== Conversia obiectelor Piese în Plasă ==
 +
</div>
 +
 +
<div class="mw-translate-fuzzy">
 
Conversia obiectelor de nivel superior, cum ar fi [[Part Module|Part shell]] în obiecte mai simple, cum ar fi [[Mesh Module|meshes]] este o operație simplă, în care toate fațetele unui obiect Piesă i se aplică o discretizarea în triunghiur. Rezultatul acestei discretizări(tessellation) este apoi folosit pentru a construi o plasă: (să presupunem că documentul nostru conține un obiect de piesă)
 
Conversia obiectelor de nivel superior, cum ar fi [[Part Module|Part shell]] în obiecte mai simple, cum ar fi [[Mesh Module|meshes]] este o operație simplă, în care toate fațetele unui obiect Piesă i se aplică o discretizarea în triunghiur. Rezultatul acestei discretizări(tessellation) este apoi folosit pentru a construi o plasă: (să presupunem că documentul nostru conține un obiect de piesă)
 +
</div>
 +
 +
''The following code assumes our document contains one Part object.''
 +
 
{{Code|code=
 
{{Code|code=
#let's assume our document contains one part object
+
# let's assume our document contains one Part object
 
import Mesh
 
import Mesh
 
faces = []
 
faces = []
 
shape = FreeCAD.ActiveDocument.ActiveObject.Shape
 
shape = FreeCAD.ActiveDocument.ActiveObject.Shape
triangles = shape.tessellate(1) # the number represents the precision of the tessellation)
+
triangles = shape.tessellate(1) # the number represents the precision of the tessellation
 
for tri in triangles[1]:
 
for tri in triangles[1]:
 
     face = []
 
     face = []
     for i in range(3):
+
     for i in tri:
        vindex = tri[i]
+
         face.append(triangles[0][i])
         face.append(triangles[0][vindex])
 
 
     faces.append(face)
 
     faces.append(face)
 +
 
m = Mesh.Mesh(faces)
 
m = Mesh.Mesh(faces)
 
Mesh.show(m)
 
Mesh.show(m)
 
}}
 
}}
 +
 +
<div class="mw-translate-fuzzy">
 
Uneori, discretizarea -transformarea în ochiuri de plată triunghiulare- a anumitor anumitor fețe oferite de OpenCascade este destul de urâtă. Dacă fața are un spațiu de parametru dreptunghiular și nu conține găuri sau alte curbe de tăiere, puteți crea și o plasă pe cont propriu:
 
Uneori, discretizarea -transformarea în ochiuri de plată triunghiulare- a anumitor anumitor fețe oferite de OpenCascade este destul de urâtă. Dacă fața are un spațiu de parametru dreptunghiular și nu conține găuri sau alte curbe de tăiere, puteți crea și o plasă pe cont propriu:
 +
</div>
 +
 
{{Code|code=
 
{{Code|code=
 
import Mesh
 
import Mesh
def makeMeshFromFace(u,v,face):
+
def makeMeshFromFace(u, v, face):
(a,b,c,d)=face.ParameterRange
+
    (a, b, c, d) = face.ParameterRange
pts=[]
+
    pts = []
for j in range(v):
+
    for j in range(v):
for i in range(u):
+
        for i in range(u):
s=1.0/(u-1)*(i*b+(u-1-i)*a)
+
            s = 1.0 / (u - 1) * (i * b + (u - 1 - i) * a)
t=1.0/(v-1)*(j*d+(v-1-j)*c)
+
            t = 1.0 / (v - 1) * (j * d + (v - 1 - j) * c)
pts.append(face.valueAt(s,t))
+
            pts.append(face.valueAt(s, t))
  
mesh=Mesh.Mesh()
+
    mesh = Mesh.Mesh()
for j in range(v-1):
+
    for j in range(v - 1):
for i in range(u-1):
+
        for i in range(u - 1):
mesh.addFacet(pts[u*j+i],pts[u*j+i+1],pts[u*(j+1)+i])
+
            mesh.addFacet(pts[u * j + i], pts[u * j + i + 1], pts[u * (j + 1) + i])
mesh.addFacet(pts[u*(j+1)+i],pts[u*j+i+1],pts[u*(j+1)+i+1])
+
            mesh.addFacet(pts[u * (j + 1) + i], pts[u * j + i + 1], pts[u * (j + 1) + i + 1])
  
return mesh
+
    return mesh
 
}}
 
}}
 +
 +
<div class="mw-translate-fuzzy">
 
== Convertirea Plaselor în obiecte Part ==
 
== Convertirea Plaselor în obiecte Part ==
 +
</div>
  
 +
<div class="mw-translate-fuzzy">
 
Convertirea ochiurilor de plasă în obiecte piese este o operație extrem de importantă în lucrul cu CAD, pentru că de multe ori primiți date 3D în format de ochiuri de plasă de la alte persoane sau ieșite din alte aplicații. Meshurile sunt foarte practice pentru a reprezenta geometria liberă și pentru scenele vizuale mari, deoarece este foarte ușoară, dar pentru CAD, în general, preferăm obiecte de nivel mai înalt care transportă mult mai multe informații, cum ar fi ideea  de solid sau fațetele făcute din curbe în loc de triunghiuri.
 
Convertirea ochiurilor de plasă în obiecte piese este o operație extrem de importantă în lucrul cu CAD, pentru că de multe ori primiți date 3D în format de ochiuri de plasă de la alte persoane sau ieșite din alte aplicații. Meshurile sunt foarte practice pentru a reprezenta geometria liberă și pentru scenele vizuale mari, deoarece este foarte ușoară, dar pentru CAD, în general, preferăm obiecte de nivel mai înalt care transportă mult mai multe informații, cum ar fi ideea  de solid sau fațetele făcute din curbe în loc de triunghiuri.
 +
</div>
  
 
Convertirea ochiurilor de plasă în obiecte de nivel superior (manipulate de [[Part Module]] în FreeCAD) nu este o operație ușoară. Mesh-urile pot fi realizate din mii de triunghiuri (de exemplu, atunci când sunt generate de un scanner 3D) și având solide realizate din același număr de fețe ar fi extrem de greu de manipulat. Deci, în general, doriți să optimizați obiectul când faceți conversia.
 
Convertirea ochiurilor de plasă în obiecte de nivel superior (manipulate de [[Part Module]] în FreeCAD) nu este o operație ușoară. Mesh-urile pot fi realizate din mii de triunghiuri (de exemplu, atunci când sunt generate de un scanner 3D) și având solide realizate din același număr de fețe ar fi extrem de greu de manipulat. Deci, în general, doriți să optimizați obiectul când faceți conversia.
  
FreeCAD currently offers two methods to convert Meshes to Part objects. The first method is a simple, direct conversion, without any optimization:
+
<div class="mw-translate-fuzzy">
 +
FreeCAD oferă în prezent două metode pentru a transforma Plasele în obiecte piese (Part). Prima metodă este o conversie simplă, directă, fără optimizare:
 +
</div>
 +
 
 
{{Code|code=
 
{{Code|code=
import Mesh,Part
+
import Mesh
 +
import Part
 +
 
 
mesh = Mesh.createTorus()
 
mesh = Mesh.createTorus()
 
shape = Part.Shape()
 
shape = Part.Shape()
shape.makeShapeFromMesh(mesh.Topology,0.05) # the second arg is the tolerance for sewing
+
shape.makeShapeFromMesh(mesh.Topology, 0.05) # the second arg is the tolerance for sewing
 
solid = Part.makeSolid(shape)
 
solid = Part.makeSolid(shape)
 
Part.show(solid)
 
Part.show(solid)
 +
}}
 +
 +
<div class="mw-translate-fuzzy">
 +
Cea de-a doua metodă oferă posibilitatea de a considera aspectul ochiurilor de plasă coplanare atunci când unghiul dintre ele este sub o anumită valoare. Acest lucru permite construirea unor forme mai simple: (să presupunem că documentul nostru conține un obiect Mesh)
 +
</div>
 +
 +
''The following code assumes our document contains one Mesh object.''
  
}}
 
The second method offers the possibility to consider mesh facets coplanar when the angle between them is under a certain value. This allows to build much simpler shapes: (let's assume our document contains one Mesh object)
 
 
{{Code|code=
 
{{Code|code=
 
# let's assume our document contains one Mesh object
 
# let's assume our document contains one Mesh object
import Mesh,Part,MeshPart
+
import Mesh
 +
import Part
 +
import MeshPart
 +
 
 
faces = []
 
faces = []
 
mesh = App.ActiveDocument.ActiveObject.Mesh
 
mesh = App.ActiveDocument.ActiveObject.Mesh
Line 68: Line 107:
 
     # we assume that the exterior boundary is that one with the biggest bounding box
 
     # we assume that the exterior boundary is that one with the biggest bounding box
 
     if len(wires) > 0:
 
     if len(wires) > 0:
         ext=None
+
         ext = None
 
         max_length=0
 
         max_length=0
 
         for i in wires:
 
         for i in wires:
Line 80: Line 119:
 
           i.reverse()
 
           i.reverse()
  
         # make sure that the exterior wires comes as first in the lsit
+
         # make sure that the exterior wires comes as first in the list
 
         wires.insert(0, ext)
 
         wires.insert(0, ext)
 
         faces.append(Part.Face(wires))
 
         faces.append(Part.Face(wires))
  
shell=Part.Compound(faces)
+
shell = Part.Compound(faces)
 
Part.show(shell)
 
Part.show(shell)
#solid = Part.Solid(Part.Shell(faces))
+
# solid = Part.Solid(Part.Shell(faces))
#Part.show(solid)
+
# Part.show(solid)
 +
}}
  
}}
+
<div class="mw-translate-fuzzy">
 
{{docnav|Topological data scripting|Scenegraph}}
 
{{docnav|Topological data scripting|Scenegraph}}
 +
</div>
  
[[Category:Poweruser Documentation/ro]] [[Category:Python Code/ro]]
+
{{Mesh Tools navi{{#translation:}}}}
 +
{{Powerdocnavi{{#translation:}}}}
 +
[[Category:Python Code{{#translation:}}]]
 +
{{clear}}

Latest revision as of 21:18, 1 June 2020

Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Türkçe • ‎español • ‎français • ‎italiano • ‎polski • ‎română • ‎svenska • ‎čeština • ‎русский • ‎日本語
Under construction icon-blue.svg
This documentation is work in progress. Please don't mark it as translatable since it will change the next hours and days.
Arrow-left.svg Previous: Mesh Scripting
Next: Scenegraph Arrow-right.svg

Conversia obiectelor Piese în Plasă

Conversia obiectelor de nivel superior, cum ar fi Part shell în obiecte mai simple, cum ar fi meshes este o operație simplă, în care toate fațetele unui obiect Piesă i se aplică o discretizarea în triunghiur. Rezultatul acestei discretizări(tessellation) este apoi folosit pentru a construi o plasă: (să presupunem că documentul nostru conține un obiect de piesă)

The following code assumes our document contains one Part object.

# let's assume our document contains one Part object
import Mesh
faces = []
shape = FreeCAD.ActiveDocument.ActiveObject.Shape
triangles = shape.tessellate(1) # the number represents the precision of the tessellation
for tri in triangles[1]:
    face = []
    for i in tri:
        face.append(triangles[0][i])
    faces.append(face)

m = Mesh.Mesh(faces)
Mesh.show(m)

Uneori, discretizarea -transformarea în ochiuri de plată triunghiulare- a anumitor anumitor fețe oferite de OpenCascade este destul de urâtă. Dacă fața are un spațiu de parametru dreptunghiular și nu conține găuri sau alte curbe de tăiere, puteți crea și o plasă pe cont propriu:

import Mesh
def makeMeshFromFace(u, v, face):
    (a, b, c, d) = face.ParameterRange
    pts = []
    for j in range(v):
        for i in range(u):
            s = 1.0 / (u - 1) * (i * b + (u - 1 - i) * a)
            t = 1.0 / (v - 1) * (j * d + (v - 1 - j) * c)
            pts.append(face.valueAt(s, t))

    mesh = Mesh.Mesh()
    for j in range(v - 1):
        for i in range(u - 1):
            mesh.addFacet(pts[u * j + i], pts[u * j + i + 1], pts[u * (j + 1) + i])
            mesh.addFacet(pts[u * (j + 1) + i], pts[u * j + i + 1], pts[u * (j + 1) + i + 1])

    return mesh

Convertirea Plaselor în obiecte Part

Convertirea ochiurilor de plasă în obiecte piese este o operație extrem de importantă în lucrul cu CAD, pentru că de multe ori primiți date 3D în format de ochiuri de plasă de la alte persoane sau ieșite din alte aplicații. Meshurile sunt foarte practice pentru a reprezenta geometria liberă și pentru scenele vizuale mari, deoarece este foarte ușoară, dar pentru CAD, în general, preferăm obiecte de nivel mai înalt care transportă mult mai multe informații, cum ar fi ideea de solid sau fațetele făcute din curbe în loc de triunghiuri.

Convertirea ochiurilor de plasă în obiecte de nivel superior (manipulate de Part Module în FreeCAD) nu este o operație ușoară. Mesh-urile pot fi realizate din mii de triunghiuri (de exemplu, atunci când sunt generate de un scanner 3D) și având solide realizate din același număr de fețe ar fi extrem de greu de manipulat. Deci, în general, doriți să optimizați obiectul când faceți conversia.

FreeCAD oferă în prezent două metode pentru a transforma Plasele în obiecte piese (Part). Prima metodă este o conversie simplă, directă, fără optimizare:

import Mesh
import Part

mesh = Mesh.createTorus()
shape = Part.Shape()
shape.makeShapeFromMesh(mesh.Topology, 0.05) # the second arg is the tolerance for sewing
solid = Part.makeSolid(shape)
Part.show(solid)

Cea de-a doua metodă oferă posibilitatea de a considera aspectul ochiurilor de plasă coplanare atunci când unghiul dintre ele este sub o anumită valoare. Acest lucru permite construirea unor forme mai simple: (să presupunem că documentul nostru conține un obiect Mesh)

The following code assumes our document contains one Mesh object.

# let's assume our document contains one Mesh object
import Mesh
import Part
import MeshPart

faces = []
mesh = App.ActiveDocument.ActiveObject.Mesh
segments = mesh.getPlanes(0.00001) # use rather strict tolerance here
 
for i in segments:
  if len(i) > 0:
     # a segment can have inner holes
     wires = MeshPart.wireFromSegment(mesh, i)
     # we assume that the exterior boundary is that one with the biggest bounding box
     if len(wires) > 0:
        ext = None
        max_length=0
        for i in wires:
           if i.BoundBox.DiagonalLength > max_length:
              max_length = i.BoundBox.DiagonalLength
              ext = i

        wires.remove(ext)
        # all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails
        for i in wires:
           i.reverse()

        # make sure that the exterior wires comes as first in the list
        wires.insert(0, ext)
        faces.append(Part.Face(wires))

shell = Part.Compound(faces)
Part.show(shell)
# solid = Part.Solid(Part.Shell(faces))
# Part.show(solid)

Template:Powerdocnavi/ro