乐筑天下

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

在使用Select方法时如何设置FilterType, FilterData

[复制链接]

11

主题

51

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2004-11-1 21:17:00 | 显示全部楼层 |阅读模式
根据2004 VBA的说明,Select方法的描述为:
object.Select Mode[, Point1][, Point2][, FilterType][, FilterData]
如选择所有的圆,可以使用如下代码:
                         Dim gpCode(0) As Integer
                         Dim dataValue(0) As Variant
                         gpCode(0) = 0
                         dataValue(0) = "Circle"
                         ssetObj.Select acSelectionSetAll, , , gpCode, dataValue
我的问题就是,如果要选择其它的对象,如何设置FilterType, FilterData?比如对象为Ployline时。
哪位大侠能不能给一个关于此类设置的总结啊?
回复

使用道具 举报

6

主题

30

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2017-10-26 09:11:00 | 显示全部楼层

如果要选择“OLE”  该怎么办?
回复

使用道具 举报

0

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
4
发表于 2017-11-14 22:07:00 | 显示全部楼层

正需要,谢谢
回复

使用道具 举报

1

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
23
发表于 2017-10-27 13:34:00 | 显示全部楼层
看高手用到(66.1)只查到66是“图元跟随”标志(固定),但是这个具体的意思,请问是什么
回复

使用道具 举报

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2004-11-1 22:24:00 | 显示全部楼层
参考:
'------------------------------------------------------------------
Option Explicit
'------------------------------------------------------------------
Public Sub Sample()
                         On Error GoTo ERROR_HANDLER
                         Dim ssetObj As AcadSelectionSet
                         Set ssetObj = CreateSSet("MySelection")
                         
                         Dim mode As Integer
                         mode = acSelectionSetAll
                         
                         Dim gpCode(0 To 10) As Integer
                         Dim dataValue(0 To 10) As Variant
                         
                         gpCode(0) = -4
                         dataValue(0) = ""
                         
                         gpCode(4) = -4
                         dataValue(4) = ""
                         
                         gpCode(7) = -4
                         dataValue(7) = ""
                         
                         gpCode(10) = -4
                         dataValue(10) = "Or>"
                         
                         Dim groupCode As Variant, dataCode As Variant
                         groupCode = gpCode
                         dataCode = dataValue
                         
                         ssetObj.Select mode, , , groupCode, dataCode
                         
                         MsgBox ssetObj.Count
                         
                         Exit Sub
ERROR_HANDLER:
                         Debug.Print "Error In GetIntersectionPoints: " & Err.Number & ", " & Err.Description
End Sub
'------------------------------------------------------------------
' 创建选择集
'------------------------------------------------------------------
Private Function CreateSSet(ByVal name As String) As AcadSelectionSet
                         On Error GoTo ERR_HANDLER
                         
                         Dim ssetObj As AcadSelectionSet
                         Dim SSetColl As AcadSelectionSets
                         Set SSetColl = ThisDrawing.SelectionSets
                         
                         Dim index As Integer
                         Dim found As Boolean
                         
                         found = False
                         For index = 0 To SSetColl.Count - 1
                                                         Set ssetObj = SSetColl.Item(index)
                                                         If StrComp(ssetObj.name, name, 1) = 0 Then
                                                                                         found = True
                                                                                         Exit For
                                                         End If
                         Next
                         
                         
                         If Not (found) Then
                                                         Set ssetObj = SSetColl.Add(name)
                         Else
                                                         ssetObj.Clear
                         End If
                         
                         Set CreateSSet = ssetObj
                         
                         Exit Function
ERR_HANDLER:
                         Debug.Print "Error in sub CreateSSet: " & Err.Number & " -- "; Err.Description
                         Resume ERR_END
                         
