Mesh Scripting/it: Difference between revisions
(Updating to match new version of source page) |
(Updating to match new version of source page) |
||
Line 12: | Line 12: | ||
</div> |
</div> |
||
To get access to the {{incode|Mesh}} module you have to import it first: |
|||
{{Code|code= |
{{Code|code= |
||
import 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. |
|||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
Line 25: | Line 23: | ||
Per creare un oggetto mesh vuoto basta usare il costruttore standard: |
Per creare un oggetto mesh vuoto basta usare il costruttore standard: |
||
</div> |
</div> |
||
To create an empty mesh object just use the standard constructor: |
|||
{{Code|code= |
{{Code|code= |
||
Line 30: | Line 30: | ||
}} |
}} |
||
⚫ | |||
Inoltre è possibile creare un oggetto da un file |
Inoltre è possibile creare un oggetto da un file |
||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
mesh = Mesh.Mesh( |
mesh = Mesh.Mesh("D:/temp/Something.stl") |
||
}} |
}} |
||
⚫ | |||
Un elenco di tipi di file compatibili è disponibile [[Feature_list/it#IO|in questa pagina]] al paragrafo 'Mesh'. |
|||
⚫ | |||
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici: |
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici: |
||
{{Code|code= |
{{Code|code= |
||
triangles = [ |
|||
# 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], |
||
Line 49: | Line 47: | ||
[-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], |
||
] |
] |
||
meshObject = Mesh.Mesh(triangles) |
|||
Mesh.show( |
Mesh.show(meshObject) |
||
}} |
}} |
||
<div class="mw-translate-fuzzy"> |
<div class="mw-translate-fuzzy"> |
||
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. |
||
</div> |
</div> |
||
Più avanti si vedrà come è possibile verificare ed esaminare i dati mesh. |
|||
[[#top|top]] |
[[#top|top]] |
||
Line 67: | Line 63: | ||
</div> |
</div> |
||
To create regular geometries you can use |
To create regular geometries you can use one of the {{incode|create*()}} methods. A torus, for instance, can be created as follows: |
||
{{Code|code= |
{{Code|code= |
||
m = Mesh.createTorus(8.0, 2.0, 50) |
|||
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: |
|||
⚫ | |||
{{Code|code= |
|||
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles |
|||
⚫ | |||
}} |
}} |
||
Line 89: | Line 75: | ||
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. |
||
</div> |
</div> |
||
The {{incode|Mesh}} module also provides three Boolean methods: {{incode|union()}}, {{incode|intersection()}} and {{incode|difference()}}: |
|||
{{Code|code= |
{{Code|code= |
||
Line 102: | Line 90: | ||
}} |
}} |
||
⚫ | |||
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= |
|||
import Mesh, BuildRegularGeoms |
|||
sphere = Mesh.Mesh(BuildRegularGeoms.Sphere(5.0, 50)) |
|||
⚫ | |||
diff = sphere |
|||
⚫ | |||
d = FreeCAD.newDocument() |
|||
⚫ | |||
⚫ | |||
}} |
|||
[[#top|top]] |
|||
⚫ | |||
=== Esportazione === |
|||
Si può anche scrivere l'oggetto mesh in un modulo python: |
|||
</div> |
</div> |
||
{{Code|code= |
{{Code|code= |
||
import FreeCAD, Mesh |
|||
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py") |
|||
⚫ | |||
import SavedMesh |
|||
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36) |
|||
m2 = Mesh.Mesh(SavedMesh.faces) |
|||
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces |
|||
pipe = cylA |
|||
⚫ | |||
pipe.flipNormals() # somehow required |
|||
doc = FreeCAD.ActiveDocument |
|||
⚫ | |||
obj.Mesh = pipe |
|||
⚫ | |||
}} |
}} |
||
Line 137: | Line 116: | ||
</div> |
</div> |
||
An extensive |
An extensive, though hard to use, source of mesh related scripting are the unit test scripts of the {{incode|Mesh}} module. |
||
In |
In these unit tests literally all methods are called and all properties/attributes are tweaked. |
||
So if you are bold enough, take a look at the [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Unit Test module]. |
So if you are bold enough, take a look at the [https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Mesh/App/MeshTestsApp.py Unit Test module]. |
||
⚫ | |||
Vedere anche [[Mesh_API/it|Mesh API]] |
Vedere anche [[Mesh_API/it|Mesh API]] |
||
⚫ | |||
[[#top|top]] |
[[#top|top]] |
||
Line 149: | Line 130: | ||
</div> |
</div> |
||
⚫ | |||
{{Powerdocnavi{{#translation:}}}} |
{{Powerdocnavi{{#translation:}}}} |
||
[[Category:Developer Documentation{{#translation:}}]] |
|||
[[Category:Python Code{{#translation:}}]] |
[[Category:Python Code{{#translation:}}]] |
||
⚫ | |||
{{clear}} |
{{clear}} |
Revision as of 21:53, 5 June 2020
Introduzione
Prima di tutto si deve importare il modulo Mesh:
To get access to the Mesh
module you have to import it first:
import Mesh
Creazione e caricamento
Per creare un oggetto mesh vuoto basta usare il costruttore standard:
To create an empty mesh object just use the standard constructor:
mesh = Mesh.Mesh()
Inoltre è possibile creare un oggetto da un file
mesh = Mesh.Mesh("D:/temp/Something.stl")
Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:
triangles = [
# 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],
]
meshObject = Mesh.Mesh(triangles)
Mesh.show(meshObject)
Il Kernel Mesh si occupa di creare una corretta struttura topologica dei dati individuando i punti e i bordi coincidenti.
Modellazione
Per creare delle geometrie regolari è possibile utilizzare lo script Python BuildRegularGeoms.py.
To create regular geometries you can use one of the create*()
methods. A torus, for instance, can be created as follows:
m = Mesh.createTorus(8.0, 2.0, 50)
Mesh.show(m)
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.
The Mesh
module also provides three Boolean methods: union()
, intersection()
and difference()
:
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 FreeCAD, Mesh
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
cylB = Mesh.createCylinder(1.0, 12.0, True, 1.0, 36)
cylB.Placement.Base = (FreeCAD.Vector(-1, 0, 0)) # move cylB to avoid co-planar faces
pipe = cylA
pipe = pipe.difference(cylB)
pipe.flipNormals() # somehow required
doc = FreeCAD.ActiveDocument
obj = d.addObject("Mesh::Feature", "Pipe")
obj.Mesh = pipe
doc.recompute()
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 these 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
- 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
- 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