许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  AutoCAD使用选择集的方法与技巧

AutoCAD使用选择集的方法与技巧

阅读数 1
点赞 0
article_banner

使用选择集

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

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

获得PickFirst选择集

   在图形区域中选择对象

   添加或合并多个选择集

   定义选择集过滤规则

   从选择集中移除对象

获得PickFirst选择集

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

  • PICKFIRST 系统变量必须设置为 1
  • 必须给命令定义 UsePickSet 命令标记,用以通知命令要使用 Pickfirst 选择集
  • 调用 SelectImplied 方法获得 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

在图形区域中选择对象

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

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

本例提示用户选择对象,然后修改每个选中对象的颜色为绿色或 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

定义选择集过滤规则

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


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空