使用选择集

选择集可以由单个对象组成,也可以是一个更复杂的编组:例如特定图层的对象集。 在命令启动前通过pick first选择或者执行命令后提示选择对象要注用户在图形区域中选择对象后创建的选择集是最具代表性的。

选择集不是持久的,如果需要保留选择集,用于在多个命令之间或将来使用,就必须创建一个自定义的字典并记录对象 ID,并将选择集当作一个记录创建。

获得PickFirst选择集
在图形区域中选择对象
添加或合并多个选择集
定义选择集过滤规则
从选择集中移除对象

获得PickFirst选择集

PickFirst 选择集是在先选择对象后启动命令的时候创建的。为了获得 PickFirst 选择集的对象,必须满足某些条件,这些条件是:

SetImpliedSelection 方法用于清除当前的 PickFirst 选择集。

获得 Pickfirst 选择集

本例显示 PickFirst 选择集中的对象的数量然后要求用户选择另外的对象。在请求用户选择对象前,使用 SetImpliedSelection 方法将当前 PickFirst 选择集清空了。

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)> _
Public Sub CheckForPickfirstSelection()'' 获得当前文档   Get the current documentDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 获得 PickFirst 选择集    Get the PickFirst selection setDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.SelectImplied()Dim acSSet As SelectionSet'' 如果提示状态是 OK,那么对象在命令启动前已经被选择了   If the prompt status is OK, objects were selected before'' the command was startedIf acSSPrompt.Status = PromptStatus.OK ThenacSSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects in Pickfirst selection: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects in Pickfirst selection: 0")End If'' 清除 PickFirst 选择集    Clear the PickFirst selection setDim idarrayEmpty() As ObjectIdacDocEd.SetImpliedSelection(idarrayEmpty)'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaacSSPrompt = acDocEd.GetSelection()'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenacSSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects selected: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects selected: 0")End If
End Sub

在图形区域中选择对象

在屏幕上提示选择对象并遍历选择集

本例提示用户选择对象,然后修改每个选中对象的颜色为绿色或 AutoCAD 颜色索引为 3。

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("SelectObjectsOnscreen")> _
Public Sub SelectObjectsOnscreen()'' 获得当前文档和数据库   Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''启动一个事务   Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection()'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenDim acSSet As SelectionSet = acSSPrompt.Value'' 遍历选择集中的对象   Step through the objects in the selection setFor Each acSSObj As SelectedObject In acSSet'' 检查以确定返回的 SelectedObject 对象是有效的     Check to make sure a valid SelectedObject object was returnedIf Not IsDBNull(acSSObj) Then'' 以写的方式打开选择的对象   Open the selected object for writeDim acEnt As Entity = acTrans.GetObject(acSSObj.ObjectId, _OpenMode.ForWrite)If Not IsDBNull(acEnt) Then'' 修改对象的颜色为绿色   Change the object's color to GreenacEnt.ColorIndex = 3End IfEnd IfNext'' 保存新对象到数据库中   Save the new object to the databaseacTrans.Commit()End If'' 销毁事务  Dispose of the transactionEnd Using
End Sub

添加或合并多个选择集

用户可以合并多个选择集,需要创建一个 ObjectIdCollection 对象,然后向其中添加多个选择集的对象的 ObjectID。除了添加 ObjectID 到 ObjectIdCollection 对象中,也可以移除 ObjectID。一旦所有 ObjectID 添加到 ObjectIdCollection 对象后,就可以遍历 ObjectID 集合并操作每一个需要的对象。

添加选择的对象到选择集中

