AutoCad 二次開發 .net 之層表的增長 刪除 修改圖層顏色 遍歷 設置當前層ide
AutoCad 二次開發 .net 之層表的增長 刪除 修改圖層顏色 遍歷 設置當前層
我理解的圖層的做用大概是把相同做用的功能彙集在一塊兒,以便好選擇。好比,把一副圖塊中的全部標註定義爲一個圖層,把編號定義爲一個圖層,把相同的塊參照定義爲一個圖層。圖層表的操做和塊表的操做相似。學習
在這裏我就分享一下本身從書《AUTOCAD VBA&VB.NET開發基礎與實例教程(C#版) 第2版》學習到的關於圖層的一些操做的代碼,我以爲主要是圖層的刪除須要注意一下。spa
使用的成員變量:.net
Document Doc = Application.DocumentManager.MdiActiveDocument;
Editor Ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database Db = Application.DocumentManager.MdiActiveDocument.Database;code
1、圖層的刪除 代碼:blog
/// <summary> /// 圖層0和圖層Defpoints不能被刪除,當前圖層不能被刪除,圖層上有塊參照,實體時不能被刪除 /// 刪除前需刷新,使用LayerTableRecord.GenerateUsageData(); /// </summary> public bool DeleteLayer(Database db, string layerName) { using (var trans = db.TransactionManager.StartTransaction()) { var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable; if (!lyTbl.Has(layerName)) return false; if (layerName == "0" || layerName == "Defpoints") return false; ObjectId oId = lyTbl[layerName]; if (oId == db.Clayer) return false; var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForRead) as LayerTableRecord; lyTbl.GenerateUsageData(); if (lyTblRec.IsUsed) return false; lyTblRec.UpgradeOpen(); lyTblRec.Erase(true); trans.Commit(); return true; } }
2、圖層的增長:教程
public ObjectId AddLayer(Database db, string layerName) { ObjectId oId = ObjectId.Null; using (var trans = db.TransactionManager.StartTransaction()) { var lyerTbl = db.LayerTableId.GetObject(OpenMode.ForWrite) as LayerTable; if (lyerTbl.Has(layerName)) { trans.Commit(); return lyerTbl[layerName]; } var lyerTblRec = new LayerTableRecord(); lyerTblRec.Name = layerName; lyerTbl.Add(lyerTblRec); trans.AddNewlyCreatedDBObject(lyerTblRec, true); lyerTbl.DowngradeOpen(); trans.Commit(); return lyerTbl[layerName]; } }
3、修改圖層顏色:ci
public bool SetLayerColor(Database db, string layerName, short colorIndexs) { using (var trans = db.TransactionManager.StartTransaction()) { var lyTbl = db.LayerTableId.GetObject(OpenMode.ForRead) as LayerTable; if (lyTbl.Has(layerName)) { var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForWrite) as LayerTableRecord; if (colorIndexs < 0 || colorIndexs > 255) { colorIndexs = 1; } lyTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndexs); lyTblRec.DowngradeOpen(); trans.Commit(); return true; } else { return false; } } }
4、遍歷圖層:開發
public List<LayerTableRecord> GetAllLayer(Database db) { List<LayerTableRecord> listLyTblRec = new List<LayerTableRecord>(); using (var trans = db.TransactionManager.StartTransaction()) { var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; foreach (ObjectId oId in lyTbl) { var lyTblRec = trans.GetObject(oId, OpenMode.ForRead) as LayerTableRecord; listLyTblRec.Add(lyTblRec); } return listLyTblRec; } }
5、設置當前圖層:string
Databse.Clayer表示當前圖層 public bool SetCurrentLayer(Database db, string layerName) { using (var trans = db.TransactionManager.StartTransaction()) { var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; if (!lyTbl.Has(layerName)) return false; //var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForRead) as LayerTableRecord; if (db.Clayer != lyTbl[layerName]) { db.Clayer = lyTbl[layerName]; } return true; } }