乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 123|回复: 10

动态块可见状态

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-4 10:22:57 | 显示全部楼层 |阅读模式
是否可以使用VBA更改动态块的可见性状态??我似乎找不到可见性状态的任何属性。
谢谢。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-12-4 12:35:24 | 显示全部楼层
Matt -
您可以使用类似的东西:
  1. Sub SetDynBlockToElevation()
  2.   Dim ent As AcadEntity
  3.   Dim oSSet As AcadSelectionSet
  4.   Dim oBlkRef As IAcadBlockReference2
  5.   Dim vDynProps As Variant
  6.   Dim oDynProp As AcadDynamicBlockReferenceProperty
  7.   Dim iCnt As Long
  8.   
  9.   Set oSSet = vbdPowerSet("DynBlock")
  10.   oSSet.Select acSelectionSetLast
  11.    
  12.   Set oBlkRef = oSSet.Item(0)
  13.   vDynProps = oBlkRef.GetDynamicBlockProperties
  14.   For iCnt = LBound(vDynProps) To UBound(vDynProps)
  15.     Set oDynProp = vDynProps(iCnt)
  16.     If oDynProp.PropertyName = "Visibility" Then
  17.       If oDynProp.Value = "Plan" Then
  18.          oDynProp.Value = "Elevation"
  19.       End If
  20.     End If
  21.   Next iCnt
  22. End Sub
  23. Public Function vbdPowerSet(strName As String) As AcadSelectionSet
  24.   Dim objSelSet As AcadSelectionSet
  25.   Dim objSelCol As AcadSelectionSets
  26.   Set objSelCol = ThisDrawing.SelectionSets
  27.     For Each objSelSet In objSelCol
  28.       If objSelSet.Name = strName Then
  29.         objSelCol.Item(strName).Delete
  30.         Exit For
  31.       End If
  32.     Next
  33.   Set objSelSet = objSelCol.Add(strName)
  34.   Set vbdPowerSet = objSelSet
  35. End Function

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-4 13:32:13 | 显示全部楼层
谢谢,但是.....
它在这里抛出了一个不稳定的问题:Dim obl kref As iacadblockreference 2
您是否需要添加对任何内容的引用??我用的是2007年(不管值不值得)。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-12-4 17:21:44 | 显示全部楼层
据我所知,Dim oBlkRef作为IAcadBlockReference2来获取intellisense,但之后您可以将其更改为Dim oBlkRef作为AcadBlockReference
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-4 18:27:20 | 显示全部楼层
这在2007年对我有用,但是,正如Bryco指出的那样,使用这种方法没有智能感知。
  1. Sub test()
  2. Dim oBlkRef As AcadBlockReference
  3. Dim oEnt As AcadEntity
  4. Dim vPick As Variant
  5. Dim vDynProps As Variant
  6. Dim oDynProp As AcadDynamicBlockReferenceProperty
  7. Dim i As Long
  8. ThisDrawing.Utility.GetEntity oEnt, vPick, "select block: "
  9. If TypeOf oEnt Is AcadBlockReference Then
  10.     Set oBlkRef = oEnt
  11.     If oBlkRef.IsDynamicBlock = True Then
  12.         vDynProps = oBlkRef.GetDynamicBlockProperties
  13.         For i = 0 To UBound(vDynProps)
  14.             Set oDynProp = vDynProps(i)
  15.             If oDynProp.PropertyName = "Visibility" Then
  16.                 Debug.Print oDynProp.Value
  17.             End If
  18.         Next
  19.     End If
  20. End If
  21. End Sub

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-5 07:54:04 | 显示全部楼层
马特-
我用的是2006年。2007年可能有点不同。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-5 07:55:30 | 显示全部楼层
Bryco -
在AutoCAD 2006中,您必须使用IAcadBlockReference2才能访问GetDynamicBlockProperties方法。这可能在2007年有所改变。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-12-5 08:53:07 | 显示全部楼层
谢谢大家的帮助/信息!
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-5 10:10:45 | 显示全部楼层
它在2006年对我有效,你试过吗,戴夫?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-12-5 13:16:22 | 显示全部楼层
还没有,但我会的。
Matt -
您成功地让它为您工作了吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 00:45 , Processed in 0.414570 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表