写一个简易的显隐隔离对象
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);
}
}
}
看不懂哦,感觉像看天书! 枫总出品,必是精品,顶一个。 CAD自带有显示/隐藏隔离对象的命令,不知道和您这个有何区别
天天问 发表于 2024-9-27 13:01
CAD自带有显示/隐藏隔离对象的命令,不知道和您这个有何区别
可能稍快一些,没比过 DbTrans(),這個是用的哪個版本的IFOX,上述代碼中:
var btr = tr.OpenCurrspace();
var res = SSGet();
這兩段函數是自己封裝的吧,沒必要打開Currspace();
如果執行了很多步操作切換到其它空間是不是失靈了呢?
一、建議存一個內部objectid集合用來存儲隱藏的ID,取消隱藏時對id檢查下是否ok,然後通過id找圖元打開就好了。
ID檢查:id.IsOk();
另:桌子自帶命令就有哦。取消圖元選擇__右鍵__隔離 就能看到那三個命令。
页:
[1]