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

动态块Vis状态

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

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

马特-
您可以使用以下内容:
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 oBlkRef As IAcadBlockReference2 本人'我使用2007(因为它的价值)

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

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

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

这在2007年对我有效,但正如Bryco指出的那样,使用这种方法没有Intellisense
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

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

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

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

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

谢谢大家的帮助/信息!

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

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

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

还没有,但我会的
马特,你成功了吗
页: [1] 2
查看完整版本: 动态块Vis状态