乐筑天下

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

按名称为动态块选择集过滤器

[复制链接]

12

主题

64

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2006-10-30 18:51:02 | 显示全部楼层 |阅读模式
这是AutoCAD 2007版本
我已经升级了(?)一些块从标准块到动态块,现在我发现我的一些代码无法按名称找到这些块,因为动态块被分配了匿名名称。(*U??)
有一个新的blockreference属性EffectiveName,我可以用它来构建选择集,但我更希望用户在选择过程中看到过滤的选择,而不是在选择之后。此外,我还有其他依赖于块名过滤的函数,我不'我不想重写它们
有没有办法建立一个选择集过滤器来查找DXF子类标记
例如:
0="插入“
2=;s_elev*“
1001=;AcDbDynamicBlockTrueName“
1000=;s_elev*“
或者还有别的办法吗

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-10-31 07:34:16 | 显示全部楼层
这是一种变通方法。从函数中获得一个名称字符串,然后将其用于过滤器
  1. Function SelectDynamicByName(sName As String) As String
  2.     Dim sArray As String
  3.     Dim oBref As AcadBlockReference
  4.     Dim SS As AcadSelectionSet
  5.     sArray = sName
  6.     Set SS = sset(2, "`*U*") 'Use a selectionset function
  7.     For Each oBref In SS
  8.         If oBref.IsDynamicBlock Then
  9.             If oBref.EffectiveName = sName Then
  10.                 sArray = sArray & ",`" & oBref.Name
  11.             End If
  12.         End If
  13.     Next
  14.     SelectDynamicByName = sArray
  15. End Function
  16. Sub Test()
  17.     Dim SS As AcadSelectionSet
  18.     Set SS = sset(2, SelectDynamicByName("Door - Imperial"))
  19.     Debug.Print SS.count
  20. End Sub
  21. Public Function sset(FilterType, FilterData As Variant, Optional ssName As String = "SS") As AcadSelectionSet
  22.    
  23.     Dim oSSets As AcadSelectionSets
  24.     Set oSSets = ThisDrawing.SelectionSets
  25.     For Each sset In oSSets
  26.         If sset.Name = ssName Then
  27.             sset.Delete
  28.             Exit For
  29.         End If
  30.     Next
  31.     Dim FType() As Integer
  32.     Dim FData() As Variant
  33.     Dim i As Integer
  34.     If IsArray(FilterType) = False Then
  35.         If IsArray(FilterData) = False Then
  36.             ReDim FType(0)
  37.             ReDim FData(0)
  38.             FType(0) = FilterType
  39.             FData(0) = FilterData
  40.         Else
  41.             Exit Function
  42.         End If
  43.     Else
  44.         If UBound(FilterType)  UBound(FilterData) Then
  45.             Exit Function 'They must be pairs
  46.         End If
  47.         
  48.         ReDim FType(UBound(FilterType))
  49.         ReDim FData(UBound(FilterType))
  50.         For i = 0 To UBound(FilterType)
  51.             FType(i) = FilterType(i)
  52.             FData(i) = FilterData(i)
  53.         Next
  54.     End If
  55.    
  56.     Set sset = ThisDrawing.SelectionSets.Add(ssName)
  57.     sset.Select 5, FilterType:=FType, FilterData:=FData
  58.     'To use this function for single filter
  59.     'Set SS = SSet(0, "insert")
  60.     'For multiple filter
  61.     'Set SS = SSet(array(0,2),array("insert",oBlock.name)) 'must be pairs
  62.    
  63. End Function
  64. End Sub

回复

使用道具 举报

12

主题

64

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2006-10-31 12:43:03 | 显示全部楼层
Bryco,非常感谢你的出色工作
它做我想要的
我试过那样的东西,但没有;我不知道这个角色。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-10-31 17:18:39 | 显示全部楼层
很高兴它成功了,我也不得不询问这个角色,它'因为尺寸块也需要吹扫接头,所以吹扫接头很方便。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 20:37 , Processed in 0.435837 second(s), 61 queries .

© 2020-2025 乐筑天下

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