По мотивам вот этой вот темы на dwg форуме: ссылка
Как и всегда в подобных случаях, самый простой способ это воспользоваться утилитой ArxDbg и посмотреть на атрибуты с полем и без поля, сразу будет видно, что атрибут с полем содержит словарь расширенных данных с соответствующим именем ACAD_FIELD.
Вот по наличию и имени словаря и будем проверять наличие поля в атрибуте.
Тут важна именно подчеркнутая часть, проверить НАЛИЧИЕ поля средствами VBA можно, а вот прочитать код поля - нет.
Код для VBA достаточно прост:
Sub IsAttributesHasFIELD()
Dim HasFIELD As Boolean
HasFIELD = False
Dim blockRefObj As AcadObject
Dim basePnt As Variant
On Error Resume Next
ThisDrawing.Utility.GetEntity blockRefObj, basePnt, "Select an object"
Dim varAttributes As Variant
varAttributes = blockRefObj.GetAttributes
For Each I In varAttributes
If I.HasExtensionDictionary Then
Dim EDictionary As AcadDictionary
Set EDictionary = I.GetExtensionDictionary
If EDictionary.Count > 0 Then
For Each f In EDictionary
If f.Name = "ACAD_FIELD" Then
HasFIELD = True
Exit For
End If
Next
End If
End If
Next
MsgBox CStr(HasFIELD)
End Sub
Как и всегда в подобных случаях, самый простой способ это воспользоваться утилитой ArxDbg и посмотреть на атрибуты с полем и без поля, сразу будет видно, что атрибут с полем содержит словарь расширенных данных с соответствующим именем ACAD_FIELD.
Вот по наличию и имени словаря и будем проверять наличие поля в атрибуте.
Тут важна именно подчеркнутая часть, проверить НАЛИЧИЕ поля средствами VBA можно, а вот прочитать код поля - нет.
Код для VBA достаточно прост:
Sub IsAttributesHasFIELD()
Dim HasFIELD As Boolean
HasFIELD = False
Dim blockRefObj As AcadObject
Dim basePnt As Variant
On Error Resume Next
ThisDrawing.Utility.GetEntity blockRefObj, basePnt, "Select an object"
Dim varAttributes As Variant
varAttributes = blockRefObj.GetAttributes
For Each I In varAttributes
If I.HasExtensionDictionary Then
Dim EDictionary As AcadDictionary
Set EDictionary = I.GetExtensionDictionary
If EDictionary.Count > 0 Then
For Each f In EDictionary
If f.Name = "ACAD_FIELD" Then
HasFIELD = True
Exit For
End If
Next
End If
End If
Next
MsgBox CStr(HasFIELD)
End Sub
Комментариев нет:
Отправить комментарий