autoCAD 使用选择集

您所在的位置:网站首页 cad怎么加选对象 autoCAD 使用选择集

autoCAD 使用选择集

2023-12-20 03:08| 来源: 网络整理| 查看: 265

使用选择集

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

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

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

获得PickFirst选择集

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

PICKFIRST 系统变量必须设置为 1必须给命令定义 UsePickSet 命令标记,用以通知命令要使用 Pickfirst 选择集调用 SelectImplied 方法获得 PickFirst 选择集

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

获得 Pickfirst 选择集

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

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

在图形区域中选择对象

GetSelection提示用户从屏幕中拾取对象。SelectAll在当前空间中选择所有对象,但不包括锁定或冻结的。SelectCrossingPolygon选择与通过指定点定义的多边形内部和相交的对象。多边形可以是任何形状但不能与它自己相交或接触。SelectCrossingWindow选择与通过两个点定义的区域内部和相交的对象。SelectFence选择与选择栅格相交的所有对象。栅格选择与多边形相交选择是相似的,不同的是栅格不能封闭,而且栅格可以与自己相交。SelectLast选择当前空间中最后创建的对象。SelectPrevious选择在前一个选择对象提示时选择的所有对象。SelectWindow选择完全包含在通过两个点定义的矩形内部的所有对象。SelectWindowPolygon选择完全包含在通过点定义的多边形里面的对象。多边形可以是任何形状但不能与它自己相交或接触。SelectAtPoint选择经过给定点的对象并将它们放到活动选择集中去。SelectByPolygon选择栅格内部的对象并将它们放到活动选择集中去。

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

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

Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.EditorInput _ Public Sub SelectObjectsOnscreen() '' 获得当前文档和数据库 Get the current document and database Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database ''启动一个事务 Start a transaction Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection() '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then Dim acSSet As SelectionSet = acSSPrompt.Value '' 遍历选择集中的对象 Step through the objects in the selection set For Each acSSObj As SelectedObject In acSSet '' 检查以确定返回的 SelectedObject 对象是有效的 Check to make sure a valid SelectedObject object was returned If Not IsDBNull(acSSObj) Then '' 以写的方式打开选择的对象 Open the selected object for write Dim acEnt As Entity = acTrans.GetObject(acSSObj.ObjectId, _ OpenMode.ForWrite) If Not IsDBNull(acEnt) Then '' 修改对象的颜色为绿色 Change the object's color to Green acEnt.ColorIndex = 3 End If End If Next '' 保存新对象到数据库中 Save the new object to the database acTrans.Commit() End If '' 销毁事务 Dispose of the transaction End 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 _ Public Sub MergeSelectionSets() '' 获得当前文档的编辑器 Get the current document editor Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult acSSPrompt = acDocEd.GetSelection() Dim acSSet1 As SelectionSet Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection() '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then '' Get the selected objects acSSet1 = acSSPrompt.Value '' 添加选择的对象到 ObjectIDCollection 中 Append the selected objects to the ObjectIdCollection acObjIdColl = New ObjectIdCollection(acSSet1.GetObjectIds()) End If '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area acSSPrompt = acDocEd.GetSelection() Dim acSSet2 As SelectionSet '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then acSSet2 = acSSPrompt.Value '' 检查 ObjectIDCollection 的大小,如果为 0 就重新初始化它 Check the size of the ObjectIdCollection, if zero, then initialize it If acObjIdColl.Count = 0 Then acObjIdColl = New ObjectIdCollection(acSSet2.GetObjectIds()) Else Dim acObjId As ObjectId '' 遍历第二个选择集 Step through the second selection set For Each acObjId In acSSet2.GetObjectIds() '' 添加每个对象 ID 到 ObjectIDCollection 中 Add each object id to the ObjectIdCollection acObjIdColl.Add(acObjId) Next End If End If Application.ShowAlertDialog("Number of objects selected: " & _ acObjIdColl.Count.ToString()) End Sub

定义选择集过滤规则

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

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

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

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

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

常用过滤器的 DXF 组码  

