[CommandMethod("GetXD")] static public void GetXData() { Document doc =Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体:"); PromptEntityResult per =ed.GetEntity(peo); if (per.Status == PromptStatus.OK) { Transaction trans =doc.TransactionManager.StartTransaction(); DBObject obj =trans.GetObject(per.ObjectId,OpenMode.ForRead); ResultBuffer rb = obj.XData; if (rb == null) ed.WriteMessage("\n实体不包括扩展数据"); else { int n = 0; foreach (TypedValue tv in rb) { ed.WriteMessage("\n类型值{0} - 类型: {1}, 值: {2}",n,tv.TypeCode,tv.Value); n++; } rb.Dispose(); } trans.Dispose(); }//if }
[CommandMethod("SetXD")] static public void SetXData() { Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体:"); PromptEntityResult per = ed.GetEntity(peo); if (per.Status == PromptStatus.OK) { Transaction trans = doc.TransactionManager.StartTransaction(); DBObject obj = trans.GetObject(per.ObjectId, OpenMode.ForWrite); AddRegAppTableRecord("Test"); ResultBuffer rb = new ResultBuffer(); rb.Add(new TypedValue(1001, "Test")); rb.Add(new TypedValue(1000, "only ascii under AutoCAD 2006")); rb.Add(new TypedValue(1000,"max length is 255")); /* * 1000 扩展数据中的ASCII串(最长字节) * 1001 扩展数据的已注册应用程序名(ASCII串,最长字节)。 */ obj.XData = rb; rb.Dispose(); trans.Commit(); trans.Dispose(); } }
static void AddRegAppTableRecord(string regAppName) { Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Database db = doc.Database; Transaction trans = doc.TransactionManager.StartTransaction(); RegAppTable rat = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForRead, false); if (!rat.Has(regAppName)) { rat.UpgradeOpen(); RegAppTableRecord ratr = new RegAppTableRecord(); ratr.Name = regAppName; rat.Add(ratr); trans.AddNewlyCreatedDBObject(ratr, true); } trans.Commit(); trans.Dispose(); } |
Autocad XData的读取和设置
最新推荐文章于 2025-05-01 22:09:52 发布