cad.net 圖層隱藏 IsHidden 用法 eDuplicateRecordName 報錯
阿新 • • 發佈:2019-05-17
用戶 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 edView Code= doc.Editor; using (Application.DocumentManager.MdiActiveDocument.LockDocument())//鎖文檔 { using (Transaction tr = db.TransactionManager.StartTransaction()) { LayerTable table = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) asLayerTable; string ss = "Test"; LayerTableRecord layerName = null; if (table.Has(ss)) { foreach (var item in table) { layerName = tr.GetObject(item, OpenMode.ForRead) asLayerTableRecord; 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(); } } } }
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 報錯