Mesh Scripting/it: Difference between revisions
(Updating to match new version of source page) |
(Updating to match new version of source page) |
||
Line 5: | Line 5: | ||
Prima di tutto si deve importare il modulo Mesh: |
Prima di tutto si deve importare il modulo Mesh: |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
import Mesh |
import Mesh |
||
}} |
|||
</syntaxhighlight> |
|||
Dopo questa operazione si ha accesso al modulo Mesh e alla classe Mesh che offrono le funzioni del Kernel C++ Mesh di FreeCAD. |
Dopo questa operazione si ha accesso al modulo Mesh e alla classe Mesh che offrono le funzioni del Kernel C++ Mesh di FreeCAD. |
||
Line 14: | Line 14: | ||
Per creare un oggetto mesh vuoto basta usare il costruttore standard: |
Per creare un oggetto mesh vuoto basta usare il costruttore standard: |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
mesh = Mesh.Mesh() |
mesh = Mesh.Mesh() |
||
}} |
|||
</syntaxhighlight> |
|||
Inoltre è possibile creare un oggetto da un file |
Inoltre è possibile creare un oggetto da un file |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
mesh = Mesh.Mesh('D:/temp/Something.stl') |
mesh = Mesh.Mesh('D:/temp/Something.stl') |
||
}} |
|||
</syntaxhighlight> |
|||
Un elenco di tipi di file compatibili è disponibile [[Feature_list/it#IO|in questa pagina]] al paragrafo 'Mesh'. |
Un elenco di tipi di file compatibili è disponibile [[Feature_list/it#IO|in questa pagina]] al paragrafo 'Mesh'. |
||
Line 28: | Line 28: | ||
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici: |
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici: |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
planarMesh = [ |
planarMesh = [ |
||
# triangle 1 |
# triangle 1 |
||
Line 37: | Line 37: | ||
planarMeshObject = Mesh.Mesh(planarMesh) |
planarMeshObject = Mesh.Mesh(planarMesh) |
||
Mesh.show(planarMeshObject) |
Mesh.show(planarMeshObject) |
||
}} |
|||
</syntaxhighlight> |
|||
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. |
||
Line 47: | Line 47: | ||
Per creare delle geometrie regolari è possibile utilizzare lo script Python BuildRegularGeoms.py. |
Per creare delle geometrie regolari è possibile utilizzare lo script Python BuildRegularGeoms.py. |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
import BuildRegularGeoms |
import BuildRegularGeoms |
||
}} |
|||
</syntaxhighlight> |
|||
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. |
||
Line 55: | Line 55: | ||
Ad esempio, per creare un toroide si può fare nel modo seguente: |
Ad esempio, per creare un toroide si può fare nel modo seguente: |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles |
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles |
||
m = Mesh.Mesh(t) |
m = Mesh.Mesh(t) |
||
}} |
|||
</syntaxhighlight> |
|||
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). |
||
Line 64: | Line 64: | ||
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. |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
m1, m2 # are the input mesh objects |
m1, m2 # are the input mesh objects |
||
m3 = Mesh.Mesh(m1) # create a copy of m1 |
m3 = Mesh.Mesh(m1) # create a copy of m1 |
||
Line 74: | Line 74: | ||
m6 = Mesh.Mesh(m2) |
m6 = Mesh.Mesh(m2) |
||
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5 |
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5 |
||
}} |
|||
</syntaxhighlight> |
|||
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= |
|||
<syntaxhighlight> |
|||
import Mesh, BuildRegularGeoms |
import Mesh, BuildRegularGeoms |
||
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) ) |
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) ) |
||
Line 87: | Line 87: | ||
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff |
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff |
||
d.recompute() |
d.recompute() |
||
}} |
|||
</syntaxhighlight> |
|||
==== Analisi e Test ==== |
==== Analisi e Test ==== |
||
Line 97: | Line 97: | ||
Si può anche scrivere l'oggetto mesh in un modulo python: |
Si può anche scrivere l'oggetto mesh in un modulo python: |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py") |
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py") |
||
import SavedMesh |
import SavedMesh |
||
m2 = Mesh.Mesh(SavedMesh.faces) |
m2 = Mesh.Mesh(SavedMesh.faces) |
||
}} |
|||
</syntaxhighlight> |
|||
==== Aspetti correlati alla GUI ==== |
==== Aspetti correlati alla GUI ==== |
Revision as of 09:51, 14 February 2019
Introduzione
Prima di tutto si deve importare il modulo 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.
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.
Modellazione
Per creare delle geometrie regolari è possibile utilizzare lo script Python 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()
Analisi e Test
Scrivere i propri algoritmi
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)
Aspetti correlati alla GUI
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.
Vedere anche Mesh API