Objeto de atributo de AutoCAD en Python

En mi artículo anterior hablé sobre los objetos de bloque de AutoCAD y otros objetos relacionados con la clase de bloque de AutoCAD. En ese artículo también presenté brevemente los atributos de bloque. Ahora, en este artículo, me enfoco principalmente en la clase de atributos de AutoCAD.

Estoy usando el módulo pyautocad para este artículo, pero también puedo usar módulos de comunicación como pythoncom y win32com .

¿Qué es un objeto de atributo de AutoCAD?

El objeto de atributo de AutoCAD es básicamente un metadato que describe las características de un objeto de AutoCAD. Por ejemplo, puede describir las características de los objetos de bloque de AutoCAD. AttributeReference es la clase de objeto que contiene texto que caracteriza a algunos objetos de bloque de AutoCAD .

Como ya expliqué en uno de mis artículos anteriores sobre objetos de bloque de AutoCAD, el bloque de AutoCAD es un elemento de la clase BlockCollection. Para usar el objeto de bloque de AutoCAD, tengo que crear una instancia de un bloque específico en mi dibujo. El objeto resultante es una instancia de BlockReference.

De manera similar, un objeto AttributeRefrence de AutoCAD es una instancia de la clase Attribute.

En las actividades de trabajo diarias como, por ejemplo, el etiquetado de entidades, la creación de etiquetas y anotaciones de dibujo, las anotaciones para un objeto en particular, los ajustes de configuración de la ventana gráfica, etc., necesitaré objetos de bloque de AutoCAD con atributos.

Por lo tanto, es de gran importancia comprender los diversos comandos relacionados con los atributos de AutoCAD.

Propiedades de objeto de atributo de AutoCAD

En esta sección discutiré algunas de las propiedades importantes de los objetos Attribute. Además de eso, me gustaría señalar que todas las propiedades que se aplican a los objetos Attribute también se aplican a los objetos AttributeReference.

He usado el mismo ejemplo para esta práctica que ya usé en mi artículo anterior de AutoCAD Block. Le recomiendo que consulte esa publicación de blog para obtener una comprensión completa de la clase de bloques de AutoCAD.

from pickle import TRUE
from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

ip = APoint(0, 0, 0)
b1 = acad.doc.Blocks.Add(ip, "Attributed_Block_1")

pl = b1.AddPolyline(aDouble(0, 0, 0, 10000, 0, 0, 10000, 5000, 0, 0, 5000, 0, 0, 0, 0))
l = b1.AddLine(APoint(0, 250, 0), APoint(10000, 250, 0))
l = b1.AddLine(APoint(5000, 250, 0), APoint(5000, 0, 0))

#0, 1, 2, 3, 4, 5, 6 .... 10
a1 = b1.AddAttribute(50, 0, "DATE", aDouble(200, 100, 0), "DATE", "Date: 17/07/2022")
a2 = b1.AddAttribute(50, 0, "DWG", aDouble(5200, 100, 0), "DWG", "Drawing Name: Drawing 1")
a2.MTextAttribute=True

br = acad.model.InsertBlock(APoint(50, 50, 0), "Attributed_Block_1", 1, 1, 1, 0)

print("Does the Block contain any Attributes: ", end="")
print(br.HasAttributes)

Ahora, puedo ver que se ha creado una referencia al bloque con atributos de AutoCAD en mi documento.

A continuación, muestro las propiedades del objeto Attribute y el objeto AttributeRefrence que creé.

#General Properties
print("Attribute alignment: ", end="") 
print(a1.Alignment)
print("Layer of attribute: " + a1.Layer)
print("Is the direction of text backward? " + str(a1.Backward))
print("Is the attribute reference constant ? " + str(a1.Constant))
print("Entity transparency value: ", end="")
print(a1.EntityTransparency)
print("Field length of the attribute: ", end="")
print(a1.FieldLength)
print("Text height: ", end="")
print(a1.Height)
print("Attribute insertion point: ", end="")
print(a1.InsertionPoint)
print("Is attribute reference invisible: " + str(a1.Invisible))
print("Can the attribute or attribute reference be moved relative to geometry in the block ? " + str(a1.LockPosition))
print("Object name: " + a1.ObjectName)
print("Oblique angle of the object: ", end="")
print(a1.ObliqueAngle)

