07/11/2013
Использование .NET API для добавления и удаления расширенных данных
Чтение/запись свойства XData экземпляра класса Autodesk.AutoCAD.DatabaseServices.DBObject используется для чтения и установки расширенных данных любого объекта из базы чертежа. Этот пример демонстрирует тоже самое для примитива..
Код - C#: [Выделить]
- [CommandMethod("ADDXDATA")]
- static public void AddXdata()
- {
- Document doc =
- Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Transaction tr = db.TransactionManager.StartTransaction();
- using(tr)
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- // Запрос выбора примитива
- PromptEntityResult ers = ed.GetEntity("Выберите примитив ");
- // Открываем примитив
- Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForWrite);
- // Получаем таблицу зарегистрированных приложений
- RegAppTable regTable = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead);
- if(!regTable.Has("ADS"))
- {
- regTable.UpgradeOpen();
- // Добавляем имя приложения, которое мы будем
- // использовать в расширенных данных
- RegAppTableRecord app =
- new RegAppTableRecord();
- app.Name = "ADS";
- regTable.Add(app);
- tr.AddNewlyCreatedDBObject(app, true);
- }
- // Добавляем расширенные данные к примитиву
- ent.XData = new ResultBuffer(new TypedValue(1001, "ADS"), new TypedValue(1070, 100));
- tr.Commit();
- }
- }
- [CommandMethod("REMXDATA")]
- static public void RemoveXdata()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Transaction tr = db.TransactionManager.StartTransaction();
- using (tr)
- {
- Editor ed =
- Application.DocumentManager.MdiActiveDocument.Editor;
- try
- {
- // Просим пользователя выбрать примитив
- PromptEntityResult ers = ed.GetEntity("Укажите примитив ");
- // Открываем выбранный примитив
- Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForRead);
- ResultBuffer buffer = ent.GetXDataForApplication("ADS");
- // Если есть расширенные данные – удалим их.
- // Для этого в качестве расширенных данных
- // передаём только имя приложения.
- // Только связанные с ним данные будут удалены.
- if (buffer != null)
- {
- ent.UpgradeOpen();
- ent.XData = new ResultBuffer(new TypedValue(1001, "ADS"));
- buffer.Dispose();
- }
- tr.Commit();
- }
- catch
- {
- tr.Abort();
- }
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/04/using-net-api-to-add-and-remove-xdata-.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=312
Опубликовано 07.11.2013Отредактировано 07.11.2013 в 10:36:42