109 lines
7.0 KiB
HTML
109 lines
7.0 KiB
HTML
<html><head><title>Mesh Scripting/it</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type='text/css' href='wiki.css' rel='stylesheet'></head><body><h1>Mesh Scripting/it</h1></div>
|
|
|
|
<div id="mw-content-text" lang="it" dir="ltr" class="mw-content-ltr"><hr/><div class="mw-parser-output"><div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
|
|
<ul>
|
|
<li class="toclevel-1 tocsection-1"><a href="#Introduzione"><span class="tocnumber">1</span> <span class="toctext">Introduzione</span></a></li>
|
|
<li class="toclevel-1 tocsection-2"><a href="#Creazione_e_caricamento"><span class="tocnumber">2</span> <span class="toctext">Creazione e caricamento</span></a></li>
|
|
<li class="toclevel-1 tocsection-3"><a href="#Modellazione"><span class="tocnumber">3</span> <span class="toctext">Modellazione</span></a>
|
|
<ul>
|
|
<li class="toclevel-2 tocsection-4"><a href="#Analisi_e_Test"><span class="tocnumber">3.1</span> <span class="toctext">Analisi e Test</span></a></li>
|
|
<li class="toclevel-2 tocsection-5"><a href="#Scrivere_i_propri_algoritmi"><span class="tocnumber">3.2</span> <span class="toctext">Scrivere i propri algoritmi</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-1 tocsection-6"><a href="#Esportazione"><span class="tocnumber">4</span> <span class="toctext">Esportazione</span></a>
|
|
<ul>
|
|
<li class="toclevel-2 tocsection-7"><a href="#Aspetti_correlati_alla_GUI"><span class="tocnumber">4.1</span> <span class="toctext">Aspetti correlati alla GUI</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-1 tocsection-8"><a href="#Prove"><span class="tocnumber">5</span> <span class="toctext">Prove</span></a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<h4><span class="mw-headline" id="Introduzione">Introduzione</span></h4>
|
|
<p>Prima di tutto si deve importare il modulo Mesh:
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Mesh</pre></div>
|
|
<p>Dopo questa operazione si ha accesso al modulo Mesh e alla classe Mesh che offrono le funzioni del Kernel C++ Mesh di FreeCAD.
|
|
</p>
|
|
<h3><span class="mw-headline" id="Creazione_e_caricamento">Creazione e caricamento</span></h3>
|
|
<p>Per creare un oggetto mesh vuoto basta usare il costruttore standard:
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>mesh = Mesh.Mesh()</pre></div>
|
|
<p>Inoltre è possibile creare un oggetto da un file
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>mesh = Mesh.Mesh('D:/temp/Something.stl')</pre></div>
|
|
<p>Un elenco di tipi di file compatibili è disponibile <a href="/wiki/Feature_list/it#IO" title="Feature list/it">in questa pagina</a> al paragrafo 'Mesh'.
|
|
</p><p>Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>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)</pre></div>
|
|
<p>Il Kernel Mesh si occupa di creare una corretta struttura topologica dei dati individuando i punti e i bordi coincidenti.
|
|
</p><p>Più avanti si vedrà come è possibile verificare ed esaminare i dati mesh.
|
|
</p>
|
|
<h3><span class="mw-headline" id="Modellazione">Modellazione</span></h3>
|
|
<p>Per creare delle geometrie regolari è possibile utilizzare lo script Python BuildRegularGeoms.py.
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import BuildRegularGeoms</pre></div>
|
|
<p>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.
|
|
</p><p>Ad esempio, per creare un toroide si può fare nel modo seguente:
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
|
|
m = Mesh.Mesh(t)</pre></div>
|
|
<p>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).
|
|
</p><p>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.
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>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</pre></div>
|
|
<p>Ecco infine, un esempio completo che calcola l'intersezione tra una sfera e un cilindro che interseca la sfera.
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>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()</pre></div>
|
|
<h4><span class="mw-headline" id="Analisi_e_Test">Analisi e Test</span></h4>
|
|
<h4><span class="mw-headline" id="Scrivere_i_propri_algoritmi">Scrivere i propri algoritmi</span></h4>
|
|
<h3><span class="mw-headline" id="Esportazione">Esportazione</span></h3>
|
|
<p>Si può anche scrivere l'oggetto mesh in un modulo python:
|
|
</p>
|
|
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
|
|
import SavedMesh
|
|
m2 = Mesh.Mesh(SavedMesh.faces)</pre></div>
|
|
<h4><span class="mw-headline" id="Aspetti_correlati_alla_GUI">Aspetti correlati alla GUI</span></h4>
|
|
<h3><span class="mw-headline" id="Prove">Prove</span></h3>
|
|
<p>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 <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup">modulo unit test</a>.
|
|
</p><p>Vedere anche <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_API/it" title="Mesh API/it">Mesh API</a>
|
|
</p>
|
|
|
|
<div style="clear:both"></div>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div><div class="printfooter">
|
|
Online version: "<a dir="ltr" href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Scripting/it&oldid=143844">http://www.freecadweb.org/wiki/index.php?title=Mesh_Scripting/it&oldid=143844</a>"</div>
|
|
<div id="catlinks" class="catlinks" data-mw="interface"></div><div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
<div id="mw-navigation">
|
|
<h2>Navigation menu</h2>
|
|
|
|
</body></html> |