CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ActiveX 开发指南

关于提取属性信息 (VBA/ActiveX)

2023-1-4 19:40| 发布者: admin| 查看: 466| 评论: 0|来自: AutoCAD

摘要: 可以使用 GetAttributes 和 GetConstantAttributes 方法从图形中提取属性信息。

您可以使用 与 方法从图形中提取属性信息。GetAttributesGetConstantAttributes

该方法返回附加到块的属性引用的数组及其当前值。该方法返回附加到块或外部引用的常量属性数组。此方法返回的属性是常量属性定义,而不是属性引用。GetAttributesGetConstantAttributes

您不需要模板文件来提取属性信息,也不会创建任何属性信息文件。只需迭代属性引用数组,使用属性 -reference 的 andproperties 来检查属性信息。TagStringTextString

属性表示属性引用的单个标记。该属性包含属性引用的值。TagStringTextString

获取属性引用信息

此示例创建一个块,然后向该块添加一个属性。然后将块插入到图形中。然后返回并使用消息框显示属性数据。然后更新块参照的属性数据,并再次返回并显示属性数据。

Sub Ch10_GettingAttributes()
 ' Create the block
 Dim blockObj As AcadBlock
 Dim insertionPnt(0 To 2) As Double
 insertionPnt(0) = 0
 insertionPnt(1) = 0
 insertionPnt(2) = 0
 Set blockObj = ThisDrawing.Blocks.Add _
 (insertionPnt, "TESTBLOCK")
 
 ' Define the attribute definition
 Dim attributeObj As AcadAttribute
 Dim height As Double
 Dim mode As Long
 Dim prompt As String
 Dim insertionPoint(0 To 2) As Double
 Dim tag As String
 Dim value As String
 height = 1#
 mode = acAttributeModeVerify
 prompt = "Attribute Prompt"
 insertionPoint(0) = 5
 insertionPoint(1) = 5
 insertionPoint(2) = 0
 tag = "Attribute Tag"
 value = "Attribute Value"
 
 ' Create the attribute definition object on the block
 Set attributeObj = blockObj.AddAttribute _
 (height, mode, prompt, _
 insertionPoint, tag, value)
 
 ' Insert the block
 Dim blockRefObj As AcadBlockReference
 insertionPnt(0) = 2
 insertionPnt(1) = 2

 insertionPnt(2) = 0
 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
 (insertionPnt, "TESTBLOCK", 1, 1, 1, 0)
 ZoomAll
 
 ' Get the attributes for the block reference
 Dim varAttributes As Variant
 varAttributes = blockRefObj.GetAttributes
 
 ' Move the attribute tags and values into a
 ' string to be displayed in a Msgbox
 Dim strAttributes As String
 strAttributes = ""
 Dim I As Integer
 For I = LBound(varAttributes) To UBound(varAttributes)
 strAttributes = strAttributes + "  Tag: " + _
 varAttributes(I).TagString + vbCrLf + _
 "   Value: " + varAttributes(I).textString
 Next
 MsgBox "The attributes for blockReference " + _
 blockRefObj.Name & " are: " & vbCrLf _
 & strAttributes
 
 ' Change the value of the attribute
 ' Note: There is no SetAttributes. Once you have the
 ' variant array, you have the objects.
 ' Changing them changes the objects in the drawing.
 varAttributes(0).textString = "NEW VALUE!"
 
 ' Get the attributes again
 Dim newvarAttributes As Variant
 newvarAttributes = blockRefObj.GetAttributes
 
 ' Again, display the tags and values
 strAttributes = ""
 For I = LBound(varAttributes) To UBound(varAttributes)
 strAttributes = strAttributes + "  Tag: " + _
 newvarAttributes(I).TagString + vbCrLf + _
 "   Value: " + newvarAttributes(I).textString
 Next
 MsgBox "The attributes for blockReference " & _
 blockRefObj.Name & " are: " & vbCrLf _
 & strAttributes
End Sub

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 11:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部