Mesh Scripting/it: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 12: Line 12:
</div>
</div>


First of all you have to import the Mesh module:
To get access to the {{incode|Mesh}} module you have to import it first:


{{Code|code=
{{Code|code=
import Mesh
import Mesh
}}
}}

Dopo questa operazione si ha accesso al modulo Mesh e alla classe Mesh che offrono le funzioni del Kernel C++ Mesh di FreeCAD.


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 25: Line 23:
Per creare un oggetto mesh vuoto basta usare il costruttore standard:
Per creare un oggetto mesh vuoto basta usare il costruttore standard:
</div>
</div>

To create an empty mesh object just use the standard constructor:


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


<div class="mw-translate-fuzzy">
Inoltre è possibile creare un oggetto da un file
Inoltre è possibile creare un oggetto da un file
</div>


{{Code|code=
{{Code|code=
mesh = Mesh.Mesh('D:/temp/Something.stl')
mesh = Mesh.Mesh("D:/temp/Something.stl")
}}
}}

<div class="mw-translate-fuzzy">
Un elenco di tipi di file compatibili è disponibile [[Feature_list/it#IO|in questa pagina]] al paragrafo 'Mesh'.
</div>


Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:


{{Code|code=
{{Code|code=
planarMesh = [
triangles = [
# triangle 1
# triangle 1
[-0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000], [-0.5000, 0.5000, 0.0000],
[-0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000], [-0.5000, 0.5000, 0.0000],
Line 49: Line 47:
[-0.5000, -0.5000, 0.0000], [0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000],
[-0.5000, -0.5000, 0.0000], [0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000],
]
]
planarMeshObject = Mesh.Mesh(planarMesh)
meshObject = Mesh.Mesh(triangles)
Mesh.show(planarMeshObject)
Mesh.show(meshObject)
}}
}}


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Il Kernel Mesh si occupa di creare una corretta struttura topologica dei dati individuando i punti e i bordi coincidenti.
Il Kernel Mesh si occupa di creare una corretta struttura topologica dei dati individuando i punti e i bordi coincidenti.
</div>
</div>

Più avanti si vedrà come è possibile verificare ed esaminare i dati mesh.


[[#top|top]]
[[#top|top]]
Line 67: Line 63:
</div>
</div>


To create regular geometries you can use the Python script {{FileName|BuildRegularGeoms.py}}.
To create regular geometries you can use one of the {{incode|create*()}} methods. A torus, for instance, can be created as follows:


{{Code|code=
{{Code|code=
m = Mesh.createTorus(8.0, 2.0, 50)
import BuildRegularGeoms
Mesh.show(m)
}}

<div class="mw-translate-fuzzy">
Questo script fornisce i metodi per definire semplici corpi di rotazione, tipo le sfere, gli ellissoidi, i cilindri, i coni e i toroidi. Inoltre ha anche un metodo per creare un semplice cubo.

Ad esempio, per creare un toroide si può fare nel modo seguente:
</div>

{{Code|code=
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)
}}
}}


Line 89: Line 75:
La classe Mesh fornisce una serie di funzioni booleane che possono essere utilizzate per operazioni di modellazione. Essa fornisce l'unione, l'intersezione e la differenza tra due oggetti mesh.
La classe Mesh fornisce una serie di funzioni booleane che possono essere utilizzate per operazioni di modellazione. Essa fornisce l'unione, l'intersezione e la differenza tra due oggetti mesh.
</div>
</div>

The {{incode|Mesh}} module also provides three Boolean methods: {{incode|union()}}, {{incode|intersection()}} and {{incode|difference()}}:


{{Code|code=
{{Code|code=
Line 102: Line 90:
}}
}}


<div class="mw-translate-fuzzy">
Ecco infine, un esempio completo che calcola l'intersezione tra una sfera e un cilindro che interseca la sfera.
Ecco infine, un esempio completo che calcola l'intersezione tra una sfera e un cilindro che interseca la sfera.

{{Code|code=
import Mesh, BuildRegularGeoms
sphere = Mesh.Mesh(BuildRegularGeoms.Sphere(5.0, 50))
cylinder = Mesh.Mesh(BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50))
diff = sphere
diff = diff.difference(cylinder)
d = FreeCAD.newDocument()
d.addObject("Mesh::Feature", "Diff_Sphere_Cylinder").Mesh = diff
d.recompute()
}}

[[#top|top]]

<div class="mw-translate-fuzzy">
=== Esportazione ===

Si può anche scrivere l'oggetto mesh in un modulo python:
</div>
</div>


{{Code|code=
{{Code|code=
import FreeCAD, Mesh
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
import SavedMesh
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36)
m2 = Mesh.Mesh(SavedMesh.faces)
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces
pipe = cylA
pipe = pipe.difference(cylB)
pipe.flipNormals() # somehow required
doc = FreeCAD.ActiveDocument
obj = d.addObject("Mesh::Feature", "Pipe")
obj.Mesh = pipe
doc.recompute()
}}
}}


Line 137: Line 116:
</div>
</div>


An extensive (though hard to use) source of Mesh related scripting are the unit test scripts of the Mesh-Module.
An extensive, though hard to use, source of mesh related scripting are the unit test scripts of the {{incode|Mesh}} module.
In this unit tests literally all methods are called and all properties/attributes are tweaked.
In these unit tests literally all methods are called and all properties/attributes are tweaked.
So if you are bold enough, take a look at the [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Unit Test module].
So if you are bold enough, take a look at the [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Unit Test module].


<div class="mw-translate-fuzzy">
Vedere anche [[Mesh_API/it|Mesh API]]
Vedere anche [[Mesh_API/it|Mesh API]]
</div>


[[#top|top]]
[[#top|top]]
Line 149: Line 130:
</div>
</div>


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

Revision as of 21:53, 5 June 2020

Introduzione

Prima di tutto si deve importare il modulo Mesh:

To get access to the Mesh module you have to import it first:

import Mesh

Creazione e caricamento

Per creare un oggetto mesh vuoto basta usare il costruttore standard:

To create an empty mesh object just use the standard constructor:

mesh = Mesh.Mesh()

Inoltre è possibile creare un oggetto da un file

mesh = Mesh.Mesh("D:/temp/Something.stl")

Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:

triangles = [
# triangle 1
[-0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000], [-0.5000, 0.5000, 0.0000],
#triangle 2
[-0.5000, -0.5000, 0.0000], [0.5000, -0.5000, 0.0000], [0.5000, 0.5000, 0.0000],
]
meshObject = Mesh.Mesh(triangles)
Mesh.show(meshObject)

Il Kernel Mesh si occupa di creare una corretta struttura topologica dei dati individuando i punti e i bordi coincidenti.

top

Modellazione

Per creare delle geometrie regolari è possibile utilizzare lo script Python BuildRegularGeoms.py.

To create regular geometries you can use one of the create*() methods. A torus, for instance, can be created as follows:

m = Mesh.createTorus(8.0, 2.0, 50)
Mesh.show(m)

I primi due parametri definiscono i raggi del toroide e il terzo parametro è un fattore di sub-campionamento che stabilisce quanti triangoli vengono creati. Maggiore è questo valore e più il corpo è liscio, più questo valore è piccolo e più il corpo è grossolano (sfaccettato).

La classe Mesh fornisce una serie di funzioni booleane che possono essere utilizzate per operazioni di modellazione. Essa fornisce l'unione, l'intersezione e la differenza tra due oggetti mesh.

The Mesh module also provides three Boolean methods: union(), intersection() and difference():

m1, m2              # are the input mesh objects
m3 = Mesh.Mesh(m1)  # create a copy of m1
m3.unite(m2)        # union of m1 and m2, the result is stored in m3
m4 = Mesh.Mesh(m1)
m4.intersect(m2)    # intersection of m1 and m2
m5 = Mesh.Mesh(m1)
m5.difference(m2)   # the difference of m1 and m2
m6 = Mesh.Mesh(m2)
m6.difference(m1)   # the difference of m2 and m1, usually the result is different to m5

Ecco infine, un esempio completo che calcola l'intersezione tra una sfera e un cilindro che interseca la sfera.

import FreeCAD, Mesh
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36)
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces
pipe = cylA
pipe = pipe.difference(cylB)
pipe.flipNormals() # somehow required
doc = FreeCAD.ActiveDocument
obj = d.addObject("Mesh::Feature", "Pipe")
obj.Mesh = pipe
doc.recompute()

top

Prove

Una nutrita (anche se difficile da usare) libreria di script riferiti a Mesh sono gli script dell'unita di test del Modulo Mesh. In questa unit test sono letteralmente chiamati tutti i metodi e sono ottimizzate tutte le proprietà e gli attributi. Quindi, se siete abbastanza coraggiosi, date un'occhiata al modulo unit test.

An extensive, though hard to use, source of mesh related scripting are the unit test scripts of the Mesh module. In these unit tests literally all methods are called and all properties/attributes are tweaked. So if you are bold enough, take a look at the Unit Test module.

Vedere anche Mesh API

top