本例提示用户选择对象两次然后合并两个选择集到一个独立的选择集中。

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("MergeSelectionSets")> _
Public Sub MergeSelectionSets()'' 获得当前文档的编辑器     Get the current document editorDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.GetSelection()Dim acSSet1 As SelectionSetDim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK Then'' Get the selected objectsacSSet1 = acSSPrompt.Value'' 添加选择的对象到 ObjectIDCollection 中   Append the selected objects to the ObjectIdCollectionacObjIdColl = New ObjectIdCollection(acSSet1.GetObjectIds())End If'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaacSSPrompt = acDocEd.GetSelection()Dim acSSet2 As SelectionSet'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenacSSet2 = acSSPrompt.Value'' 检查 ObjectIDCollection 的大小,如果为 0 就重新初始化它    Check the size of the ObjectIdCollection, if zero, then initialize itIf acObjIdColl.Count = 0 ThenacObjIdColl = New ObjectIdCollection(acSSet2.GetObjectIds())ElseDim acObjId As ObjectId'' 遍历第二个选择集   Step through the second selection setFor Each acObjId In acSSet2.GetObjectIds()'' 添加每个对象 ID 到 ObjectIDCollection 中    Add each object id to the ObjectIdCollectionacObjIdColl.Add(acObjId)NextEnd IfEnd IfApplication.ShowAlertDialog("Number of objects selected: " & _acObjIdColl.Count.ToString())
End Sub

定义选择集过滤规则

用户可以使用选择过滤器来限制选择和添加到选择集中的对象。选择集过滤器列表可以通过特性或类型用于过滤选择的对象。例如,可能只想选择仅为蓝色的对象,或只在某个图层上的对象。还可以在过滤器列表中组合选择条件,例如,可以创建一个选择过滤器来限制选择的蓝色的圆且位置指定图层上的图案。选择过滤器可以作为参数指定给在“在图形区域中选择对象”部分中不同的选择方法。

注意过滤功能只能识别明确指定给对象的值,而不能识别从图层继承的。例如,如果对象的 linetype 属性设置成 ByLayer 并且图层指定设置为隐藏线型;过滤对象指定为隐藏线型将不能选择那些 LineType 属性设置为 ByLayer 的对象。

使用选择集过滤器定义选择集规则
在选择集过滤器中指定多个条件
添加复杂的过滤器列表条件
在选择器过滤器条件中使用通配符
过滤扩展数据

使用选择集过滤器定义选择集规则

选择过滤器列表由成对的以 TypedValues 形式的参数组成。TypedValue 的 第一个参数标识过滤器的类型(例如对象),第二个参数指定要过滤的值(例如圆)。过滤器类型是指定使用哪种过滤器的 DXF 组码。下面列出了一些最常用的过滤器类型。

常用过滤器的 DXF 组码

