En este artículo presento el objeto DimAligned en AutoCAD con Python. En general, agregar dimensiones manualmente es una tarea muy tediosa que puedo evitar si uso la automatización de Python en su lugar.
Para este tutorial estoy usando el módulo pyautocad en Python. También puedo usar los módulos pywin32 y win32com en Python para esto. Estos módulos proporcionan otra forma de realizar la automatización de AutoCAD en Python. Consulte mis publicaciones de blog anteriores para obtener más información sobre estos módulos.
Agregar objeto DimAligned a dibujos de AutoCAD
Como sugiere el nombre del artículo, me centro en las dimensiones de las entidades lineales. Puedo usar el objeto DimAligned para esto.
Puedo agregar dimensiones con el método AddDimAligned. Lo primero que debe recordar es que un objeto DimAligned requiere 3 parámetros:
- ExtLine1Point (primer punto final)
- ExtLine2Point (segundo punto final)
- TextPosition (texto para dimensiones)
En este caso, tengo dos geometrías presentes en mi espacio modelo. El de la izquierda está formado por líneas y el de la derecha es una polilínea. Puedes ver esto en la siguiente captura de pantalla.
A la luz del hecho de que puedo obtener los puntos de inicio y final de los objetos de línea de AutoCAD , puedo iterar sobre el objeto AcDbLine, pasando esos puntos como puntos de inicio y final para las dimensiones.
Estoy usando la fórmula del punto medio, con un factor de 100 para el desplazamiento, para la posición del texto. Vea el código a continuación.
for l in acad.iter_objects_fast(object_name_or_list="AcDbLine"):
acad.model.AddDimAligned(APoint(l.StartPoint), APoint(l.EndPoint), APoint((l.StartPoint[0]+l.EndPoint[0]+100)/2, (l.StartPoint[1]+l.EndPoint[1]+100)/2, 0))
Por otro lado, el objeto polilínea devuelve una matriz de dobles para las coordenadas de cada uno de sus nodos. En este caso, puedo iterar sobre esa matriz y pasar esos puntos como puntos de inicio y finalización en cada iteración.
for i in acad.iter_objects_fast(object_name_or_list="AcDbPolyline"):
nodes = len(i.Coordinates)/2
j=0
while j <= nodes+1:
acad.model.AddDimAligned(APoint(i.Coordinates[j], i.Coordinates[j+1], 0), APoint(i.Coordinates[j+2], i.Coordinates[j+3], 0), APoint((i.Coordinates[j]+i.Coordinates[j+2]+100)/2, (i.Coordinates[j+1]+i.Coordinates[j+3]+100)/2, 0))
j+=2
Por supuesto, este es un enfoque muy básico para agregar dimensiones a cualquier geometría lineal. Sin embargo, permítanme ahora implementar esto y ver los resultados.
Evidentemente, como puede ver en la captura de pantalla anterior, puedo decir que he agregado las dimensiones a las geometrías lineales.
Propiedades del objeto DimAligned en AutoCAD
Ahora que he agregado las dimensiones a las figuras, quiero presentar algunas de sus propiedades importantes. No puedo explicar cada uno de ellos en este artículo ya que hay alrededor de 115 propiedades en total, muchas de ellas trabajando para diferentes aspectos de dimensión.
Pero primero, muestro algunas propiedades básicas en el código de Python a continuación.
# general properties
print(l.ObjectName)
print(l.Rotation) # rotation angle of object in radians
print(l.LinearScaleFactor)
# specfies global scale factor for linear dimensioning measurements
print(l.StyleName)
l.DecimalSeparator = "."
print(l.DecimalSeparator)
O/p:
AcDbAlignedDimension
0.0
1.0
ISO-25
.
Debido a que hay varias líneas de dimensión presentes dentro de mi dibujo, estoy seleccionando una de ellas para aplicar estas propiedades. Además, hay propiedades de ArrowHead con las que puedo establecer el tamaño de la punta de flecha pasando un valor entero.
# arrow head properties
l.ArrowheadSize = 15
print(l.ArrowheadSize)
print(l.Arrowhead1Type)
print(l.Arrowhead2Type)
O/p:
15.0
0
0
Como he mostrado en el código anterior, puedo obtener y configurar el tamaño y el tipo de punta de flecha. Para el tipo de punta de flecha, hay múltiples opciones. El valor predeterminado es acArrowDefault (0). Los otros tipos se enumeran a continuación:
- acArrowDefaultt
- acFlechaPunto
- acFlechaPuntoPequeño
- acFlechaPuntoEn blanco
- AcArrowOrigin
- acArrowOrigin2
- AcFlechaAbrir
- acArrowOpen90
- acFlechaAbrir30
- acFlechaCerrado
- acflechapequeñayo
- acFlechaNinguno
- AcFlechaOblicua
- acArrowBoxRelleno
- acFlechaCuadroEn Blanco
- acFlechaCerradoEn blanco
- acArrowDatumRelleno
- acFlechaReferenciaEn blanco
- acFlechaIntegral
- acFlechaArcoTick
- acArrowDefinido por el usuario Solo lectura
De manera similar, tengo algunas propiedades de línea de dimensión como se indica a continuación.
l.DimensionLineColor = 200
print("Dimension line color on the basis of 0-256 color index: " + str(l.DimensionLineColor))
print("The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: " + str(l.DimensionLineExtend))
print("The dimension line type is: " + l.DimensionLineType)l.DimensionLineWeight = 100
print("Dimension lineweight: " + str(l.DimensionLineWeight))
print("Dimension text direction: ", end="" )
print(l.DimTxtDirection)
# False: Left to right reading style
# True: Right to Left reading style
print(l.Fit)
O/p:
Dimension line color on the basis of 0-256 color index: 200
The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: 0.0
The dimension line type is: ByBlock
Dimension lineweight: 100
Dimension text direction: False
3
La propiedad Fit tiene 4 valores posibles, como se indica a continuación:
- acTextAndArrows(0) : Para colocar tanto el texto como las puntas de flecha dentro de las líneas de extensión.
- AcArrowsOnly(1): Para colocar solo las puntas de flecha dentro de las líneas de extensión. El texto se coloca fuera de las puntas de flecha.
- acTextOnly(2) : Para colocar solo el texto dentro de las líneas de extensión. Las puntas de flecha se colocan fuera de las líneas de extensión.
- AcBestFit(3) : Esta es la opción predeterminada que coloca el texto y las puntas de flecha en la ubicación que mejor se ajuste al espacio disponible. Cuando hay suficiente espacio disponible para el texto y las puntas de flecha, esta opción coloca ambos entre las líneas de extensión.
Hay algunas otras propiedades, como propiedades de texto y propiedades de tolerancia. Permítanme agregar algunas de cada una de esas propiedades para explicar.
#Text properties
l.TextHeight = 20
print(l.TextHeight)
print(l.TextInside)
#Tolerance properties
print(l.ToleranceDisplay)
print(l.TolerancePrecision)
O/p:
20.0
False
0
2
Aquí, la propiedad TextInside tiene un valor booleano para especificar si el texto debe agregarse a la línea de extensión con fuerza (verdadero) o solo si hay espacio (falso) en consecuencia.
Para especificar tolerancias en el texto de cota, tengo la propiedad ToleranceDisplay que también devuelve un valor booleano. ToleranceDisplay devuelve False de forma predeterminada, es decir, si no se han especificado tolerancias.
En general, la precisión de la tolerancia tiene 4 valores posibles:
- acTolNone: 0 (predeterminado)
- acTolSimétrico: 1
- acTolDesviación: 2
- LímitesAcTol: 3
- acTilBásico: 4
De hecho, como ya mencioné, hay muchas más propiedades de las que he especificado anteriormente, pero estas son algunas para mostrar cómo usarlas. A continuación se muestra una lista de los métodos de la clase de objeto de AutoCAD DimAligned.
- MatrizPolar
- matrizrectangular
- Copiar
- Borrar
- ObtenerCuadroDelimitador
- IntersecarCon
- Espejo
- Espejo3D
- Muevete
- Girar
- Rotar3D
- ScaleEntity
- Actualizar
Observaciones finales
Finalmente, puedo decir que he cubierto el objeto DimAligned de AutoCAD y la forma en que puedo automatizarlo con Python. De la misma manera, hay otros objetos de dimensión, que cubriré en mis futuras publicaciones de blog. En caso de más información técnica o consulta, no dude en ponerse en contacto conmigo utilizando nuestro formulario de contacto . Además, deja un comentario en nuestra caja de comentarios para cualquier duda.
Leave a Reply