找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1645|回复: 0

[分享] 取得指定图层下的所有对象id

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-13 22:58:05 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[ 本帖最后由 csharp 于 2014-5-14 07:31 编辑 ]\n\n[url=http://blog.csdn.net/missingshirely/article/details/11778487]http://blog.csdn.net/missingshirely/article/details/11778487[/url]
对于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)的所有实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-1-6 01:16 , Processed in 0.371101 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表