动态块可见状态
是否可以使用VBA更改动态块的可见性状态??我似乎找不到可见性状态的任何属性。谢谢。
**** Hidden Message ***** Matt -
您可以使用类似的东西:
Sub SetDynBlockToElevation()
Dim ent As AcadEntity
Dim oSSet As AcadSelectionSet
Dim oBlkRef As IAcadBlockReference2
Dim vDynProps As Variant
Dim oDynProp As AcadDynamicBlockReferenceProperty
Dim iCnt As Long
Set oSSet = vbdPowerSet("DynBlock")
oSSet.Select acSelectionSetLast
Set oBlkRef = oSSet.Item(0)
vDynProps = oBlkRef.GetDynamicBlockProperties
For iCnt = LBound(vDynProps) To UBound(vDynProps)
Set oDynProp = vDynProps(iCnt)
If oDynProp.PropertyName = "Visibility" Then
If oDynProp.Value = "Plan" Then
oDynProp.Value = "Elevation"
End If
End If
Next iCnt
End Sub
Public Function vbdPowerSet(strName As String) As AcadSelectionSet
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
If objSelSet.Name = strName Then
objSelCol.Item(strName).Delete
Exit For
End If
Next
Set objSelSet = objSelCol.Add(strName)
Set vbdPowerSet = objSelSet
End Function
谢谢,但是.....
它在这里抛出了一个不稳定的问题:Dim obl kref As iacadblockreference 2
您是否需要添加对任何内容的引用??我用的是2007年(不管值不值得)。
据我所知,Dim oBlkRef作为IAcadBlockReference2来获取intellisense,但之后您可以将其更改为Dim oBlkRef作为AcadBlockReference 这在2007年对我有用,但是,正如Bryco指出的那样,使用这种方法没有智能感知。
Sub test()
Dim oBlkRef As AcadBlockReference
Dim oEnt As AcadEntity
Dim vPick As Variant
Dim vDynProps As Variant
Dim oDynProp As AcadDynamicBlockReferenceProperty
Dim i As Long
ThisDrawing.Utility.GetEntity oEnt, vPick, "select block: "
If TypeOf oEnt Is AcadBlockReference Then
Set oBlkRef = oEnt
If oBlkRef.IsDynamicBlock = True Then
vDynProps = oBlkRef.GetDynamicBlockProperties
For i = 0 To UBound(vDynProps)
Set oDynProp = vDynProps(i)
If oDynProp.PropertyName = "Visibility" Then
Debug.Print oDynProp.Value
End If
Next
End If
End If
End Sub
马特-
我用的是2006年。2007年可能有点不同。
Bryco -
在AutoCAD 2006中,您必须使用IAcadBlockReference2才能访问GetDynamicBlockProperties方法。这可能在2007年有所改变。
谢谢大家的帮助/信息! 它在2006年对我有效,你试过吗,戴夫? 还没有,但我会的。
Matt -
您成功地让它为您工作了吗?
页:
[1]
2