Mesh Scripting/es: Difference between revisions
(Updating to match new version of source page) |
(Created page with "Ver también: Interfaz de programación de aplicaciones Malla.") |
||
(24 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
{{docnav|FreeCAD Scripting Basics|Topological data scripting}} |
|||
{{TOCright}} |
|||
⚫ | |||
⚫ | |||
Para obtener acceso al módulo {{incode|Malla}} hay que importarlo primero: |
|||
En primer lugar tienes que importar el módulo Malla: |
|||
{{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"> |
|||
⚫ | |||
Para crear un objeto malla vacío |
Para crear un objeto de malla vacío basta con utilizar el constructor estándar: |
||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
Line 20: | Line 19: | ||
}} |
}} |
||
También |
También puede crear un objeto a partir de un archivo: |
||
{{Code|code= |
{{Code|code= |
||
mesh = Mesh.Mesh( |
mesh = Mesh.Mesh("D:/temp/Something.stl") |
||
}} |
}} |
||
⚫ | |||
(Una lista de formatos de archivo compatibles se puede encontrar bajo 'Mallas' [[Feature_list/es#IO|aquí]].) |
|||
⚫ | |||
{{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], |
||
#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], |
||
] |
] |
||
meshObject = Mesh.Mesh(triangles) |
|||
Mesh.show( |
Mesh.show(meshObject) |
||
}} |
}} |
||
El |
El Núcleo-Malla se encarga de crear una estructura de datos topológicamente correcta ordenando los puntos y aristas coincidentes. |
||
{{Top}} |
|||
==Modelización== |
|||
⚫ | |||
Más adelante podrás ver cómo examinar y revisar los datos de la malla. |
|||
<div class="mw-translate-fuzzy"> |
|||
=== Modelado === |
|||
Para crear geometrías regulares puedes utilizar el script de Python BuildRegularGeoms.py. |
|||
</div> |
|||
{{Code|code= |
{{Code|code= |
||
m = Mesh.createTorus(8.0, 2.0, 50) |
|||
import BuildRegularGeoms |
|||
⚫ | |||
}} |
}} |
||
⚫ | |||
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. |
|||
⚫ | |||
El módulo {{incode|Malla}} también proporciona tres métodos booleanos: {{incode|union()}}, {{incode|intersection()}} y {{incode|difference()}}: |
|||
{{Code|code= |
|||
t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles |
|||
⚫ | |||
}} |
|||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
Line 77: | Line 65: | ||
}} |
}} |
||
Este es un ejemplo que crea una tubería utilizando el método {{incode|difference()}}: |
|||
Por último, un ejemplo completo que calcula la intersección entre una esfera y un cilindro que corta a la esfera. |
|||
{{Code|code= |
{{Code|code= |
||
import |
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 |
|||
diff = sphere |
|||
pipe = cylA |
|||
pipe = pipe.difference(cylB) |
|||
d = FreeCAD.newDocument() |
|||
pipe.flipNormals() # somehow required |
|||
⚫ | |||
doc = FreeCAD.ActiveDocument |
|||
⚫ | |||
⚫ | |||
obj.Mesh = pipe |
|||
⚫ | |||
}} |
}} |
||
{{Top}} |
|||
==Notas== |
|||
⚫ | |||
=== Examen y pruebas === |
|||
⚫ | |||
⚫ | |||
=== Escribe tus propios algoritmos === |
|||
<div class="mw-translate-fuzzy"> |
|||
=== Exportación === |
|||
Puedes incluso escribir la malla en un módulo de Python: |
|||
</div> |
|||
{{Code|code= |
|||
m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py") |
|||
import SavedMesh |
|||
m2 = Mesh.Mesh(SavedMesh.faces) |
|||
}} |
|||
=== Interfaces gráficas de usuario relacionadas === |
|||
<div class="mw-translate-fuzzy"> |
|||
=== Ajustes y pruebas === |
|||
⚫ | |||
⚫ | |||
⚫ | |||
</div> |
|||
See also [[Mesh_API|Mesh API]] |
|||
{{docnav/es|FreeCAD Scripting Basics/es|Topological data scripting/es}} |
|||
⚫ | |||
Ver también: [[Mesh_API|Interfaz de programación de aplicaciones Malla]]. |
|||
{{Top}} |
|||
{{Powerdocnavi{{#translation:}}}} |
|||
⚫ | |||
[[Category:Python Code{{#translation:}}]] |
|||
{{Mesh Tools navi{{#translation:}}}} |
|||
{{clear}} |
{{clear}} |
Latest revision as of 13:32, 19 September 2021
Introducción
Para obtener acceso al módulo Malla
hay que importarlo primero:
import Mesh
Creación
Para crear un objeto de malla vacío basta con utilizar el constructor estándar:
mesh = Mesh.Mesh()
También puede crear un objeto a partir de un archivo:
mesh = Mesh.Mesh("D:/temp/Something.stl")
O crearla a partir de un conjunto de triángulos descritos por sus puntos de esquina:
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-Malla se encarga de crear una estructura de datos topológicamente correcta ordenando los puntos y aristas coincidentes.
Modelización
Para crear geometrías regulares se puede utilizar uno de los métodos create*()
. Un toroide, por ejemplo, se puede crear de la siguiente manera:
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 para saber cuántos triángulos se crean. Cuanto mayor sea este valor, más suave será la malla.
El módulo Malla
también proporciona tres métodos booleanos: union()
, intersection()
y 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
Este es un ejemplo que crea una tubería utilizando el método difference()
:
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()
Notas
Una fuente extensa, aunque difícil de usar, de scripts relacionados con la malla son los scripts de pruebas unitarias del módulo Mesh
.
En estas pruebas unitarias se llaman literalmente todos los métodos y se ajustan todas las propiedades/atributos.
Así que si eres lo suficientemente audaz, echa un vistazo al módulo Unit Test.
Ver también: Interfaz de programación de aplicaciones Malla.
- 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