Public Enum DxfCode
        Invalid = -9999
        XDictionary = -6
        PReactors = -5
        [Operator] = -4
        XDataStart = -3
        FirstEntityId = -2
        HeaderId = -2
        [End] = -1
        Start = 0
        XRefPath = 1
        Text = 1
        SymbolTableRecordName = 2
        MlineStyleName = 2
        SymbolTableName = 2
        AttributeTag = 2
        BlockName = 2
        ShapeName = 2
        DimPostString = 3
        Description = 3
        TextFontFile = 3
        LinetypeProse = 3
        DimStyleName = 3
        AttributePrompt = 3
        SymbolTableRecordComments = 4
        CLShapeName = 4
        DimensionAlternativePrefixSuffix = 4
        TextBigFontFile = 4
        DimensionBlock = 5
        Handle = 5
        LinetypeName = 6
        DimBlk1 = 6
        TextStyleName = 7
        DimBlk2 = 7
        LayerName = 8
        CLShapeText = 9
        XCoordinate = 10
        YCoordinate = 20
        ZCoordinate = 30
        Elevation = 38
        Thickness = 39
        TxtSize = 40
        ViewportHeight = 40
        Real = 40
        ViewportAspect = 41
        ViewWidth = 41
        TxtStyleXScale = 41
        ViewLensLength = 42
        TxtStylePSize = 42
        ViewFrontClip = 43
        ShapeXOffset = 44
        ViewBackClip = 44
        ViewHeight = 45
        ShapeYOffset = 45
        ShapeScale = 46
        PixelScale = 47
        LinetypeScale = 48
        LinetypeElement = 49
        MlineOffset = 49
        DashLength = 49
        ViewportSnapAngle = 50
        Angle = 50
        ViewportTwist = 51
        Visibility = 60
        LayerLinetype = 61
        Color = 62
        HasSubentities = 66
        ViewportVisibility = 67
        ViewportActive = 68
        ViewportNumber = 69
        Int16 = 70
        TxtStyleFlags = 71
        RegAppFlags = 71
        ViewMode = 71
        LinetypeAlign = 72
        CircleSides = 72
        LinetypePdc = 73
        ViewportZoom = 73
        ViewportIcon = 74
        ViewportSnap = 75
        ViewportGrid = 76
        ViewportSnapStyle = 77
        ViewportSnapPair = 78
        Int32 = 90
        Subclass = 100
        EmbeddedObjectStart = 101
        ControlString = 102
        DimVarHandle = 105
        UcsOrg = 110
        UcsOrientationX = 111
        UcsOrientationY = 112
        XReal = 140
        ViewBrightness = 141
        ViewContrast = 142
        Int64 = 160
        XInt16 = 170
        NormalX = 210
        NormalY = 220
        NormalZ = 230
        XXInt16 = 270
        Int8 = 280
        RenderMode = 281
        Bool = 290
        XTextString = 300
        BinaryChunk = 310
        ArbitraryHandle = 320
        SoftPointerId = 330
        HardPointerId = 340
        SoftOwnershipId = 350
        HardOwnershipId = 360
        LineWeight = 370
        PlotStyleNameType = 380
        PlotStyleNameId = 390
        ExtendedInt16 = 400
        LayoutName = 410
        ColorRgb = 420
        ColorName = 430
        Alpha = 440
        GradientObjType = 450
        GradientPatType = 451
        GradientTintType = 452
        GradientColCount = 453
        GradientAngle = 460
        GradientShift = 461
        GradientTintVal = 462
        GradientColVal = 463
        GradientName = 470
        Comment = 999
        ExtendedDataAsciiString = 1000
        ExtendedDataRegAppName = 1001
        ExtendedDataControlString = 1002
        ExtendedDataLayerName = 1003
        ExtendedDataBinaryChunk = 1004
        ExtendedDataHandle = 1005
        ExtendedDataXCoordinate = 1010
        ExtendedDataWorldXCoordinate = 1011
        ExtendedDataWorldXDisp = 1012
        ExtendedDataWorldXDir = 1013
        ExtendedDataYCoordinate = 1020
        ExtendedDataWorldYCoordinate = 1021
        ExtendedDataWorldYDisp = 1022
        ExtendedDataWorldYDir = 1023
        ExtendedDataZCoordinate = 1030
        ExtendedDataWorldZCoordinate = 1031
        ExtendedDataWorldZDisp = 1032
        ExtendedDataWorldZDir = 1033
        ExtendedDataReal = 1040
        ExtendedDataDist = 1041
        ExtendedDataScale = 1042
        ExtendedDataInteger16 = 1070
        ExtendedDataInteger32 = 1071
    End Enum

组码

说明

-5

APP:persistent reactor 链表

-4

APP:条件运算符(仅用于 ssget)

-3

APP:扩展数据 (XDATA) 标记(固定)

-2

APP:图元名引用 (固定)

-1

APP:图元名。每次打开图形时它都改变,且不被保存。(固定)

0

表示图元类型的文字字符串(固定)

1

图元的主要文字值

2

名称(属性标记、块名称等)

3-4

其他的文字值或名称值

5

图元句柄。最多 16 位十六进制数字的文字字符串(固定)

6

线型名(固定)

7

文字样式名(固定)

8

图层名(固定)

9

