找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1509|回复: 2

[每日一码] (获取实体ID集合时)过滤器的使用及检测(过滤器引用)对象的类型名称

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-5-27 08:25:01 | 显示全部楼层 |阅读模式

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

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

×
1.过滤器常用操作符组合
   (1)  a或b
            操作符:"<OR"     "a"   "b"     "OR>"

            例集合包含 多断线(对像类型名称为LWPOLYLINE) 或 块参照(对像类型名称为INSERT)

               TypedValue[] ftv = new TypedValue[]
                  {        
                new TypedValue((int)DxfCode.Operator , "<OR"),            
                new TypedValue((int)DxfCode.Start, "LWPOLYLINE") ,                     
                new TypedValue((int)DxfCode.Start, "INSERT"),            
                new TypedValue((int)DxfCode.Operator , "OR>")               
                 };
                SelectionFilter  xfilter= new SelectionFilter(ftv);

    (2)   a和b
            操作符:"<AND"     "a"   "b"     "AND>"

            例: 在“ping"层的直线。(是直线并且所在层名称为“ping“)
               TypedValue[] ftv = new TypedValue[]
                  {        
                new TypedValue((int)DxfCode.Operator , "<AND"),            
                new TypedValue((int)DxfCode.Start, "LINE") ,                     
                new TypedValue((int)DxfCode.LayerName, "ping"),            
                new TypedValue((int)DxfCode.Operator , "AND>")               
                 };
                SelectionFilter  xfilter= new SelectionFilter(ftv);
    (3)其它如 (A和B)或者(C和D)的,模式为:
                   "<OR"

                   "<AND"
                    “ A”
                    “ B ”         
                   "AND>"

                    "<AND"
                    “ C”
                    “ D ”         
                   "AND>"

                    "OR>"

2.在使用过滤器过滤指定对象时,需要设置对象类型名称,如参照块“INSERT”,多段线“LWPOLYLINE”
   不知DXFNAME时可以如下做测试来获取


  1.   [CommandMethod("getentsdxfanme", CommandFlags.Session)]
  2.         public void getentsdxfanme()
  3.         {
  4.             using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
  5.             {
  6.                 ObjectId obt = GetSelectFirstEntityid();
  7.                 if (!obt.IsNull)
  8.                 {
  9.                     Database db = HostApplicationServices.WorkingDatabase;
  10.                     using (Transaction trans = db.TransactionManager.StartTransaction())
  11.                     {
  12.                         Entity ent = (Entity)trans.GetObject(obt , OpenMode.ForWrite);                       
  13.                         ed.WriteMessage(ent.GetRXClass().DxfName .ToString () );                       
  14.                         trans.Commit();
  15.                     }
  16.                 }
  17.             }

  18.      }


  19. public static ObjectId GetSelectFirstEntityid() //通过鼠标获取单个实体ID
  20.         {
  21.             using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
  22.             {
  23.                 Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  24.                 Database db = HostApplicationServices.WorkingDatabase;               
  25.            ObjectId o1 = new ObjectId();
  26.                 PromptSelectionOptions selectionOp = new PromptSelectionOptions();               
  27.                 PromptSelectionResult ssRes = ed.GetSelection(selectionOp);
  28.                 if (ssRes.Status == PromptStatus.OK)
  29.                 {
  30.                     o1 = ssRes.Value[0].ObjectId;
  31.                 }
  32.                 return o1;
  33.             }
  34.         }




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 375个

财富等级: 日进斗金

发表于 2021-4-27 09:14:31 | 显示全部楼层
感谢楼主分享学习!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2022-12-9 21:13:14 | 显示全部楼层
谢谢分享                     
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 20:37 , Processed in 0.360938 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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