找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4380|回复: 8

[分享] ObjectARX中用户选择过滤器的使用

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-4-20 11:31:01 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 csharp 于 2014-4-20 11:33 编辑

ObjectARX中用户选择过滤器的使用


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时可以如下做测试来获取


  [CommandMethod("getentsdxfanme", CommandFlags.Session)]
        public void getentsdxfanme()
        {
            using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
            {
                ObjectId obt = GetSelectFirstEntityid();
                if (!obt.IsNull)
                {
                    Database db = HostApplicationServices.WorkingDatabase;
                    using (Transaction trans = db.TransactionManager.StartTransaction())
                    {
                        Entity ent = (Entity)trans.GetObject(obt , OpenMode.ForWrite);                 
                        ed.WriteMessage(ent.GetRXClass().DxfName .ToString () );                       
                        trans.Commit();
                    }
                }
            }      
     }

public static ObjectId GetSelectFirstEntityid() //通过鼠标获取单个实体ID
        {
            using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
            {
                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
                Database db = HostApplicationServices.WorkingDatabase;               
           ObjectId o1 = new ObjectId();
                PromptSelectionOptions selectionOp = new PromptSelectionOptions();               
                PromptSelectionResult ssRes = ed.GetSelection(selectionOp);
                if (ssRes.Status == PromptStatus.OK)
                {
                    o1 = ssRes.Value[0].ObjectId;
                }
                return o1;
            }
        }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-4-20 11:46:21 | 显示全部楼层
c#过滤autocad对象
在使用.NET开发AutoCAD时,获取的选择集可以用SelectionFilter对象进行过滤,这样用户就可以只选择对自己操作有用的实体了。关于这个SelectionFilter选择过滤器,偶以前只知道用DxfCode.Start组码来过滤单种类形的实体(如直线、圆、圆弧等)。今天找到了几个多重选择CAD实体的方法,现总结如下:
  只过滤直线实体
  PromptSelectionOptions CurOption
  = new PromptSelectionOptions();
  CurOption.SingleOnly = false;
  CurOption.AllowDuplicates = false;
  CurOption.MessageForAdding = "请选择曲线:";
  TypedValue[] filList = new TypedValue[]{
  new TypedValue((int)DxfCode.Start,"LINE")
  };//只过滤直线
  SelectionFilter filter = new SelectionFilter(filList);
  PromptSelectionResult ssr
  = ed.GetSelection(CurOption, filter);
  同时过滤直线、圆和圆弧
  PromptSelectionOptions CurOption
  = new PromptSelectionOptions();
  CurOption.SingleOnly = false;
  CurOption.AllowDuplicates = false;
  CurOption.MessageForAdding = "请选择曲线:";
  TypedValue[] filList = new TypedValue[]{
  newTypedValue((int)DxfCode.Start,"LINE,ARC,CIRCLE")
  };//同时过滤直线、圆和圆弧
  SelectionFilter filter = new SelectionFilter(filList);
  PromptSelectionResult ssr
  = ed.GetSelection(CurOption, filter);
  过滤所有曲线
  PromptSelectionOptions CurOption
  = new PromptSelectionOptions();
  CurOption.SingleOnly = false;
  CurOption.AllowDuplicates = false;
  CurOption.MessageForAdding = "请选择曲线:";
  TypedValue[] filList = new TypedValue[]{
  new TypedValue((int)DxfCode.Subclass,"CURVE")
  };//过滤所有曲线
  SelectionFilter filter = new SelectionFilter(filList);
  PromptSelectionResult ssr
  = ed.GetSelection(CurOption, filter);
  过滤0层上的所有曲线
  PromptSelectionOptions CurOption
  = new PromptSelectionOptions();
  CurOption.SingleOnly = false;
  CurOption.AllowDuplicates = false;
  CurOption.MessageForAdding = "请选择曲线:";
  TypedValue[] filList = new TypedValue[]{
  new TypedValue((int)DxfCode.Subclass,"CURVE"),
  new TypedValue((int)DxfCode.LayerName,"0")
  };//过滤0层上的所有曲线
  SelectionFilter filter = new SelectionFilter(filList);
  PromptSelectionResult ssr