DXF:变量名标识符(仅用于 DXF 文件的 HEADER 区域)。

10

主要点。此点为直线或文字图元的起点,圆的圆心等等。 
DXF:主要点的 X 值(其后为 Y 和 Z 值的组码 20 和 30) APP:三维点(三个实数构成的表)

11-18

其他点。 
DXF:其他点的 X 值(其后为 Y 和 Z 值的组码 21-28 和 31-38) APP:三维点(三个实数构成的表)

20, 30

DXF:主要点的 Y 和 Z 值

21-28, 31-37

DXF:其他点的 Y 和 Z 值

38

DXF:如果非零,则为图元的标高

39

如果非零,则为图元的厚度(固定)

40-48

浮点值(文字高度、比例因子 端点高度等)

48

线型比例。浮点标量值。缺省值适用于所有图元类型。

49

可重复的浮点值。一个图元中的可变长度表(例如 LTYPE 表中的虚线长度)中可出现多个组码 49。组码 7x 总是在第一个组码 49 前出现,用于指定表的长度。

50-58

角度(在 DXF 文件中单位为度,在 AutoLISP 和 ARX 应用程序中单位为弧度)。

60

表示图元可见性的整数值。不赋值或值为 0 时表示可见;为 1 时表示不可见。

62

颜色代码(固定)

66

“图元跟随”标志(固定)

67

空间,即模型空间或图纸空间(固定)

68

APP:表示视口打开但不可见、未激活或者关闭。

69

APP:视口标识数字。

70-78

整数值,如重复部分的计数器、标志位或模式等。

90-99

32 位整数值

100

子类数据标记(把继承下来的类名当作字符串)。由具体类继承下来的所有对象和图元类都必须有此项。此标记用于分离某个对象中由不同的类定义的数据。它也满足从 ARX 继承下来的每个独立的具体类的 DXF 命名需要(请参见子类标记)。

102

