CAD 二次开发 图层操作(3)取得指定图层下的所有对象id

发布时间:2016-12-9 14:04:03 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"CAD 二次开发 图层操作(3)取得指定图层下的所有对象id",主要涉及到CAD 二次开发 图层操作(3)取得指定图层下的所有对象id方面的内容,对于CAD 二次开发 图层操作(3)取得指定图层下的所有对象id感兴趣的同学可以参考一下。

  对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作。下面的方法,即可实现获取指定图层名称下的所有实体ID。 输入参数为图层名称; 返回值为:对象主键集合 说明:该方法中用到了 一下集中类型: 选择结果【PromptSelectionResult】,用来存储选择后的结果; 类型数组【TypedValue[]】,用来填装过滤条件; 过滤器 【SelectionFilter】,用编辑器(editor)过滤时使用; 本人的习惯是首先定义过滤条件(即实例化类型数组),之后再创建过滤器对象。 通过编辑器(Editor)实现过滤后,获得过滤结果。过滤结果类型为ObjectId[] 。遍历该数组即可获得所有满足过滤条件的对象    #region "取得图层下的所有对象id"         /// <summary>         /// 取得图层下的所有对象id         /// </summary>         /// <param name="name">图层名称</param>         /// <returns>id集合</returns>         public ObjectIdCollection GetObjectIdsAtLayer(string name)         {                         ObjectIdCollection ids = new ObjectIdCollection();                       PromptSelectionResult ProSset = null;                       TypedValue[] filList = new TypedValue[1] { new TypedValue((int)DxfCode.LayerName, name) };                         SelectionFilter sfilter = new SelectionFilter(filList);                       Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;                        ProSset = ed.SelectAll(sfilter);                      if (ProSset.Status == PromptStatus.OK)             {                                  SelectionSet sst = ProSset.Value;                                  ObjectId[] oids = sst.GetObjectIds();                                  for (int i = 0; i < oids.Length; i++)                 {                                          ids.Add(oids[i]);                 }             }             return ids;         }         #endregion   以上方法实现了获取指定图层名称的所有实体主键。读者也可以根据自己的需要,编写自己的过滤条件,从而实现不同的功能如:修改方法中的过滤条件: TypedValue[] filList = new TypedValue[1] { new TypedValue((int)DxfCode.LayerName, name) }; 为:         TypedValue[] filList = new TypedValue[2]                 { new TypedValue((int)DxfCode.LayerName, name),                   new TypedValue((int)DxfCode.Start, GetDxfName(type)) }; 时:就可以过滤出指定图层下,指定类型(type)的所有实体 若读者对过滤器不熟悉,可以读一下李冠亿先生的《深居浅出AutoCAD二次开发》中相关的章节。本人则将在后续博客中,和大家讨论过滤器的相关内容。 如有纰漏,请网友指正。  如有问题:请加qq1419226548或QQmail给我。 若转载,请注明出处。谢谢。

上一篇:Primer Plus c++ 构造函数汇总
下一篇:svn使用

相关文章

相关评论