使用选择集
选择集可以由单个对象组成,也可以是一个更复杂的编组:例如特定图层的对象集。 在 命令 启动前通过pick first选择或者执行命令后提示选择对象要注用户在图形区域中选择对象后创建的选择集是最具代表性的。
选择集不是持久的,如果需要保留选择集,用于在多个命令之间或将来使用,就必须创建一个自定义的 字典 并记录对象 ID,并将选择集当作一个记录创建。
获得PickFirst选择集
在图形区域中选择对象
添加或合并多个选择集
定义选择集过滤规则
从选择集中移除对象
获得PickFirst选择集
PickFirst 选择集是在先选择对象后启动命令的时候创建的。为了获得 PickFirst 选择集的对象,必须满足某些条件,这些条件是:
SetImpliedSelection 方法用于清除当前的 PickFirst 选择集。
获得 Pickfirst 选择集
本例显示 PickFirst 选择集中的对象的数量然后要求用户选择另外的对象。在请求用户选择对象前,使用 SetImpliedSelection 方法将当前 PickFirst 选择集清空了。
Imports Autodesk.AutoCAD.RuntimeImports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.DatabaseServicesImports Autodesk.AutoCAD.EditorInput <CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)> _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 IfEnd Sub在图形区域中选择对象
在屏幕上提示选择对象并遍历选择集
本例提示用户选择对象,然后修改每个选中对象的颜色为绿色或 AutoCAD 颜色索引为 3。
Imports Autodesk.AutoCAD.RuntimeImports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.DatabaseServicesImports Autodesk.AutoCAD.EditorInput <CommandMethod("SelectObjectsOnscreen")> _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 UsingEnd Sub添加或合并多个选择集
用户可以合并多个选择集,需要创建一个 ObjectIdCollection 对象,然后向其中添加多个选择集的对象的 ObjectID。除了添加 ObjectID 到 ObjectIdCollection 对象中,也可以移除 ObjectID。一旦所有 ObjectID 添加到 ObjectIdCollection 对象后,就可以遍历 ObjectID 集合并操作每一个需要的对象。
添加选择的对象到选择集中
本例提示用户选择对象两次然后合并两个选择集到一个独立的选择集中。
Imports Autodesk.AutoCAD.RuntimeImports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.DatabaseServicesImports Autodesk.AutoCAD.EditorInput <CommandMethod("MergeSelectionSets")> _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定义选择集过滤规则
用户可以使用选择过滤器来限制选择和添加到选择集中的对象。选择集过滤器列表可以通过特性或 类 型用于过滤选择的对象。例如,可能只想选择仅为蓝色的对象,或只在某个图层上的对象。还可以在过滤器列表中组合选择条件,例如,可以创建一个选择过滤器来限制选择的蓝色的圆且位置指定图层上的图案。选择过滤器可以作为参数指定给在“在图形区域中选择对象”部分中不同的选择方法。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删