枫叶棋语 发表于 2024-9-27 12:12:10

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

namespace CsCad.IsoObjects
{
    public static class IsoObject
    {
      public static void Hide(ICollection<ObjectId> ids)
      {
            foreach (ObjectId id in ids)
            {
                Entity entity = (Entity)id.GetObject(OpenMode.ForWrite, false, true);
                entity.Visible = false;
            }
      }
      public static void Isolate(BlockTableRecord btr, ICollection<ObjectId> isoids)
      {
            var ids = btr.Cast<ObjectId>().ToHashSet().Except(isoids);
            foreach (ObjectId id in ids)
            {
                Entity entity = (Entity)id.GetObject(OpenMode.ForWrite,false,true);
                entity.Visible = false;
            }
      }
      public static void UnIsolate(BlockTableRecord btr)
      {
            var ids = btr.Cast<ObjectId>().ToHashSet();
            foreach (ObjectId id in ids)
            {
                Entity entity = (Entity)id.GetObject(OpenMode.ForWrite, false, true);
                if (entity.Visible == false)
                {
                  entity.Visible = true;
                }
            }
      }
      
      public static void Isolate()
      {
            using var tr = new DbTrans();
            var btr = tr.OpenCurrspace();
            var res = SSGet();
            if (!res.Ok) return;
            var ids = res.ObjectIds;
            Isolate(btr, ids);

      }
      
      public static void Hide()
      {
            using var tr = new DbTrans();
            var res = SSGet();
            if (!res.Ok) return;
            var ids = res.ObjectIds;
            Hide(ids);
      }
      
      public static void UnHide()
      {
            using var tr = new DbTrans();
            var btr = tr.OpenCurrspace();
            UnIsolate(btr);

      }
    }
}

筑路人 发表于 2024-9-27 12:24:07

看不懂哦,感觉像看天书!

mahuan1279 发表于 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自带有显示/隐藏隔离对象的命令,不知道和您这个有何区别

可能稍快一些,没比过

箭头_Row 发表于 2024-10-1 00:29:46

DbTrans(),這個是用的哪個版本的IFOX,上述代碼中:

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

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

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

ID檢查:id.IsOk();

另:桌子自帶命令就有哦。取消圖元選擇__右鍵__隔離 就能看到那三個命令。
页: [1]
查看完整版本: 写一个简易的显隐隔离对象