ADN Open CIS
Сообщество программистов Autodesk в СНГ

07/11/2013

Использование .NET API для добавления и удаления расширенных данных

Чтение/запись свойства XData экземпляра класса Autodesk.AutoCAD.DatabaseServices.DBObject используется для чтения и установки расширенных данных любого объекта из базы чертежа. Этот пример демонстрирует тоже самое для примитива..

Код - C#: [Выделить]
  1. [CommandMethod("ADDXDATA")]
  2. static public void AddXdata()
  3. {
  4.     Document doc =
  5.         Application.DocumentManager.MdiActiveDocument;
  6.     Database db = doc.Database;
  7.     Transaction tr = db.TransactionManager.StartTransaction();
  8.     using(tr)
  9.     {
  10.         Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  11.         // Запрос выбора примитива
  12.         PromptEntityResult ers = ed.GetEntity("Выберите примитив ");
  13.         // Открываем примитив
  14.         Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForWrite);
  15.         // Получаем таблицу зарегистрированных приложений
  16.         RegAppTable regTable = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead);
  17.  
  18.         if(!regTable.Has("ADS"))
  19.         {
  20.             regTable.UpgradeOpen();
  21.             // Добавляем имя приложения, которое мы будем
  22.             // использовать в расширенных данных
  23.             RegAppTableRecord app =
  24.                     new RegAppTableRecord();
  25.             app.Name = "ADS";
  26.             regTable.Add(app);
  27.             tr.AddNewlyCreatedDBObject(app, true);
  28.         }
  29.         // Добавляем расширенные данные к примитиву
  30.         ent.XData = new ResultBuffer(new TypedValue(1001, "ADS"), new TypedValue(1070, 100));
  31.         tr.Commit();
  32.     }
  33. }
  34.  
  35. [CommandMethod("REMXDATA")]
  36. static public void RemoveXdata()
  37. {
  38.     Document doc = Application.DocumentManager.MdiActiveDocument;
  39.     Database db =  doc.Database;
  40.     Transaction tr = db.TransactionManager.StartTransaction();
  41.     using (tr)
  42.     {
  43.         Editor ed =
  44.             Application.DocumentManager.MdiActiveDocument.Editor;
  45.         try
  46.         {
  47.             // Просим пользователя выбрать примитив
  48.             PromptEntityResult ers = ed.GetEntity("Укажите примитив ");
  49.             // Открываем выбранный примитив
  50.             Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForRead);
  51.  
  52.             ResultBuffer buffer = ent.GetXDataForApplication("ADS");
  53.             // Если есть расширенные данные – удалим их.
  54.             // Для этого в качестве расширенных данных
  55.             // передаём только имя приложения.
  56.             // Только связанные с ним данные будут удалены.
  57.             if (buffer != null)
  58.             {
  59.                 ent.UpgradeOpen();
  60.                 ent.XData = new ResultBuffer(new TypedValue(1001, "ADS"));
  61.                 buffer.Dispose();
  62.             }
  63.             tr.Commit();
  64.         }
  65.         catch
  66.         {
  67.             tr.Abort();
  68.         }
  69.     }
  70. }

Источник: 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