Mesh Scripting/it: Difference between revisions
(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: | ||
}} |
}} |
||
⚫ | |||
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. |
||
⚫ | |||
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: | ||
}} |
}} |
||
⚫ | |||
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: |
||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 78: | Line 84: | ||
}} |
}} |
||
⚫ | |||
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. |
||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 98: | Line 106: | ||
{{Code|code= |
{{Code|code= |
||
import Mesh, BuildRegularGeoms |
import Mesh, BuildRegularGeoms |
||
sphere = Mesh.Mesh( |
sphere = Mesh.Mesh(BuildRegularGeoms.Sphere(5.0, 50)) |
||
cylinder = Mesh.Mesh( |
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]] |
|||
⚫ | |||
==== Analisi e Test ==== |
|||
⚫ | |||
⚫ | |||
==== Scrivere i propri algoritmi ==== |
|||
⚫ | |||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
Line 127: | Line 129: | ||
}} |
}} |
||
[[#top|top]] |
|||
⚫ | |||
==== Aspetti correlati alla GUI ==== |
|||
⚫ | |||
<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.
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()
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)
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
- Miscellaneous: Import mesh, Export mesh, Create mesh from shape, Regular solid, Unwrap Mesh, Unwrap Face
- Modifying: Harmonize normals, Flip normals, Fill holes, Close hole, Add triangle, Remove components, Remove components by hand, Smooth, Refinement, Decimation, Scale
- Boolean: Union, Intersection, Difference
- Cutting: Cut mesh, Trim mesh, Trim mesh with a plane, Create section from mesh and plane, Cross-sections
- Components and segments: Merge, Split by components, Create mesh segments, Create mesh segments from best-fit surfaces
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub