CAD Select方法如何设置FilterType, FilterData

更新时间:2024-01-12 21:14:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

根据AutoCAD2004 VBA的说明,Select方法的描述为: object.Select Mode[, Point1][, Point2][, FilterType][, FilterData] 如选择所有的圆,可以使用如下代码: Dim gpCode(0) As Integer Dim dataValue(0) As Variant gpCode(0) = 0

dataValue(0) = \

ssetObj.Select acSelectionSetAll, , , gpCode, dataValue

我的问题就是,如果要选择其它的对象,如何设置FilterType, FilterData?比如对象为 Ployline时。

哪位大侠能不能给一个关于此类设置的总结啊? ============================= Mode

============================= acSelectionSetWindow = 0

Selects all objects completely inside a rectangular area whose corners are defined by Point1 and Point2. And meets condition of FilterType and FilterData

acSelectionSetCrossing = 1

Selects objects within and crossing a rectangular area whose corners are defined by Point1 and Point2.And meets condition of FilterType and FilterData acSelectionSetFence = 2

Selects all objects completely inside Fence area whose are defined by Points. And meets condition of FilterType and FilterData acSelectionSetPrevious = 3

Selects the most recent selection set. This mode is ignored if you switch between paper space and model space and attempt to use the selection set. And meets condition of FilterType and FilterData acSelectionSetLast = 4

Selects the most recently created visible objects. And meets condition of FilterType and FilterData acSelectionSetAll = 5

Selects all objects. And meets condition of FilterType and FilterData acSelectionSetWindowPolygon = 6 acSelectionSetCrossingPolygon = 7

***************************************************************************** 参考:

'------------------------------------------------------------------ Option Explicit

'------------------------------------------------------------------ Public Sub Sample()

On Error GoTo ERROR_HANDLER Dim ssetObj As AcadSelectionSet

Set ssetObj = CreateSSet(\

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(1) = -4

dataValue(1) = \ gpCode(2) = 0

dataValue(2) = \ gpCode(3) = -4

dataValue(3) = \

gpCode(4) = -4

dataValue(4) = \ gpCode(5) = 0

dataValue(5) = \YLINE\ gpCode(6) = -4

dataValue(6) = \

gpCode(7) = -4

dataValue(7) = \ gpCode(8) = 0

dataValue(8) = \YLINE\ gpCode(9) = -4

dataValue(9) = \

gpCode(10) = -4

dataValue(10) = \

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 \ 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 \ Resume ERR_END

ERR_END: End Function

*********************************************************************** 过滤器列表由成对的参数组成。第一个参数标识过滤器的类型(例如对象),第二个参数指

要过滤的值(例如圆)。过滤器类型是指定使用哪种过滤器的 DXF 组码。下面列出了一些最常

用的过滤器类型。

================================================================================

常用过滤器的 DXF 组码 <请详查DXF手册>

-------------------------------------------------------------------------------- DXF组码 过滤器类型 缺省值

-------------------------------------------------------------------------------- -1 实体名称(随图档的开启而不同) 不可省略 -------------------------------------------------------------------------------- 0 对象类型(字符串)

例如“Line”、“Circle”、“Arc”等。 不可省略 -------------------------------------------------------------------------------- 2 对象名(字符串) 不可省略 命名对象的表(给定)名称。

-------------------------------------------------------------------------------- 5 处理码 不可省略

--------------------------------------------------------------------------------

6 线型名称(若线型不为bylayer,此群码值会出现) bylayer -------------------------------------------------------------------------------- 8 图层名(字符串) 0 例如“图层 0”。

-------------------------------------------------------------------------------- 48 线型比例(选择) 1.0

-------------------------------------------------------------------------------- 60 对象可见性(整数)

使用 0 = 可见,1 = 不可见。

-------------------------------------------------------------------------------- 62 颜色编号(整数) bylayer 范围 0 到 256 内的数字索引值。

零表示 BYBLOCK。256表示BYLAYER。 负值表示图层被关闭。

-------------------------------------------------------------------------------- 67 模型/图纸空间标识符(整数) 0 使用 0 或省略=模型空间,1=图纸空间。

================================================================================

物件是CIRCLE OR 物件是LINE FilterData FilterType -4 0 0 -4

(物件是CIRCLE OR 物件是LINE) AND 圖層位於DIM層

FilterData DIM AND> FilterType -4 -4 0 0 -4 8 -4

物件是CIRCLE OR 物件是LINE) AND NOT(圖層位於DIM層) FilterData AND> FilterType -4 -4 0 0 -4 -4 8 -4 -4

过滤器参数声明为数组,过滤器类型声明为整数,过滤器值声明为变量。每个过滤器类型都必

须与过滤器值成对出现。例如:

FilterType(0) = 0 ' 表示过滤器是对象类型FilterData(0) = \' 表示对象类型 是“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(\ FilterType(0) = 0

FilterData(0) = \ FilterType(1) = 8 FilterData(1) = \

sstext.SelectOnScreen FilterType, FilterData End Sub

在指定多个选择条件时,AutoCAD 会假设选定的对象必须符合每一个条件。但用户可以按照其

他方式来指定条件。对于数字项,用户可以指定关系运算(例如,圆的半径必须大于或等于 5.0);对于所有项,用户可以指定逻辑运算(例如 Text 或 Mtext)。

使用 -4 DXF 组码来指示过滤器规格中的关系运算符。以字符串的形式来指定运算符。下表显

示了可以使用的关系运算符:

=========================== 选择集过滤器列表的关系运算符 -------------------------- 运算符 说明

--------------------------

\任何情况(总为真) -------------------------- \等于

-------------------------- \不等于

-------------------------- \不等于

-------------------------- \不等于

-------------------------- \小于

-------------------------- \小于或等于 -------------------------- \大于

-------------------------- \大于或等于 --------------------------

\按位与 (AND,仅限于整数组) --------------------------

\按位屏蔽相等(仅限于整数组) ==========================

-4 组码也可以指定过滤器列表中的逻辑运算符,逻辑运算符是字符串但必须成对出现。运算符

以小于号开始 (<),以大于号结束 (>)。下表列出了可以在选择集过滤中使用的逻辑运算符。 ===================================== 选择集过滤器列表的逻辑编组运算符 -------------------------------------

开始运算符 包含的内容 结束运算符 -------------------------------------

\一个或多个运算对象 \ -------------------------------------

\一个或多个运算对象 \ -------------------------------------

\两个运算对象 \ -------------------------------------

\一个运算对象 \

=====================================

************************************************************************* 以下代码指定选择半径大于或等于 5.0 的圆: Sub Ch4_FilterRelational() Dim sstext As AcadSelectionSet Dim FilterType(2) As Integer Dim FilterData(2) As Variant

Set sstext = ThisDrawing.SelectionSets.Add(\ FilterType(0) = 0

FilterData(0) = \ 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(\ FilterType(0) = -4 FilterData(0) = \ FilterType(1) = 0

FilterData(1) = \ FilterType(2) = 0

FilterData(2) = \ FilterType(3) = -4

FilterData(3) = \

sstext.SelectOnScreen FilterType, FilterData End Sub

过滤器列表中的符号名称和字符串可以包含通配符模式。 下表显示了 AutoCAD 能够识别的通

配符以及每个通配符在上下文字符串中的含义:

===================================================================== 通配符

-------------------------------------------------------- 字符 定义

-------------------------------------------------------

# (磅值符号) 匹配任意一个数字 @ (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(\ FilterType(0) = 0

FilterData(0) = \ FilterType(1) = 1

FilterData(1) = \

sstext.SelectByPolygon mode, pointsArray, FilterType, FilterData End Sub

本文来源:https://www.bwwdw.com/article/jtqo.html

Top