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

FreeCAD Scripting Basics
Topological data scripting

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