在我之前的文章中,我讨论了 AutoCAD 块对象和与 AutoCAD 块类相关的其他相关对象。在那篇文章中,我还简要介绍了 Block 属性。现在,在本文中,我主要关注 AutoCAD Attribute 类。
我在本文中使用的是 pyautocad 模块,但我也可以使用 pythoncom 和win32com等通信模块。
什么是 AutoCAD 属性对象?
AutoCAD 属性对象基本上是描述 AutoCAD 对象特征的元数据。例如,它可以描述AutoCAD块对象的特征。AttributeReference是包含描述某些AutoCAD块对象特征的文本的对象类。
正如我在之前的一篇涵盖 AutoCAD 块对象的文章中已经解释的那样,AutoCAD 块是 BlockCollection 类的一个元素。要使用AutoCAD 块对象,我必须在我的图形中创建特定块的实例。结果对象是一个 BlockReference 实例。
同样,AutoCAD AttributeRefrence 对象是 Attribute 类的实例。
在日常工作活动中,例如标记实体、创建绘图标签和注释、特定对象的注释、视口设置调整等。我将需要属性 AutoCAD 块对象。
因此,了解各种与 AutoCAD 属性相关的命令非常重要。
AutoCAD 属性对象特性
在本节中,我将讨论 Attribute 对象的一些重要属性。除此之外,我想指出适用于 Attribute 对象的所有属性也适用于 AttributeReference 对象。
我在此练习中使用了与我在之前的 AutoCAD Block 文章中使用过的相同示例。我建议您查看该博客文章以全面了解 AutoCAD Block 类。
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)
现在,我可以看到已在我的文档中创建了对 AutoCAD 属性块的引用。
下面我将演示我创建的 Attribute 对象和 AttributeRefrence 对象的属性。
#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
同样,还有一些其他属性定义了属性名称、属性内容和文本类型。等等。请参阅下面的代码和程序输出。
# 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
正如我在上面的代码中所示,多行文本有一个属性,它返回文本方向的值。它有五个可能的整数形式的返回值。这些选项如下:
- acBottomToTop : 1
- acByStyle : 2
- 从左到右:3
- acRightToLeft : 4
- acTopToBottom : 5
AutoCAD 属性类的方法
Attribute 和 AttributeReference 类的某些方法类似于其他 AutoCAD 对象类的其他方法。我在下面列出了一些重要的方法:
- ArrayPolar
- 数组矩形
- 复制
- 删除
- 获取边界框
- 相交
- 镜子
- 镜像3D
- 移动
- 旋转
- 旋转3D
- 比例实体
- 更新
- 更新MTextAttribute
结束语
我演示了 AutoCAD Attribute、AttributeReference 和 AttriburtedBlock 类的使用。显然,最重要的是在我们的日常生活中实施这些信息,以自动化重复性和成本高昂的任务,从而提高生产力。考虑到这一点,请随时使用我们的联系表与我预约任何技术指导的会议。除此之外,请在下面的评论部分留下任何反馈、疑问或问题。
Leave a Reply