ERR_END:
End Function
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2004-11-2 08:45:00 | 显示全部楼层
过滤器列表由成对的参数组成。第一个参数标识过滤器的类型(例如对象),第二个参数指定要过滤的值(例如圆)。过滤器类型是指定使用哪种过滤器的 DXF 组码。下面列出了一些最常用的过滤器类型。
常用过滤器的 DXF 组码 [/td]
DXF 组码 [/td]
过滤器类型 [/td]
0 对象类型(字符串)
例如“Line”、“Circle”、“Arc”等。
2 对象名(字符串)
命名对象的表(给定)名称。
8 图层名(字符串)
例如“图层 0”。
60 对象可见性(整数)
使用 0 = 可见,1 = 不可见。
62 颜色编号(整数)
范围 0 到 256 内的数字索引值。
零表示 BYBLOCK。256 表示 BYLAYER。负值表示图层被关闭。
67 模型/图纸空间标识符(整数)
使用 0 或省略 = 模型空间,1 = 图纸空间。
过滤器参数声明为数组,过滤器类型声明为整数,过滤器值声明为变量。每个过滤器类型都必须与过滤器值成对出现。例如: FilterType(0) = 0            ' 表示过滤器是对象类型
FilterData(0) = "Circle"     ' 表示对象类型是“Circle”
以下代码指定两个条件:对象必须是圆,并且必须在图层 0 上。代码将 FilterType 和 FilterData 声明为两个元素的数组,并将每个条件指定给一个元素: Sub Ch4_FilterBlueCircleOnLayer0()
   Dim sstext As AcadSelectionSet
   Dim FilterType(1) As Integer
   Dim FilterData(1) As Variant
   Set sstext = ThisDrawing.SelectionSets.Add("SS4")
   
   FilterType(0) = 0
   FilterData(0) = "Circle"
   FilterType(1) = 8
   FilterData(1) = "0"
   
   sstext.SelectOnScreen FilterType, FilterData

End Sub
在指定多个选择条件时,AutoCAD 会假设选定的对象必须符合每一个条件。但用户可以按照其他方式来指定条件。对于数字项,用户可以指定关系运算(例如,圆的半径必须大于或等于 5.0);对于所有项,用户可以指定逻辑运算(例如 Text 或 Mtext)。
使用 -4 DXF 组码来指示过滤器规格中的关系运算符。以字符串的形式来指定运算符。下表显示了可以使用的关系运算符:
选择集过滤器列表的关系运算符 [/td]
运算符 [/td]
说明 [/td]
"*" 任何情况(总为真)
"=" 等于
"!=" 不等于
"/=" 不等于
"" 不等于
"小于
"小于或等于
">" 大于
">=" 大于或等于
"&" 按位与 (AND,仅限于整数组)
"&=" 按位屏蔽相等(仅限于整数组)
-4 组码也可以指定过滤器列表中的逻辑运算符,逻辑运算符是字符串但必须成对出现。运算符以小于号开始 ()。下表列出了可以在选择集过滤中使用的逻辑运算符。
选择集过滤器列表的逻辑编组运算符 [/td]
开始
运算符 [/td]

包含的内容 [/td]
结束
运算符 [/td]
"一个或多个运算对象 "AND>"
"一个或多个运算对象 "OR>"
"两个运算对象 "XOR>"
"一个运算对象 "NOT>"
以下代码指定选择半径大于或等于 5.0 的圆: Sub Ch4_FilterRelational()
   Dim sstext As AcadSelectionSet
   Dim FilterType(2) As Integer
   Dim FilterData(2) As Variant
   Set sstext = ThisDrawing.SelectionSets.Add("SS5")
   
   FilterType(0) = 0
   FilterData(0) = "Circle"
   FilterType(1) = -4
   FilterData(1) = ">="
   FilterType(2) = 40
   FilterData(2) = 5#
   
   sstext.SelectOnScreen FilterType, FilterData
End Sub下例指定选择 Text 或 Mtext 对象: Sub Ch4_FilterOrTest()
   Dim sstext As AcadSelectionSet
   Dim FilterType(3) As Integer
   Dim FilterData(3) As Variant
   Set sstext = ThisDrawing.SelectionSets.Add("SS6")
   FilterType(0) = -4
   FilterData(0) = "   FilterType(1) = 0
   FilterData(1) = "TEXT"
   FilterType(2) = 0
   FilterData(2) = "MTEXT"
   FilterType(3) = -4
   FilterData(3) = "or>"
   
   sstext.SelectOnScreen FilterType, FilterData
