En esta publicación de blog, veremos cómo podemos trabajar con objetos de malla 3D en AutoCAD usando el módulo pyautocad. Si queremos, también podemos usar el módulo pywin32 para trabajar con mallas 3D.
Importancia de la representación de malla 3D
La malla 3D se puede utilizar en varias industrias para diferentes propósitos.
Como ingeniero civil, definitivamente puedo decir que, mientras trabajo como agrimensor, la malla 3D puede ser muy útil para representar puntos de contorno. También se puede utilizar en defectos de construcción haciendo una inspección de coordenadas de cada pequeño elemento de una estructura.
Se puede utilizar en la industria mecánica mientras se trabaja con el diseño de máquinas.
Hoy en día, también usamos el modelo de malla para el reconocimiento facial. Aquí, además, se puede utilizar, por ejemplo, para detectar cambios en las expresiones faciales.
Hay más casos de uso de malla 3D que juegan un papel muy importante en muchas industrias.
Iniciando el script en Python usando pyautocad o pywin32
Podemos configurar nuestro entorno de trabajo utilizando el módulo pyautocad como se indica a continuación:
from pyautocad import Autocad, aDouble
acad = Autocad(create_if_not_exists=True)
Alternativamente, también podemos usar win32com.client para que todo funcione según el siguiente script:
from win32com.client import *
import pythoncom
acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace
def aDouble(*argv):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (argv))
Agregar malla 3D a plantillas de AutoCAD usando pyautocad o pywin32
Para dibujar una malla 3D en la plantilla de AutoCAD, se necesita un comando muy pequeño con unos pocos parámetros.
La sintaxis del comando es como se indica a continuación:
objeto.Add3DMesh(M, N, PointsMatrix)
Aquí, M & N toma una entrada de número entero que va de 2 a 256 y representa el tamaño de la matriz (o el número de vértices a lo largo) en ambas direcciones M & N.
PointsMatrix representa la matriz de dobles. Es la misma matriz en la que, por ejemplo, creamos polilíneas con pyautocad .
Vamos a crear uno de esos modelos de malla utilizando el ejemplo existente que se proporciona en la documentación de Autodesk. Tomaré el PointsMatrix como se indica en la documentación.
pmatrx = aDouble(10, 1, 3, 10, 5, 5, 10, 10, 3, 15, 1, 0, 15, 5, 0, 15, 10, 0, 20, 1, 0, 20, 5, -1, 20, 10, 0, 25, 1, 0, 25, 5, 0, 25, 10, 0)
mesh1 = acad.model.Add3DMesh(4, 3, pmatrx)
En este código, hemos proporcionado 12 puntos de coordenadas en PointsMatrix.
Además, queremos 4 vértices en la dirección M y 3 vértices en la dirección N.
Análisis de la malla 3D recién creada
Como podemos ver en las Figuras 2.1 y 2.2, tenemos 4 vértices en la dirección M y 3 vértices a lo largo de N como se pasó en el comando.
Antes de dibujar el mismo hemos visualizado que los vértices estarán en este formato. es decir
De lo contrario, si tratamos de dibujar una malla con una polilínea usando el mismo conjunto de puntos de coordenadas, no resultará en una malla, sino que simplemente conectará los puntos en series dadas formando un patrón en zigzag.
pl = acad.model.AddPolyline(pmatrx)
También podemos ver cómo se ve el modelo de malla si usamos la vista realista en lugar de la estructura alámbrica 2D. Esto nos mostrará claramente las depresiones o jorobas, si las hay, en el modelo de malla dado.
Como se mencionó anteriormente, en la Figura 3.3, la depresión se puede ver claramente en la mitad derecha de la malla y la parte central de la mitad izquierda sobresale en el límite.
Propiedades de una malla 3D usando pyautocad
Tenemos algunos métodos específicos de malla que se pueden usar para obtener las propiedades de una malla determinada, además de algunos métodos comunes que usamos en las operaciones de AutoCAD.
print("Coordinates of the mesh:", end='')
print(mesh1.Coordinates)
print("Is mesh one is closed in M direction: " + str(mesh1.MClose))
print("Density of mesh in M direction: " + str(mesh1.MDensity))
print("Number of vertices in M direction: " + str(mesh1.MVertexCount))
print("Is mesh one is closed in N direction: " + str(mesh1.NClose))
print("Density of mesh in N direction: " + str(mesh1.NDensity))
print("Number of vertices in N direction: " + str(mesh1.NVertexCount))
O/p:
Coordinates of the mesh:(10.0, 1.0, 3.0, 10.0, 5.0, 5.0, 10.0, 10.0, 3.0, 15.0, 1.0, 0.0, 15.0, 5.0, 0.0, 15.0, 10.0, 0.0, 20.0, 1.0, 0.0, 20.0, 5.0, -1.0, 20.0, 10.0, 0.0, 25.0, 1.0, 0.0, 25.0, 5.0, 0.0, 25.0, 10.0, 0.0)
Is mesh one is closed in M direction: False
Density of mesh in M direction: 0
Number of vertices in M direction: 4
Is mesh one is closed in N direction: False
Density of mesh in N direction: 0
Number of vertices in N direction: 3
Leave a Reply