C# CAD 開發得到實體、新增實體、新增XDATA等程式碼
阿新 • • 發佈:2018-12-15
通過ObjectId得到一個實體的程式碼:
private DBObject GetObject(ObjectId id) { DBObject obj = null; using (Transaction transaction = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction()) { obj = transaction.GetObject(id, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead, true); transaction.Commit(); } return obj; }
新增實體的程式碼 :
public static void AppendEntity(Entity ent) { using (Transaction transaction = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()) { BlockTableRecord blockTableRecord; //get block table record of current space blockTableRecord = (BlockTableRecord)transaction.GetObject( HostApplicationServices.WorkingDatabase.CurrentSpaceId, OpenMode.ForWrite); blockTableRecord.AppendEntity(ent); transaction.AddNewlyCreatedDBObject(ent, true); transaction.Commit(); } return; }
給實體新增XData的程式碼:
public static bool AttachXData(DBObject obj, int MyData) { RegAppTableRecord app = new RegAppTableRecord(); app.Name = "MyData"; using (Transaction transaction = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction()) { try { Database workingdatabase = HostApplicationServices.WorkingDatabase; SymbolTable table = (SymbolTable)transaction.GetObject(workingdatabase.RegAppTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, false); if (!table.Has(app.Name)) { table.Add(app); transaction.AddNewlyCreatedDBObject(app, true); } if (!obj.IsWriteEnabled) obj.UpgradeOpen(); obj.XData = new ResultBuffer( new TypedValue((int)DxfCode.ExtendedDataRegAppName, app.Name), new TypedValue((int)DxfCode.ExtendedDataInteger32, MyData)); transaction.Commit(); transaction.Dispose(); } catch { return false; } } return true; }