拡張データを使用する事で、図面内のオブジェクトに独自の情報を持たせることができます。
添付されているサンプルプロジェクトでは、 .NET API を使用して、
選択したオブジェクトに対しての、拡張データの追加や削除を行っています。
VB.NET
'拡張データを追加する <CommandMethod("ADDXDATE")> Public Sub AddXDataSample() Dim icDoc As Document = Application.DocumentManager.MdiActiveDocument Dim icDb As Database = icDoc.Database Dim icEd As Editor = icDoc.Editor Dim icRes As PromptEntityResult = icEd.GetEntity(vbCrLf + "オブジェクトを選択") If icRes.Status <> PromptStatus.OK Then Return Dim AppName As String = "SampleXData" Dim XDataValue As Object = "SampleXDataValue" Using icTrans As Transaction = icDb.TransactionManager.StartTransaction Using icEnt As Entity = icTrans.GetObject(icRes.ObjectId, OpenMode.ForRead) Dim icRegAppTable As RegAppTable = icTrans.GetObject(icDb.RegAppTableId, OpenMode.ForRead) If Not icRegAppTable.Has(AppName) Then Using icRegAppRecord As RegAppTableRecord = New RegAppTableRecord() icRegAppRecord.Name = AppName icRegAppTable.UpgradeOpen() icRegAppTable.Add(icRegAppRecord) icTrans.AddNewlyCreatedDBObject(icRegAppRecord, True) End Using End If Using icResBuf As ResultBuffer = New ResultBuffer() icResBuf.Add(New TypedValue(DxfCode.ExtendedDataRegAppName, AppName)) icResBuf.Add(New TypedValue(DxfCode.ExtendedDataAsciiString, XDataValue)) icEnt.UpgradeOpen() icEnt.XData = icResBuf icEnt.DowngradeOpen() End Using icTrans.Commit() End Using End Using End Sub '拡張データを削除する <CommandMethod("REMOVEXDATE")> Public Sub RemoveXDataSample() Dim icDoc As Document = Application.DocumentManager.MdiActiveDocument Dim icDb As Database = icDoc.Database Dim icEd As Editor = icDoc.Editor Dim icRes As PromptEntityResult = icEd.GetEntity(vbCrLf + "オブジェクトを選択") If icRes.Status <> PromptStatus.OK Then Return Dim AppName As String = "SampleXData" Using icTrans As Transaction = icDb.TransactionManager.StartTransaction Using icEnt As Entity = icTrans.GetObject(icRes.ObjectId, OpenMode.ForRead) Using icResBuf As ResultBuffer = New ResultBuffer() icResBuf.Add(New TypedValue(DxfCode.ExtendedDataRegAppName, AppName)) icEnt.UpgradeOpen() icEnt.XData = icResBuf icEnt.DowngradeOpen() icTrans.Commit() End Using End Using End Using End Sub
C#
//拡張データを追加する [CommandMethod("ADDXDATE")] public void AddXDataSample() { Document icDoc = Application.DocumentManager.MdiActiveDocument; Database icDb = icDoc.Database; Editor icEd = icDoc.Editor; PromptEntityResult icRes = icEd.GetEntity("\nオブジェクトを選択"); if (icRes.Status != PromptStatus.OK) return; string AppName = "SampleXData"; object XDataValue = "SampleXDataValue"; using (Transaction icTrans = icDb.TransactionManager.StartTransaction()) using (Entity icEnt = icTrans.GetObject(icRes.ObjectId, OpenMode.ForRead) as Entity) { RegAppTable icRegAppTable = icTrans.GetObject(icDb.RegAppTableId, OpenMode.ForRead) as RegAppTable; if (!icRegAppTable.Has(AppName)) { using (RegAppTableRecord icRegAppRecord = new RegAppTableRecord()) { icRegAppRecord.Name = AppName; icRegAppTable.UpgradeOpen(); icRegAppTable.Add(icRegAppRecord); icTrans.AddNewlyCreatedDBObject(icRegAppRecord, true); } } using (ResultBuffer icResBuf = new ResultBuffer()) { icResBuf.Add(new TypedValue((Int32)DxfCode.ExtendedDataRegAppName, AppName)); icResBuf.Add(new TypedValue((Int32)DxfCode.ExtendedDataAsciiString, XDataValue)); icEnt.UpgradeOpen(); icEnt.XData = icResBuf; icEnt.DowngradeOpen(); } icTrans.Commit(); } } //拡張データを削除する [CommandMethod("REMOVEXDATE")] public void RemoveXDataSample() { Document icDoc = Application.DocumentManager.MdiActiveDocument; Database icDb = icDoc.Database; Editor icEd = icDoc.Editor; PromptEntityResult icRes = icEd.GetEntity("\nオブジェクトを選択"); if (icRes.Status != PromptStatus.OK) return; string AppName = "SampleXData"; using (Transaction icTrans = icDb.TransactionManager.StartTransaction()) using (Entity icEnt = icTrans.GetObject(icRes.ObjectId, OpenMode.ForRead) as Entity) using (ResultBuffer icResBuf = new ResultBuffer()) { icResBuf.Add(new TypedValue((Int32)DxfCode.ExtendedDataRegAppName, AppName)); icEnt.UpgradeOpen(); icEnt.XData = icResBuf; icEnt.DowngradeOpen(); icTrans.Commit(); } }