DXF 码                                       过滤器类型 0 (or DxfCode.Start)                   对象类型(字符串) 例如 直线、圆、圆弧等等。2 (or DxfCode.BlockName)        块名(字符串) 一个插入引用的块名 8 or (DxfCode.LayerName)        图层名(字符串)例如 Layer 060 (DxfCode.Visibility)               可见性(整数)使用 0 = 可见,1 = 不可见。 62 (or DxfCode.Color)                颜色编号(整数)范围 0 到 256 内的数字索引值。                                          零表示 BYBLOCK。256 表示 BYLAYER。负值表示图层被关闭。67                          模型/图纸空间标识符(整数)使用 0 或省略 = 模型空间,1 = 图纸空间。

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 _ Public Sub FilterSelectionSet() '' 获得当前文档的编辑器 Get the current document editor Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor '' 创建一个 TypedValue 数组,用于定义过滤条件 Create a TypedValue array to define the filter criteria Dim acTypValAr(0) As TypedValue acTypValAr.SetValue(New TypedValue(DxfCode.Start, "CIRCLE"), 0) '' 赋值过滤条件给 SelectionFilter 对象 Assign the filter criteria to a SelectionFilter object Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr) '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult acSSPrompt = acDocEd.GetSelection(acSelFtr) '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then Dim acSSet As SelectionSet = acSSPrompt.Value Application.ShowAlertDialog("Number of objects selected: " & _ acSSet.Count.ToString()) Else Application.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 _ Public Sub FilterBlueCircleOnLayer0() '' 获得当前文档的编辑器 Get the current document editor Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor '' 创建一个 TypedValue 数组,用于定义过滤条件 Create a TypedValue array to define the filter criteria Dim acTypValAr(2) As TypedValue acTypValAr.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 object Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr) '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult acSSPrompt = acDocEd.GetSelection(acSelFtr) '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then Dim acSSet As SelectionSet = acSSPrompt.Value Application.ShowAlertDialog("Number of objects selected: " & _ acSSet.Count.ToString()) Else Application.ShowAlertDialog("Number of objects selected: 0") End If End Sub

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

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

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

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

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

开始 运算符

包含的内容

结束 运算符

""

""

""

""

 

‘’以下示例指定选择半径大于或等于 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 _ Public Sub FilterRelational() '' 获得当前文档的编辑器 Get the current document editor Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor '' 创建一个 TypedValue 数组,用于定义过滤条件 Create a TypedValue array to define the filter criteria 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) '' 赋值过滤条件给 SelectionFilter 对象 Assign the filter criteria to a SelectionFilter object Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr) '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult acSSPrompt = acDocEd.GetSelection(acSelFtr) '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then Dim acSSet As SelectionSet = acSSPrompt.Value Application.ShowAlertDialog("Number of objects selected: " & _ acSSet.Count.ToString()) Else Application.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 _ Public Sub FilterMtextWildcard() '' 获得当前文档的编辑器 Get the current document editor Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor '' 创建一个 TypedValue 数组,用于定义过滤条件 Create a TypedValue array to define the filter criteria Dim acTypValAr(1) As TypedValue acTypValAr.SetValue(New TypedValue(DxfCode.Start, "MTEXT"), 0) acTypValAr.SetValue(New TypedValue(DxfCode.Text, "*The*"), 1) '' 赋值过滤条件给 SelectionFilter 对象 Assign the filter criteria to a SelectionFilter object Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr) '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult acSSPrompt = acDocEd.GetSelection(acSelFtr) '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then Dim acSSet As SelectionSet = acSSPrompt.Value Application.ShowAlertDialog("Number of objects selected: " & _ acSSet.Count.ToString()) Else Application.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 _ Public Sub FilterXdata() '' 获得当前文档的编辑器 Get the current document editor Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor '' 创建一个 TypedValue 数组,用于定义过滤条件 Create a TypedValue array to define the filter criteria Dim acTypValAr(1) As TypedValue acTypValAr.SetValue(New TypedValue(DxfCode.Start, "Circle"), 0) acTypValAr.SetValue(New TypedValue(DxfCode.ExtendedDataRegAppName, _ "MY_APP"), 1) '' 赋值过滤条件给 SelectionFilter 对象 Assign the filter criteria to a SelectionFilter object Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr) '' 要求在图形区域中选择对象 Request for objects to be selected in the drawing area Dim acSSPrompt As PromptSelectionResult acSSPrompt = acDocEd.GetSelection(acSelFtr) '' 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected If acSSPrompt.Status = PromptStatus.OK Then Dim acSSet As SelectionSet = acSSPrompt.Value Application.ShowAlertDialog("Number of objects selected: " & _ acSSet.Count.ToString()) Else Application.ShowAlertDialog("Number of objects selected: 0") End If End Sub

 从选择集中移除对象

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3