明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1748|回复: 5

写一个简易的显隐隔离对象

[复制链接]
发表于 2024-9-27 12:12:10 | 显示全部楼层 |阅读模式
  1. namespace CsCad.IsoObjects
  2. {
  3.     public static class IsoObject
  4.     {
  5.         public static void Hide(ICollection<ObjectId> ids)
  6.         {
  7.             foreach (ObjectId id in ids)
  8.             {
  9.                 Entity entity = (Entity)id.GetObject(OpenMode.ForWrite, false, true);
  10.                 entity.Visible = false;
  11.             }
  12.         }
  13.         public static void Isolate(BlockTableRecord btr, ICollection<ObjectId> isoids)
  14.         {
  15.             var ids = btr.Cast<ObjectId>().ToHashSet().Except(isoids);
  16.             foreach (ObjectId id in ids)
  17.             {
  18.                 Entity entity = (Entity)id.GetObject(OpenMode.ForWrite,false,true);
  19.                 entity.Visible = false;
  20.             }
  21.         }
  22.         public static void UnIsolate(BlockTableRecord btr)
  23.         {
  24.             var ids = btr.Cast<ObjectId>().ToHashSet();
  25.             foreach (ObjectId id in ids)
  26.             {
  27.                 Entity entity = (Entity)id.GetObject(OpenMode.ForWrite, false, true);
  28.                 if (entity.Visible == false)
  29.                 {
  30.                     entity.Visible = true;
  31.                 }
  32.             }
  33.         }
  34.         [CommandMethod("QE", CommandFlags.UsePickSet)]
  35.         public static void Isolate()
  36.         {
  37.             using var tr = new DbTrans();
  38.             var btr = tr.OpenCurrspace();
  39.             var res = SSGet();
  40.             if (!res.Ok) return;
  41.             var ids = res.ObjectIds;
  42.             Isolate(btr, ids);

  43.         }
  44.         [CommandMethod("QW", CommandFlags.UsePickSet)]
  45.         public static void Hide()
  46.         {
  47.             using var tr = new DbTrans();
  48.             var res = SSGet();
  49.             if (!res.Ok) return;
  50.             var ids = res.ObjectIds;
  51.             Hide(ids);
  52.         }
  53.         [CommandMethod("QR", CommandFlags.UsePickSet)]
  54.         public static void UnHide()
  55.         {
  56.             using var tr = new DbTrans();
  57.             var btr = tr.OpenCurrspace();
  58.             UnIsolate(btr);

  59.         }
  60.     }
  61. }

发表于 2024-9-27 12:24:07 | 显示全部楼层
看不懂哦,感觉像看天书!
发表于 2024-9-27 12:57:45 | 显示全部楼层
枫总出品,必是精品,顶一个。
发表于 2024-9-27 13:01:17 | 显示全部楼层
CAD自带有显示/隐藏隔离对象的命令,不知道和您这个有何区别
 楼主| 发表于 2024-9-27 21:20:02 来自手机 | 显示全部楼层
天天问 发表于 2024-9-27 13:01
CAD自带有显示/隐藏隔离对象的命令,不知道和您这个有何区别

可能稍快一些,没比过
发表于 2024-10-1 00:29:46 | 显示全部楼层
DbTrans(),這個是用的哪個版本的IFOX,上述代碼中:

    var btr = tr.OpenCurrspace();
    var res = SSGet();

這兩段函數是自己封裝的吧,沒必要打開Currspace();
如果執行了很多步操作切換到其它空間是不是失靈了呢?

一、建議存一個內部objectid集合用來存儲隱藏的ID,取消隱藏時對id檢查下是否ok,然後通過id找圖元打開就好了。

ID檢查:  id.IsOk();

另:桌子自帶命令就有哦。取消圖元選擇__右鍵__隔離 就能看到那三個命令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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