print("Is the attribute preset? " + str(a1.Preset))
# apreset attribute sets the attribute to its default, or preset, value when the user inserts the block.

print("Rotation of object: ", end="")
print(a1.Rotation)
print("Scale factor for the object: ", end="")
print(a1.ScaleFactor)
print("Style name of the attribute object: " + a1.StyleName)
print("Is the attribute set for verification: " + str(a1.Verify))


O/p:
Attribute alignment: 0
Layer of attribute: 0
Is the direction of text backward? False
Is the attribute reference constant ? False
Entity transparency value: ByLayer
Field length of the attribute: 0
Text height: 50.0
Attribute insertion point: (200.0, 100.0, 0.0)
Is attribute reference invisible: False
Can the attribute or attribute reference be moved relative to geometry in the block ? False
Object name: AcDbAttributeDefinition
Oblique angle of the object: 0.0
Is the attribute preset? False
Rotation of object: 0.0
Scale factor for the object: 1.0
Style name of the attribute object: Standard
Is the attribute set for verification: False

De manera similar, hay algunas otras propiedades que definen el nombre del atributo, el contenido del atributo y el tipo de texto. Y así. Vea el código y la salida del programa a continuación.

# multiline text / text properties
if(a2.MTextAttribute==True):
    print("Attribute content: " + a2.MTextAttributeContent)
    print("Boundary width of multiline text: ", end="")
    print(a2.MTextBoundaryWidth)
    print("Multiline text direction: ", end="")
    print(a2.MTextDrawingDirection)


print("Prompt string of an attribute: " + a1.PromptString)
print("Tag string of the attribute: " + a1.TagString)
print("Text string of the attribute: " + a1.TextString)
print("Alignment point of the text: ", end="")
print(a1.TextAlignmentPoint)
print("Attribute text generation flag: ", end="")
print(a1.TextGenerationFlag)


O/p:

Attribute content: Drawing Name: Drawing 1
Boundary width of multiline text: 0.0
Multiline text direction: 5
Prompt string of an attribute: DATE
Tag string of the attribute: DATE
Text string of the attribute: Date: 17/07/2022
Alignment point of the text: (0.0, 0.0, 0.0)
Attribute text generation flag: 0

Como muestro en el código anterior, hay una propiedad para el texto de varias líneas que devuelve el valor de la dirección del texto. Tiene cinco posibles valores de retorno en forma de números enteros. Esas opciones son las siguientes:

  • acBottomToTop : 1
  • acPorEstilo : 2
  • acDe izquierda a derecha : 3
  • acDerechaaizquierda : 4
  • acArribaAAbajo : 5

Métodos de la clase de atributos de AutoCAD

Algunos métodos de la clase Attribute y AttributeReference son similares a otros métodos de otras clases de objetos de AutoCAD. Enumero algunos de los métodos importantes a continuación:

  • MatrizPolar
  • matrizrectangular
  • Copiar
  • Borrar
  • ObtenerCuadroDelimitador
  • IntersecarCon
  • Espejo
  • Espejo3D
  • Muevete
  • Girar
  • Rotar3D
  • ScaleEntity
  • Actualizar
  • Actualizar MTextAttribute

Observaciones finales

Demostré el uso de las clases Attribute, AttributeReference y AttriburtedBlock de AutoCAD. Obviamente, lo más importante es implementar esta información en nuestro día a día para automatizar tareas repetitivas y costosas en un esfuerzo por aumentar la productividad. Teniendo en cuenta lo mismo, no dude en utilizar nuestro formulario de contacto para reservar una sesión conmigo para cualquier tipo de orientación técnica. Además de eso, deje cualquier comentario, duda o pregunta en la sección de comentarios a continuación.

You May Also Like

Leave a Reply

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.