autoCAD 使用选择集
使用选择集
选择集可以由单个对象组成,也可以是一个更复杂的编组:例如特定图层的对象集。 在命令启动前通过pick first选择或者执行命令后提示选择对象要注用户在图形区域中选择对象后创建的选择集是最具代表性的。
选择集不是持久的,如果需要保留选择集,用于在多个命令之间或将来使用,就必须创建一个自定义的字典并记录对象 ID,并将选择集当作一个记录创建。
获得PickFirst选择集
在图形区域中选择对象
添加或合并多个选择集
定义选择集过滤规则
从选择集中移除对象
获得PickFirst选择集
PickFirst 选择集是在先选择对象后启动命令的时候创建的。为了获得 PickFirst 选择集的对象,必须满足某些条件,这些条件是:
- PICKFIRST 系统变量必须设置为 1
- 必须给命令定义 UsePickSet 命令标记,用以通知命令要使用 Pickfirst 选择集
- 调用 SelectImplied 方法获得 PickFirst 选择集
SetImpliedSelection 方法用于清除当前的 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
- 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<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
本例提示用户选择对象两次然后合并两个选择集到一个独立的选择集中。
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
使用选择集过滤器定义选择集规则
在选择集过滤器中指定多个条件
添加复杂的过滤器列表条件
在选择器过滤器条件中使用通配符
过滤扩展数据
- DXF 码 过滤器类型
- 0 (or DxfCode.Start) 对象类型(字符串) 例如 直线、圆、圆弧等等。
- 2 (or DxfCode.BlockName) 块名(字符串) 一个插入引用的块名
- 8 or (DxfCode.LayerName) 图层名(字符串)例如 Layer 0
- 60 (DxfCode.Visibility) 可见性(整数)使用 0 = 可见,1 = 不可见。
- 62 (or DxfCode.Color) 颜色编号(整数)范围 0 到 256 内的数字索引值。
- 零表示 BYBLOCK。256 表示 BYLAYER。负值表示图层被关闭。
- 67 模型/图纸空间标识符(整数)使用 0 或省略 = 模型空间,1 = 图纸空间。
组码 |
说明 |
-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 |
主要点。此点为直线或文字图元的起点,圆的圆心等等。 |
11-18 |
其他点。 |
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 |
拉伸方向(固定)。 |
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 |
扩展数据中的点 |
1020, 1030 |
DXF:点的 Y 和 Z 值 |
1011 |
扩展数据中的三维世界空间位置 |
1021, 1031 |
DXF:世界空间位置的 Y 和 Z 值。 |
1012 |
扩展数据中的三维世界空间位移 |
1022, 1032 |
DXF:世界空间位移的 Y 和 Z 值 |
1013 |
扩展数据中的三维世界空间方向 |
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
使用 -4 DXF 组码或 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
autoCAD 使用选择集相关推荐
- AutoCAD VBA选择集操作
AutoCAD VBA选择集操作,示例代码如下. Public Sub Test() Dim pt1(0 To 2) As Double Dim pt2(0 To 2) As Double Dim p ...
- AutoCAD VBA 通过选择集 删除图层上所有对象和图层
AutoCAD VBA 通过选择集 删除图层上所有对象和图层 '删除图层上所有对象 Function DelAllInLayer(ByVal LName As String) 'On Erro ...
- CAD中的选择集过滤----有条件选择AutoCAD实体
转载自:http://www.cnblogs.com/jdmei520/articles/1326120.html 一.选择集过滤时的使用方式如下: Object 指使用SelectionSet这个方 ...
- 03-03 创建和编辑AutoCAD实体(三) 使用选择集(2)
4.DefineRules for Selection Filters定义选择集过滤器规则 You can limit which objects are selectedand added to a ...
- AutoCAD .Net二次开发之Editor选择集
AutoCAD .Net二次开发之Editor选择集 PickFirst选择集 一般选择集 选择集过滤SelectionFilter Editor的路径: Autodesk.AutoCAD.Appli ...
- 基于C#的AutoCAD二次开发之获取用户输入信息、选择集、访问CAD内部命令
基于C#的AutoCAD二次开发之获取用户输入信息.选择集.访问CAD内部命令 在CAD创建图形对象时,经常需要和用户进行交互,例如:直线创建时需要用户输入起点和终点(或长度)信息,复制对象时需要指定 ...
- CAD二次开发之选择集过滤
一.选择集过滤时的使用方式如下: Object 指使用SelectionSet这个方法适用的对象 1) object.Select Mode[, Point1][, Point2][, FilterT ...
- (31)ObjectARX2015 + vs2012选择集
1. 说明 在 ObjectARX 开发过程中,经常需要用户和 AutoCAD 之间进行交互操作,除了前面介绍的acedGetXX系列函数之外,选择集是AutoCAD和用户交互操作的重 ...
- CAD二次开发(c#)利用选择集获取标注尺寸
1.目的 本文的目的是利用C#中选择集GetSelection函数得到CAD中标注尺寸 2.实现代码 using Autodesk.AutoCAD.ApplicationServices; using ...
- AutoCAD关于选择的一些技巧(如何高效地框选)
基本选择方式和技巧 1.用户可以用鼠标一个一个地选择目标,选择的目标逐个地添加到选择集中. 2.用户也可以通过鼠标直接框选:通过指定对角点定义矩形区域来选择对象.指定第一个角点之后:从左到右拖动光标创 ...
最新文章
- unity片元着色器中获取屏幕坐标_Unity踩坑笔记(持续更新)
- 【struts2】struts2实现自定义数据类型转换器
- Linux入门笔记——cat、sort、uniq、wc、head、tail、tee
- ${pageContext.request.contextURI} 无效
- java连接SqlServer2000类,比较完整,比较强大
- ASP.NET-Request对象
- python 读取yml文件_小白入门篇(一):Python基础之文件读取的讲解,记得收藏...
- 51单片机c语言秒表,51单片机秒表C程序
- html5 判断手机横竖屏,移动端判断横竖屏的5种解决方案
- 平面波超声成像 (Matlab Filed II仿真)
- 软件测试面试如何正确谈论薪资?
- 亚马逊显示在售商品为0怎么办?亚马逊新品货还没到就在售了
- Mac系统升级后,按大小写键没反应了,切换大小写的灯不亮
- offer_II_109开密码锁
- 悲观锁 乐观锁的原理及应用场景
- ACP敏捷8.人的因素.敏捷领导力和敏捷教练
- 九峰影业创始人_乾社成员雅集第二辑
- PTA(每日一题)7-75 某校几人
- 程序员苏享茂:怎样才能遇到对的人?
- 丹麦奥尔堡大学计算机系博士,关于选拔博士研究生攻读上海大学-丹麦奥尔堡大学双博士学位的通知...