jueves, 6 de octubre de 2022

Modelador FreeCAD (XXII)

 

Crear formas con Python

FreeCAD (XXII)

Crear y manipular geometría con Python

Los bancos de trabajo Draft y Arch utilizan código Python para crear y manipular geometría Part. La sentencia Python para importar el módulo Part es:
import Part
Si se escribe Part. aparecerá la ventana que muestra los métodos disponibles. Para crear una caja de dimensiones 3x5x7, la sentencia será:
Part.makeBox(3,5,7)
No obstante, la caja no aparece en la ventana 3D, porque lo que se ha creado sólo es una forma Part, aún no es un objeto FreeCAD. En FreeCAD, los objetos y su geometría son independientes. Cada objeto FreeCAD es un contenedor que acogerá una forma. Los objetos paramétricos tienen, además, propiedades como la anchura y la altura, y su forma se recalculará sobre la marcha siempre que se cambie alguna de esas propiedades.

Creación de objeto genérico

Se puede crear un objeto genérico mediante una serie de sentencias como la siguiente:
boxShape = Part.makeBox(3,5,7)
myObj = FreeCAD.ActiveDocument.addObject("Part::Feature","MiNuevaCaja")
myObj.Shape = boxShape
FreeCAD.ActiveDocument.recompute()
La forma de un objeto (Shape) es una de sus propiedades, como la altura, solo que no requiere un número, sino una forma Part.

Listado de atributos

Las formas Part siempre tienen los atributos siguientes:
  • vértices
  • aristas
  • alambres (conjuntos de aristas)
  • caras
  • envolvente
  • sólido.
Todos esos atributos son listas que pueden contener cualquier número de elementos o no contener ninguno. Mediante el comando print se puede obtener un listado de los elementos incluidos en cada atributo. Para ver el listado de vértices en la forma boxShape, la sentencia sería:
print(boxShape.Vertexes)
Para ver las aristas:
print(boxShape.Edges)
Para ver los alambres:
print(boxShape.Wires)
Para ver las caras:
print(boxShape.Faces)
Para ver la envolvente:
print(boxShape.Shells)
Y para ver el sólido:
print(boxShape.Solids).

Listado de propiedades de atributos

Se puede obtener el área de cada cara de un objeto mediante una sentencia como la siguiente:
for f in boxShape.Faces:
   print(f.Area)
Después de la última línea hay que pulsar Intro dos veces. Para obtener un listado con los vectores correspondientes al punto inicial y al punto final de cada arista, la sentencia sería:
for e in boxShape.Edges:
   print("New edge")
   print("Start point:")
   print(e.Vertexes[0].Point)
   print("End point:")
   print(e.Vertexes[1].Point)
Si la forma tiene vértices, cada una de sus aristas también tiene vértices. Cada pareja de vértices en cada arista pertenece a la lista total de vértices de la forma.

Tipos de forma

Se puede comprobar el tipo de una forma mediante el comando ShapeType. Si se escribe la sentencia:
print(boxShape.ShapeType)
el resultado será Solid (sólido). Si se escribe:
print(boxShape.Faces[0].ShapeType)
el resultado será Face (cara). Si se escribe:
print(boxShape.Vertexes[2].ShapeType)
el resultado será Vertex (vértice).

Creación de formas complejas

El primer paso será la creación de puntos, con sentencias como las siguientes:
V1 = FreeCAD.Vector(0,10,0)
V2 = FreeCAD.Vector(30,10,0)
V3 = FreeCAD.Vector(30,-10,0)
V4 = FreeCAD.Vector(0,-10,0)
VC1 = FreeCAD.Vector(-10,0,0)
VC2 = FreeCAD.Vector(40,0,0)
Después se podrá utilizar esos vértices para crear segmentos (es necesario haber importado previamente el módulo Part):
L1 = Part.LineSegment(V1,V2)
L2 = Part.LineSegment(V4,V3)
Part.LineSegment no crea una arista, sino la geometría en la cual se basará la arista. Para crear arcos, las sentencias serán:
C1 = Part.Arc(V1,VC1,V4)
C2 = Part.Arc(V2,VC2,V3)
Para convertir todos los arcos y líneas en aristas, las sentencias serán del tipo siguiente:
E1 = Part.Edge(L1)
E2 = Part.Edge(L2)
E3 = Part.Edge(C1)
E4 = Part.Edge(C2)
Para definir un alambre a partir de las aristas creadas, la sentencia será:
W = Part.Wire([E1,E4,E2,E3])
Se puede comprobar si el alambre está cerrado mediante la sentencia:
print( W.isClosed() )
Si está cerrado, la respuesta será True. Para crear una cara, es necesario que el alambre esté cerrado. La cara se crea con una sentencia como la siguiente:
F = Part.Face(W)
Para extruir esa cara se puede utilizar una sentencia como:
P = F.extrude(FreeCAD.Vector(0,0,10))
Para comprobar si la forma creada es un sólido, la sentencia sería:
print(P.ShapeType)
La respuesta será Solid. Cuando se extruye una cara siempre se obtiene un sólido. Si se extruye un alambre sólo se obtendrá una envolvente vacía. La forma creada no aparecerá en la ventana 3D mientras no se le asigne un objeto. Para crearlo, las sentencias pueden ser:
myObj2 = FreeCAD.ActiveDocument.addObject("Part::Feature","Mi_Solido")
myObj2.Shape = P
FreeCAD.ActiveDocument.recompute()

Daniel Trujillano, Arquitecto
http://www.arquitectotrujillano.com/


No hay comentarios:

Publicar un comentario