1. 程式人生 > >cad.net 圖層隱藏 IsHidden 用法 eDuplicateRecordName 報錯

cad.net 圖層隱藏 IsHidden 用法 eDuplicateRecordName 報錯

用戶 ati event manage cati for edi 嘻嘻 spa

今天小博發現了一件事情,無論怎麽用 IsHidden 都會出現報錯 eDuplicateRecordName

技術分享圖片
    public class Command_hbtcWin22222
    {
        [CommandMethod("Hiddenlayer")]
        public void Hiddenlayer()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed 
= doc.Editor; using (Application.DocumentManager.MdiActiveDocument.LockDocument())//鎖文檔 { using (Transaction tr = db.TransactionManager.StartTransaction()) { LayerTable table = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as
LayerTable; string ss = "Test"; LayerTableRecord layerName = null; if (table.Has(ss)) { foreach (var item in table) { layerName = tr.GetObject(item, OpenMode.ForRead) as
LayerTableRecord; if (layerName.Name == ss) { layerName.UpgradeOpen(); layerName.IsHidden = true; layerName.DowngradeOpen(); break; } } } else { layerName = new LayerTableRecord { Name = ss, IsHidden = false }; table.Add(layerName); tr.AddNewlyCreatedDBObject(layerName, true); } table.DowngradeOpen(); table.Dispose(); tr.Commit(); } } } }
View Code

2008和2019測試都是

第一次遍歷,生成一個test圖層,

第二次遍歷,修改隱藏(相當於刪除了的感覺)

第三次遍歷,又生成了一個test圖層

第四次遍歷,修改隱藏報錯了

後來得到e大的幫助,說了一個很重要的問題,遍歷器上面沒有,那麽我就去看了塊表,塊表上面有個參數是 IncludingHidden,

所以代碼要寫這句,層表才會顯示隱藏的圖層:

                    LayerTable table = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;
                    table = table.IncludingHidden;

之後,我就發現了,報錯的原因:

第一次遍歷,生成一個test圖層,

第二次遍歷,修改隱藏(相當於把圖層改成了*Test的名字)

第三次遍歷,又生成了一個test圖層

第四次遍歷,修改隱藏,相當於吧test改成*test,因為第二遍的時候隱藏的已經有這個名字了,就報錯了!

因為*號是保留關鍵字,普通用戶不給用的,大家要判斷層名的時候就要打開IncludingHidden 遍歷的時候同時判斷 "*"+layerName 和 layerName

技術分享圖片

普通cad用戶只能幹著急,嘻嘻

e大還說了,把dwg存成dxf,然後用對比文件看,也能看到,並改......這貌似是給普通用戶的簡便修改方式?

技術分享圖片

cad.net 圖層隱藏 IsHidden 用法 eDuplicateRecordName 報錯