Bryco 发表于 2006-12-4 10:22:57

动态块可见状态

是否可以使用VBA更改动态块的可见性状态??我似乎找不到可见性状态的任何属性。
谢谢。
**** Hidden Message *****

Jeff_M 发表于 2006-12-4 12:35:24

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

Bryco 发表于 2006-12-4 13:32:13

谢谢,但是.....
它在这里抛出了一个不稳定的问题:Dim obl kref As iacadblockreference 2
您是否需要添加对任何内容的引用??我用的是2007年(不管值不值得)。

Jeff_M 发表于 2006-12-4 17:21:44

据我所知,Dim oBlkRef作为IAcadBlockReference2来获取intellisense,但之后您可以将其更改为Dim oBlkRef作为AcadBlockReference

Bryco 发表于 2006-12-4 18:27:20

这在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

Bryco 发表于 2006-12-5 07:54:04

马特-
我用的是2006年。2007年可能有点不同。

Bryco 发表于 2006-12-5 07:55:30

Bryco -
在AutoCAD 2006中,您必须使用IAcadBlockReference2才能访问GetDynamicBlockProperties方法。这可能在2007年有所改变。

Jeff_M 发表于 2006-12-5 08:53:07

谢谢大家的帮助/信息!

Bryco 发表于 2006-12-5 10:10:45

它在2006年对我有效,你试过吗,戴夫?

Bryco 发表于 2006-12-5 13:16:22

还没有,但我会的。
Matt -
您成功地让它为您工作了吗?
页: [1] 2
查看完整版本: 动态块可见状态