End Sub
过滤器列表中的符号名称和字符串可以包含通配符模式。 下表显示了 AutoCAD 能够识别的通配符以及每个通配符在上下文字符串中的含义: 通配符 [/td]字符 [/td]定义 [/td]#                (磅值符号) 匹配任意一个数字 @                (at) 匹配任意一个字母 .                (句号) 匹配任意一个非字母数字的字符 *                (星号) 匹配任意的字符序列(包括空字符串),它可以用在任何搜索模式中:包括开头、中间和结尾处 ?                (问号) 匹配任意一个字符 ~                (波浪号) 如果它是模式中的的第一个字符,则匹配除此模式以外的任意内容 [...] 匹配方括号中的任意一个字符 [~...] 匹配不在方括号中的任意一个字符 -                (连字符) 用在方括号中,指定一个字符的取值范围 ,                (逗号) 分隔两个模式 `                (单引号) 避开特殊的字符(直接读取下一个字符) 使用单引号 (`) 表示下一个字符不是通配符,而是普通字符。例如,要指定在选择集中只包含名为“*U2”的匿名块,请使用以下过滤器参数: FilterType(0) = 2
FilterData(0) = "`*U2"
以下代码将选择条件定义为选择包含“The”的所有 Mtext。本例也说明了 SelectByPolygon 选择方法的用法: Sub Ch4_FilterPolygonWildcard()
   Dim sstext As AcadSelectionSet
   Dim FilterType(1) As Integer
   Dim FilterData(1) As Variant
   Dim pointsArray(0 To 11) As Double
   Dim mode As Integer
   mode = acSelectionSetWindowPolygon
   pointsArray(0) = -12#:pointsArray(1) = -7#:pointsArray(2) = 0
   pointsArray(3) = -12#:pointsArray(4) = 10#:pointsArray(5) = 0
   pointsArray(6) = 10#:pointsArray(7) = 10#:pointsArray(8) = 0
   pointsArray(9) = 10#:pointsArray(10) = -7#:pointsArray(11) = 0
   Set sstext = ThisDrawing.SelectionSets.Add("SS10")
   
   FilterType(0) = 0
   FilterData(0) = "MTEXT"
   FilterType(1) = 1
   FilterData(1) = "*The*"
     
   sstext.SelectByPolygon mode, pointsArray, FilterType, FilterData
End Sub
回复

使用道具 举报

11

主题

51

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2004-11-2 08:53:00 | 显示全部楼层
昨晚发贴,今天就看到了王晓生、Lzh741206两位版主的热情回复,心里暖烘烘的。对两位版主的热情和耐心表示感谢。
回复

使用道具 举报

14

主题

48

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
104
发表于 2004-11-2 12:36:00 | 显示全部楼层
真是好文章
回复

使用道具 举报

9

主题

10

帖子

2

银币

初来乍到

Rank: 1

铜币
46
发表于 2004-11-9 21:24:00 | 显示全部楼层
也问,如何设置如下过滤条件:
                 半径为1的园,以及红色的直线。
查看帮助及以上列表,不知如何运用。万望解答!
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2004-11-9 22:06:00 | 显示全部楼层
Sub test()
On Error Resume Next
Dim ft, fd
Dim ss As AcadSelectionSet
ft = CreateArray(vbInteger, -4, -4, 0, 40, -4, -4, 0, 62, -4, -4)
fd = CreateArray(vbVariant, "", "", "or>")
ThisDrawing.SelectionSets("TlsSS").Delete
Set ss = ThisDrawing.SelectionSets.Add("TlsSS")
ss.SelectOnScreen ft, fd
End Sub
Function CreateArray(ByVal TypeName As VbVarType, ParamArray ValArray())
                         Dim i, mArray
                         Dim nCount As Integer
                         
                         nCount = UBound(ValArray)
                         
                         Select Case TypeName
                         Case vbDouble
                                                         Dim dArray() As Double
                                                         ReDim dArray(nCount)
                                                         mArray = dArray
                         Case vbInteger
                                                         Dim nArray() As Integer
                                                         ReDim nArray(nCount)
                                                         mArray = nArray
                         Case vbString
                                                         Dim sArray() As String
                                                         ReDim sArray(nCount)
                                                         mArray = sArray
                         Case vbVariant
                                                         Dim vArray()
                                                         ReDim vArray(nCount)
                                                         mArray = vArray
                         End Select
                         
                         For i = 0 To nCount
                                                         mArray(i) = ValArray(i)
                         Next i
                         
                         CreateArray = mArray
End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-8 06:09 , Processed in 0.435743 second(s), 72 queries .

© 2020-2025 乐筑天下

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