Script in ambiente Mesh
Script in ambiente Mesh
_
_
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()
(Un elenco di tipi di file compatibili è disponibile in questa pagina al paragrafo 'Mesh'.)
Inoltre è possibile creare un oggetto da un file con:
mesh = Mesh.Mesh('D:/temp/Something.stl')
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:
planarMesh = [ # primo triangolo [-0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],[-0.5000,0.5000,0.0000], # secondo triangolo [-0.5000,-0.5000,0.0000],[0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000], ] planarMeshObject = Mesh.Mesh(planarMesh)
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 della griglia.
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 # sono gli oggetti mesh originali m3 = Mesh.Mesh(m1) # crea una copia di m1 m3.unite(m2) # unisce m1 con m2, il risultato è memorizzato come m3 m4 = Mesh.Mesh(m1) m4.intersect(m2) # intersezione di m1 con m2 m5 = Mesh.Mesh(m1) m5.difference(m2) # differenza tra m1 e m2 m6 = Mesh.Mesh(m2) m6.difference(m1) # la differenza tra m2 e m1, di solito il risultato è diverso da 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.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.