控制字符串,其后为“{<任意名称>”或 "}"。除了字符串必须以 "{" 开始外,它与外部数据组码 1002 类似。其后可跟任意字符串,且此字符串的解释取决于应用程序。另一个可用的控制字符串为 "}",它标识组的结束。如上所述,除了在执行图形核查操作期间外 AutoCAD 一般不解释这些字符串;它们仅用于应用程序。

105

DIMVAR 符号表条目对象句柄。

210

拉伸方向(固定)。 
DXF:拉伸方向的 X 值 APP:三维拉伸方向矢量

220, 230

DXF:拉伸方向的 Y 和 Z 值

280-289

8 位整数值

290-299

布尔标志值

300-309

任意的文字字符串

310-319

任意二进制数据组,与组码 1004 具有相同表示法和限制:最长为 254 个字符的十六进制字符串表示最长为 127 个字节的数据数据组。

320-329

任意对象句柄。句柄值保留原样,在执行 INSERT 和 XREF 操作时它们不被转化。

330-339

软键指针句柄。任意指向同一 DXF 文件或图形中的其他对象的软键指针,在执行 INSERT 和 XREF 操作时被转化。

340-349

硬键指针句柄。任意指向同一 DXF 文件或图形中的其他对象的硬键指针,在执行 INSERT 和 XREF 操作时被转化。

350-359

软键从属句柄。链接到同一 DXF 文件或图形中其他对象的任意软键从属链接,在执行 INSERT 和 XREF 操作时被转化。

360-369

硬键从属句柄。链接到同一 DXF 文件或图形中其他对象的任意硬键从属链接,在执行 INSERT 和 XREF 操作时被转化。

370-379

线宽枚举值 (AcDb::LineWeight)。作为短整数保存并移动。自定义非图元对象可使用全部范围组码,但图元类只能在其描述中使用371-379的DXF组码,因为AutoCAD和AutoLISP都总是采用370组码作为图元的线宽。在这里370组码就象其它的“公用”图元字段一样。

380-389

打印样式名类型枚举(AcDb::PlotStyleNameType)。作为短整数保存并移动。自定义非图元对象可使用全部范围组码,但图元类只能在其描述中使用381-389的DXF组码,其原因与上面的线宽范围相同。

390-399

描述打印样式名对象的句柄值,本质上是硬指针,但它有一不同的范围以使向后兼容能容易地处理。作对象的ID(在DXF文件中为句柄)和在AutoLISP中为特殊的类型保存并移动。自定义非图元对象可使用全部范围组码,但图元类只能在其描述中使用391-399的DXF组码,其原因与上面的线宽范围相同。

400-409

16位整数

410-419

字符串

999

DXF:999 组码表示其后为注释字符串行。DXFOUT 不在 DXF 输出文件中包括此组;DXFIN 能识别词组码,但忽略其后的注释。通过 999 组码,用户可以在所编辑的 DXF 文件中包括注释。

1000

扩展数据中的 ASCII 字符串(最长 255 个字节)。

1001

扩展数据的已注册应用程序名(ASCII 字符串,最长 31 个字节)。

1002

扩展数据控制字符串("{" 或 "}")。

1003

扩展数据图层名。

1004

扩展数据中的字节数据组(最长 127 字节)。

1005

扩展数据中的图元句柄。文字字符串,最多 16 位十六进制数字。

1010

扩展数据中的点 
DXF:X 值(其后跟组码 1020 和 1030) APP:三维点

1020, 1030

DXF:点的 Y 和 Z 值

1011

扩展数据中的三维世界空间位置
DXF:X 值(其后跟组码 1021 和 1031):三维点

1021, 1031

DXF:世界空间位置的 Y 和 Z 值。

1012

扩展数据中的三维世界空间位移
DXF:X 值(其后跟组码 1022 和 1032):三维矢量

1022, 1032

DXF:世界空间位移的 Y 和 Z 值

1013

扩展数据中的三维世界空间方向 
DXF:X 值(其后跟组码 1022 和 1032) APP:三维矢量

1023, 1033

DXF:世界空间方向的 Y 和 Z 值

1040

扩展数据浮点值。

1041

扩展数据距离值。

1042

扩展数据比例因子。

1070

扩展数据 16 位符号整数。

1071

扩展数据 32 位符号整数。

下面的代码提示用户选择要包含在选择集中的对象,并过滤掉除圆之外的所有对象。

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("FilterSelectionSet")> _
Public Sub FilterSelectionSet()'' 获得当前文档的编辑器     Get the current document editorDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 创建一个 TypedValue 数组,用于定义过滤条件    Create a TypedValue array to define the filter criteriaDim acTypValAr(0) As TypedValueacTypValAr.SetValue(New TypedValue(DxfCode.Start, "CIRCLE"), 0)'' 赋值过滤条件给 SelectionFilter 对象    Assign the filter criteria to a SelectionFilter objectDim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.GetSelection(acSelFtr)'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenDim acSSet As SelectionSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects selected: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects selected: 0")End If
End Sub

在选择集过滤器中指定多个条件

一个选择集过滤器可以包含适用于多个属性或对象的过滤条件。声明的数组应该包含足够多的元素来表示每个条件。

以下示例指定了两个选择对象的过滤条件:对象必须是圆,并且必须在图层 0 上。

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("FilterBlueCircleOnLayer0")> _
Public Sub FilterBlueCircleOnLayer0()'' 获得当前文档的编辑器     Get the current document editorDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 创建一个 TypedValue 数组,用于定义过滤条件    Create a TypedValue array to define the filter criteriaDim acTypValAr(2) As TypedValueacTypValAr.SetValue(New TypedValue(DxfCode.Color, 5), 0)acTypValAr.SetValue(New TypedValue(DxfCode.Start, "CIRCLE"), 1)acTypValAr.SetValue(New TypedValue(DxfCode.LayerName, "0"), 2)'' 赋值过滤条件给 SelectionFilter 对象    Assign the filter criteria to a SelectionFilter objectDim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.GetSelection(acSelFtr)'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenDim acSSet As SelectionSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects selected: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects selected: 0")End If
End Sub

添加复杂的过滤器列表条件

如果指定多个选择条件,AutoCAD 将假设选定对象必须符合所有条件。但用户可以按照其他方式来指定条件。对于数字项,用户可以指定关系运算(例如,圆的半径必须大于或等于 5.0);对于所有项,用户可以指定逻辑运算(例如 Text 或 Mtext)。

使用 -4 DXF 组码或 DxfCode.Operator 常量来指示过滤器中的关系运算符。以字符串的形式来指定运算符。下表显示了可以使用的关系运算符:

过滤器列表中的逻辑运算符也由 -4 组代码或 DxfCode.Operator 常量表示,运算符为字符串,但必须组对。运算符以小于号开始 (<),以大于号结束 (>)。下表列出了可以在选择集过滤中使用的逻辑运算符。

选择集过滤器列表的逻辑编组运算符

开始 运算符

包含的内容

结束 运算符

"<AND"

一个或多个运算对象

"AND>"

"<OR"

一个或多个运算对象

"OR>"

"<XOR"

两个运算对象

"XOR>"

"<NOT"

一个运算对象

"NOT>"

‘’以下示例指定选择半径大于或等于 5.0 的圆:

Dim acTypValAr(2) As TypedValue
  acTypValAr.SetValue(New TypedValue(DxfCode.Start, "CIRCLE"), 0)
  acTypValAr.SetValue(New TypedValue(DxfCode.Operator, ">="), 1)
  acTypValAr.SetValue(New TypedValue(40, 5), 2)

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("FilterRelational")> _
Public Sub FilterRelational()'' 获得当前文档的编辑器     Get the current document editorDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 创建一个 TypedValue 数组,用于定义过滤条件    Create a TypedValue array to define the filter criteriaDim acTypValAr(2) As TypedValueacTypValAr.SetValue(New TypedValue(DxfCode.Start, "CIRCLE"), 0)acTypValAr.SetValue(New TypedValue(DxfCode.Operator, ">="), 1)acTypValAr.SetValue(New TypedValue(40, 5), 2)'' 赋值过滤条件给 SelectionFilter 对象    Assign the filter criteria to a SelectionFilter objectDim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.GetSelection(acSelFtr)'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenDim acSSet As SelectionSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects selected: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects selected: 0")End If
End Sub

在选择器过滤器条件中使用通配符

过滤器列表中的符号名称和字符串可以包含通配符模式。

下表显示了 AutoCAD 能够识别的通配符以及每个通配符在上下文字符串中的含义:

通配符

字符

说明

#?(pound 磅值符号)

匹配任意一个数字

@?(at 在符号)

匹配任意一个字母

.?(period 句点)

匹配任意一个非字母数字的字符

*?(asterisk 星号)

匹配任何字符顺序,包括空字符,可用于搜索模式中的任何位置:在开头、在中间或在结尾

??(question mark 问号)

匹配任意一个字符

~?(tilde 波浪号)

如果它是模式中的的第一个字符,则匹配除此模式以外的任意内容

[...]

匹配方括号中的任意一个字符

[~...]

匹配不在方括号中的任意一个字符

-?(hyphen 连字符)

用在方括号中,指定一个字符的取值范围

,?(comma 逗号)

分隔两个模式

`?(reverse quote 反引号)

避开特殊的字符(直接读取下一个字符)

使用单引号 (`) 表示下一个字符不是通配符,而是普通字符。例如,要指定仅将命名为“*U2”的匿名块包含在选择集中,请使用“`*U2”。

选择包含指定词语的 Mtext

以下代码将选择条件定义为选择所有文字字符串中出现“The”的多行文字。

'' 创建一个 TypedValue 数组,用于定义过滤条件
  Dim acTypValAr(1) As TypedValue
  acTypValAr.SetValue(New TypedValue(DxfCode.Start, "MTEXT"), 0)
  acTypValAr.SetValue(New TypedValue(DxfCode.Text, "*The*"), 1)

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("FilterMtextWildcard")> _
Public Sub FilterMtextWildcard()'' 获得当前文档的编辑器     Get the current document editorDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 创建一个 TypedValue 数组,用于定义过滤条件    Create a TypedValue array to define the filter criteriaDim acTypValAr(1) As TypedValueacTypValAr.SetValue(New TypedValue(DxfCode.Start, "MTEXT"), 0)acTypValAr.SetValue(New TypedValue(DxfCode.Text, "*The*"), 1)'' 赋值过滤条件给 SelectionFilter 对象    Assign the filter criteria to a SelectionFilter objectDim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.GetSelection(acSelFtr)'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenDim acSSet As SelectionSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects selected: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects selected: 0")End If
End Sub

过滤扩展数据

外部应用程序可以向 AutoCAD 对象附加数据,例如文字字符串、数值、三维点、距离和图层名。这种数据称为外部数据或 Xdata。用户可以过滤包含指定的应用程序外部数据的图元。

选择包含外部数据的圆

下例将通过过滤查找出包含通过“MY_APP”应用程序添加的外部数据的圆:

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput<CommandMethod("FilterXdata")> _
Public Sub FilterXdata()'' 获得当前文档的编辑器     Get the current document editorDim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor'' 创建一个 TypedValue 数组,用于定义过滤条件    Create a TypedValue array to define the filter criteriaDim acTypValAr(1) As TypedValueacTypValAr.SetValue(New TypedValue(DxfCode.Start, "Circle"), 0)acTypValAr.SetValue(New TypedValue(DxfCode.ExtendedDataRegAppName, _"MY_APP"), 1)'' 赋值过滤条件给 SelectionFilter 对象    Assign the filter criteria to a SelectionFilter objectDim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)'' 要求在图形区域中选择对象    Request for objects to be selected in the drawing areaDim acSSPrompt As PromptSelectionResultacSSPrompt = acDocEd.GetSelection(acSelFtr)'' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK, objects were selectedIf acSSPrompt.Status = PromptStatus.OK ThenDim acSSet As SelectionSet = acSSPrompt.ValueApplication.ShowAlertDialog("Number of objects selected: " & _acSSet.Count.ToString())ElseApplication.ShowAlertDialog("Number of objects selected: 0")End If
End Sub

从选择集中移除对象

创建选择集之后,用户可以使用选定对象的 ObjectID 列表。选择集不允许从它里面添加或删除 ObjectID,但可以使用一个 ObjectIDCollection 对象合并多个选择集并将它当作一个对象使用。可以从 ObjectIDCollection 对象上添加和移除 ObjectID。使用 Remove 或 RemoveAt 方法从一个 ObjectIDCollection 对象中移除 ObjectID。

autoCAD 使用选择集相关推荐

  1. AutoCAD VBA选择集操作

    AutoCAD VBA选择集操作,示例代码如下. Public Sub Test() Dim pt1(0 To 2) As Double Dim pt2(0 To 2) As Double Dim p ...

  2. AutoCAD VBA 通过选择集 删除图层上所有对象和图层

    AutoCAD VBA 通过选择集 删除图层上所有对象和图层 '删除图层上所有对象 Function DelAllInLayer(ByVal LName As String)     'On Erro ...

  3. CAD中的选择集过滤----有条件选择AutoCAD实体

    转载自:http://www.cnblogs.com/jdmei520/articles/1326120.html 一.选择集过滤时的使用方式如下: Object 指使用SelectionSet这个方 ...

  4. 03-03 创建和编辑AutoCAD实体(三) 使用选择集(2)

    4.DefineRules for Selection Filters定义选择集过滤器规则 You can limit which objects are selectedand added to a ...

  5. AutoCAD .Net二次开发之Editor选择集

    AutoCAD .Net二次开发之Editor选择集 PickFirst选择集 一般选择集 选择集过滤SelectionFilter Editor的路径: Autodesk.AutoCAD.Appli ...

  6. 基于C#的AutoCAD二次开发之获取用户输入信息、选择集、访问CAD内部命令

    基于C#的AutoCAD二次开发之获取用户输入信息.选择集.访问CAD内部命令 在CAD创建图形对象时,经常需要和用户进行交互,例如:直线创建时需要用户输入起点和终点(或长度)信息,复制对象时需要指定 ...

  7. CAD二次开发之选择集过滤

    一.选择集过滤时的使用方式如下: Object 指使用SelectionSet这个方法适用的对象 1) object.Select Mode[, Point1][, Point2][, FilterT ...

  8. (31)ObjectARX2015 + vs2012选择集

    1. 说明         在 ObjectARX 开发过程中,经常需要用户和 AutoCAD 之间进行交互操作,除了前面介绍的acedGetXX系列函数之外,选择集是AutoCAD和用户交互操作的重 ...

  9. CAD二次开发(c#)利用选择集获取标注尺寸

    1.目的 本文的目的是利用C#中选择集GetSelection函数得到CAD中标注尺寸 2.实现代码 using Autodesk.AutoCAD.ApplicationServices; using ...

  10. AutoCAD关于选择的一些技巧(如何高效地框选)

    基本选择方式和技巧 1.用户可以用鼠标一个一个地选择目标,选择的目标逐个地添加到选择集中. 2.用户也可以通过鼠标直接框选:通过指定对角点定义矩形区域来选择对象.指定第一个角点之后:从左到右拖动光标创 ...

最新文章

  1. unity片元着色器中获取屏幕坐标_Unity踩坑笔记(持续更新)
  2. 【struts2】struts2实现自定义数据类型转换器
  3. Linux入门笔记——cat、sort、uniq、wc、head、tail、tee
  4. ${pageContext.request.contextURI} 无效
  5. java连接SqlServer2000类,比较完整,比较强大
  6. ASP.NET-Request对象
  7. python 读取yml文件_小白入门篇(一):Python基础之文件读取的讲解,记得收藏...
  8. 51单片机c语言秒表,51单片机秒表C程序
  9. html5 判断手机横竖屏,移动端判断横竖屏的5种解决方案
  10. 平面波超声成像 (Matlab Filed II仿真)
  11. 软件测试面试如何正确谈论薪资?
  12. 亚马逊显示在售商品为0怎么办?亚马逊新品货还没到就在售了
  13. Mac系统升级后,按大小写键没反应了,切换大小写的灯不亮
  14. offer_II_109开密码锁
  15. 悲观锁 乐观锁的原理及应用场景
  16. ACP敏捷8.人的因素.敏捷领导力和敏捷教练
  17. 九峰影业创始人_乾社成员雅集第二辑
  18. PTA(每日一题)7-75 某校几人
  19. 程序员苏享茂:怎样才能遇到对的人?
  20. 丹麦奥尔堡大学计算机系博士,关于选拔博士研究生攻读上海大学-丹麦奥尔堡大学双博士学位的通知...

热门文章

  1. 前端实现自定义表情【微信表情】
  2. F28335中断系统
  3. 如何测试计算机u口速度慢,如何解决电脑USB接口识别U盘速度缓慢
  4. el-select 下拉框样式修改
  5. 二叉排序树和二叉平衡树
  6. ||分享一些百度云下载不限速神器||
  7. Java微服务架构图(仅供参考,不一定适用)
  8. 哔哩哔哩中缓存的视频和音频如何合并
  9. PyCharm专业版破解
  10. [计算机系统-01] 计算机系统漫游