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 45: Line 45:
planarMesh = [
planarMesh = [
# 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],
#triangle 2
#triangle 2
[-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)
planarMeshObject = Mesh.Mesh(planarMesh)
Line 53: Line 53:
}}
}}


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


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

[[#top|top]]


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 63: Line 67:
</div>
</div>


To create regular geometries you can use the Python script BuildRegularGeoms.py.
To create regular geometries you can use the Python script {{FileName|BuildRegularGeoms.py}}.


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


<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.
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:
Ad esempio, per creare un toroide si può fare nel modo seguente:
</div>


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


<div class="mw-translate-fuzzy">
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).
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.
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>


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


[[#top|top]]
<div class="mw-translate-fuzzy">
==== Analisi e Test ====
</div>

<div class="mw-translate-fuzzy">
==== Scrivere i propri algoritmi ====
</div>


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 127: Line 129:
}}
}}


[[#top|top]]
<div class="mw-translate-fuzzy">
==== Aspetti correlati alla GUI ====
</div>


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 142: Line 142:


Vedere anche [[Mesh_API/it|Mesh API]]
Vedere anche [[Mesh_API/it|Mesh API]]

[[#top|top]]


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

Revision as of 08:49, 28 May 2020

Introduzione

Prima di tutto si deve importare il modulo Mesh:

First of all you have to import the Mesh module:

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.

Creazione e caricamento

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

mesh = Mesh.Mesh()

Inoltre è possibile creare un oggetto da un file

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

Un elenco di tipi di file compatibili è disponibile in questa pagina al paragrafo 'Mesh'.

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

planarMesh = [
# 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],
]
planarMeshObject = Mesh.Mesh(planarMesh)
Mesh.show(planarMeshObject)

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

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

top

Modellazione

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

To create regular geometries you can use the Python script BuildRegularGeoms.py.

import BuildRegularGeoms

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:

t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)

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.

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

Esportazione

Si può anche scrivere l'oggetto mesh in un modulo python:

m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
import SavedMesh
m2 = Mesh.Mesh(SavedMesh.faces)

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 this 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