= ed.GetSelection(CurOption,filter);

评分

参与人数 1D豆 +5 收起 理由
ScmTools + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

发表于 2014-4-27 18:40:44 | 显示全部楼层
感谢楼主分享,我是一个初学者,对于过滤器中关于颜色过滤的时候总是没反应,不知是哪里出错了,还望楼主指点一下:TypedValue[] acTypValAr = new TypedValue[]
                {                    
                      new TypedValue((int)DxfCode.Color,5)                        
                };
为什么无法实现关于蓝色实体的过滤?急求
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

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

使用道具 举报

发表于 2015-9-11 13:55:51 | 显示全部楼层
请问一下,在哪里可以找到要过滤的对像类型名称呢?还是说大部分都和它在ARX里面的类型名称一致,只有多段线不一致?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-10-12 23:25:55 | 显示全部楼层

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

使用道具 举报

发表于 2018-8-22 18:48:36 | 显示全部楼层
类型名称参考这个枚举
  1.     /// <summary>
  2.     /// 类型过滤枚举
  3.     /// </summary>
  4.     public enum FilterTypeEnum
  5.     {
  6.         /// <summary>
  7.         /// 曲线
  8.         /// </summary>
  9.         Curve,      //曲线
  10.         /// <summary>
  11.         /// 标注
  12.         /// </summary>
  13.         Dimension,       //标注
  14.         /// <summary>
  15.         /// 三维多段线
  16.         /// </summary>
  17.         Polyline,       //三维多段线
  18.         /// <summary>
  19.         /// 块参照
  20.         /// </summary>
  21.         Insert,         //块参照
  22.         /// <summary>
  23.         /// 圆
  24.         /// </summary>
  25.         Circle,     //圆
  26.         /// <summary>
  27.         /// 直线
  28.         /// </summary>
  29.         Line,       //直线
  30.         /// <summary>
  31.         /// 弧
  32.         /// </summary>
  33.         Arc,        //弧
  34.         /// <summary>
  35.         /// 单行文本
  36.         /// </summary>
  37.         Text,       //单行文本
  38.         /// <summary>
  39.         /// 多行文字
  40.         /// </summary>
  41.         MText,      //多行文字
  42.         /// <summary>
  43.         /// 多段线
  44.         /// </summary>
  45.         LwPolyline,     //多段线
  46.         /// <summary>
  47.         /// 点
  48.         /// </summary>
  49.         Point,       //点
  50.         /// <summary>
  51.         /// 样条曲线
  52.         /// </summary>
  53.         Spline,   //样条曲线
  54.         /// <summary>
  55.         /// 椭圆
  56.         /// </summary>
  57.         Ellipse,  //椭圆
  58.         /// <summary>
  59.         /// 表格
  60.         /// </summary>
  61.         ACAD_TABLE,  //表格
  62.         /// <summary>
  63.         /// 区域覆盖
  64.         /// </summary>
  65.         Wipeout,  //区域覆盖  
  66.         /// <summary>
  67.         /// 多重引线
  68.         /// </summary>
  69.         Multileader,// MULTILEADER,  //多重引线
  70.         /// <summary>
  71.         /// 曲面(平面)
  72.         /// </summary>
  73.         PlaneSurface,//PLANESURFACE,   //曲面(平面)
  74.         ///// <summary>
  75.         ///// 三维实体
  76.         ///// </summary>
  77.         /////3DSOLID,   //三维实体
  78.         ///// <summary>
  79.         ///// 三维面
  80.         ///// </summary>
  81.         /////3DFACE,  //三维面
  82.         /// <summary>
  83.         /// 面域
  84.         /// </summary>
  85.         Region,     //面域
  86.         /// <summary>
  87.         /// 实线
  88.         /// </summary>
  89.         Solid,      //实线
  90.         /// <summary>
  91.         /// 填充
  92.         /// </summary>
  93.         Hatch,      //填充
  94.         /// <summary>
  95.         /// 螺旋
  96.         /// </summary>
  97.         Helix          //螺旋
  98.     }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 05:36 , Processed in 0.407995 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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