我不确定我是否完全理解你的问题,但在我看来,你的代码在逻辑上是错误的(如果函数中的AcadBlock参数不是ModelSpace或PaperSpace):
1.块定义的范围不一定与块引用相同。例如,块定义可以有一些属性定义,具有非常短的标记字符串,而相应的属性引用可以具有非常长的值字符串,或者甚至块引用可以具有没有匹配属性定义的属性引用,或者根本没有属性引用。这很可能会使块引用的范围与块定义不同。此外,还需要考虑到块参照可以缩放/旋转,这也会导致与块定义不同的范围。
2. 在块定义中没有可用于访问动态设计的 API,因此您的代码注释“
如果您的目标是了解动态块引用的所有可能范围,则非常简单:
1. 在块引用中获取可用的动态属性名称列表(请记住,其他动态属性而不是可见性也可能导致不同的范围);
2. 逐个遍历属性并进行设置,获取块引用的范围。
当然,如果多个动态属性的组合可能导致不同的程度,那么事情就相当复杂,这取决于你来找出答案。
在简单的情况下(假设您只有一个属性/可见性和值列表),然后您可以执行此操作(伪代码):
Dim originalVal as Object
Dim propVals() As Object
Dim i as Integer
Dim j As Integer
Dim props As AcadDynamicBlockReferenceProperty
Dim props As Variant
//Get the value list of the property/Visibility
props=TheBlockRef.GetDynamicBlockProperties()
For i=0 To Ubound(props)
prop=props
如果道具。PropertyName=[The target property] Then
For j=0 To Ubound(prop.AllowedValues)
Redim Preserve propVals(j)
propVals(j)=prop.AllowedValues(j)
Next
Exit For
End If
Next
//Loop through the priperty/visibility state
Dim state as object
For i=0 to Ubound(propVals)
set state=propVals(i)
'' 获取块引用的属性/对值
的可见性 '' 获取此状态
下的块引用的范围 下一页