Mesh Scripting/es: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 1: Line 1:
<languages/>
<languages/>
{{Docnav
{{Docnav
|[[FreeCAD_Scripting_Basics|FreeCAD Scripting Basics]]
|[[Topological_data_scripting|Topological data scripting]]
|[[Topological_data_scripting|Topological data scripting]]
|[[Mesh_to_Part|Mesh to Part]]
}}
}}


Line 13: Line 13:
</div>
</div>


First of all you have to import the Mesh module:
To get access to the {{incode|Mesh}} module you have to import it first:


{{Code|code=
{{Code|code=
import Mesh
import Mesh
}}
}}

Después de eso, ya tendrás acceso al módulo Malla y la clase Malla, que ofrecen las funciones del nucleo FreeCAD C++ Mesh-Kernel.


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Line 26: Line 24:
Para crear un objeto malla vacío sólo tienes que utilizar el constructor estándar:
Para crear un objeto malla vacío sólo tienes que utilizar el constructor estándar:
</div>
</div>

To create an empty mesh object just use the standard constructor:


{{Code|code=
{{Code|code=
Line 31: Line 31:
}}
}}


<div class="mw-translate-fuzzy">
También puedes crear un objeto desde un archivo
También puedes crear un objeto desde un archivo
</div>


{{Code|code=
{{Code|code=
mesh = Mesh.Mesh('D:/temp/Something.stl')
mesh = Mesh.Mesh("D:/temp/Something.stl")
}}
}}

<div class="mw-translate-fuzzy">
(Una lista de formatos de archivo compatibles se puede encontrar bajo 'Mallas' [[Feature_list/es#IO|aquí]].)
</div>


O también puedes crear la malla a partir de un conjunto de triángulos descrito por sus vértices:
O también puedes crear la malla a partir de un conjunto de triángulos descrito por sus vértices:


{{Code|code=
{{Code|code=
planarMesh = [
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 50: Line 48:
[-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)
meshObject = Mesh.Mesh(triangles)
Mesh.show(planarMeshObject)
Mesh.show(meshObject)
}}
}}


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
El núcleo de mallas, Mesh-Kernel, se encarga de crear una estructura topológica de datos correcta, ordenando conjuntamente los puntos coincidentes y los bordes.
El núcleo de mallas, Mesh-Kernel, se encarga de crear una estructura topológica de datos correcta, ordenando conjuntamente los puntos coincidentes y los bordes.
</div>
</div>

Más adelante podrás ver cómo examinar y revisar los datos de la malla.


[[#top|top]]
[[#top|top]]
Line 68: Line 64:
</div>
</div>


To create regular geometries you can use the Python script {{FileName|BuildRegularGeoms.py}}.
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
Mesh.show(m)
}}
}}


<div class="mw-translate-fuzzy">
<div class="mw-translate-fuzzy">
Los dos primeros parámetros definen los radios del toroide y el tercer parámetro es un factor de submuestreo relacionado con el número de triángulos que se han de crear. Cuanto mayor sea este valor, más suave es la forma y mejor acabado tiene el cuerpo.
Esta secuencia de comandos proporciona métodos para definir cuerpos de revolución sencillos, como esferas, elipsoides, cilindros, toroides y conos. Y también tiene un método para crear un cubo simple.
Para crear un toroide, por ejemplo, se puede hacer de la siguiente manera:
</div>
</div>


The {{incode|Mesh}} module also provides three Boolean methods: {{incode|union()}}, {{incode|intersection()}} and {{incode|difference()}}:
{{Code|code=
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
m = Mesh.Mesh(t)
}}

<div class="mw-translate-fuzzy">
Los dos primeros parámetros definen los radios del toroide y el tercer parámetro es un factor de submuestreo relacionado con el número de triángulos que se han de crear. Cuanto mayor sea este valor, más suave es la forma y mejor acabado tiene el cuerpo.
</div>


{{Code|code=
{{Code|code=
Line 100: Line 89:
}}
}}


<div class="mw-translate-fuzzy">
Por último, un ejemplo completo que calcula la intersección entre una esfera y un cilindro que corta a la esfera.
Por último, un ejemplo completo que calcula la intersección entre una esfera y un cilindro que corta a la esfera.

{{Code|code=
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()
}}

[[#top|top]]

<div class="mw-translate-fuzzy">
=== Exportación ===

Puedes incluso escribir la malla en un módulo de Python:
</div>
</div>


{{Code|code=
{{Code|code=
import FreeCAD, Mesh
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
cylA = Mesh.createCylinder(2.0, 10.0, True, 1.0, 36)
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 = pipe.difference(cylB)
pipe.flipNormals() # somehow required
doc = FreeCAD.ActiveDocument
obj = d.addObject("Mesh::Feature", "Pipe")
obj.Mesh = pipe
doc.recompute()
}}
}}


Line 136: Line 116:
</div>
</div>


An extensive (though hard to use) source of Mesh related scripting are the unit test scripts of the Mesh-Module.
An extensive, though hard to use, source of mesh related scripting are the unit test scripts of the {{incode|Mesh}} module.
In this unit tests literally all methods are called and all properties/attributes are tweaked.
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].


See also [[Mesh_API|Mesh API]]
See also: [[Mesh_API|Mesh API]].


[[#top|top]]
[[#top|top]]
Line 148: Line 128:
</div>
</div>


{{Mesh Tools navi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}
{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{Mesh Tools navi{{#translation:}}}}
{{clear}}
{{clear}}

Revision as of 21:53, 5 June 2020

Introducción

En primer lugar tienes que importar el módulo Malla:

To get access to the Mesh module you have to import it first:

import Mesh

Creación y Carga

Para crear un objeto malla vacío sólo tienes que utilizar el constructor estándar:

To create an empty mesh object just use the standard constructor:

mesh = Mesh.Mesh()

También puedes crear un objeto desde un archivo

mesh = Mesh.Mesh("D:/temp/Something.stl")

O también puedes crear la malla a partir de un conjunto de triángulos descrito por sus vértices:

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)

El núcleo de mallas, Mesh-Kernel, se encarga de crear una estructura topológica de datos correcta, ordenando conjuntamente los puntos coincidentes y los bordes.

top

Modelado

Para crear geometrías regulares puedes utilizar el script de 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)

Los dos primeros parámetros definen los radios del toroide y el tercer parámetro es un factor de submuestreo relacionado con el número de triángulos que se han de crear. Cuanto mayor sea este valor, más suave es la forma y mejor acabado tiene el cuerpo.

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

Por último, un ejemplo completo que calcula la intersección entre una esfera y un cilindro que corta a la esfera.

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

top

Ajustes y pruebas

Una extensa, aunque dificil de usar, librería de archivos de guión relacionados con mallas son los scripts de prueba del módulo Malla. En esta unidad, literalmente todos los métodos son invocados, y se ajustan todas las propiedades y atributos. Así que si eres lo suficientemente audaz, echa un vistazo al Módulo de prueba de unidades.

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.

See also: Mesh API.

top

FreeCAD Scripting Basics/es
Topological data scripting/es