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

19/08/2015

Добавление словаря расширения

Для каждого объекта AutoCAD можно сохранить его пользовательские данные. Обычно это делается для графических примитивов, когда для них сохраняется неграфическая информация. Например, для отрезка AutoCAD можно сохранить строку и/или число (в его словаре расширения). Следующий код показывает как можно добавить в словарь расширения плавающее число и строку.

Код - C#: [Выделить]
  1. [CommandMethod("AddExtensionDictionary")]
  2. public void AddExtensionDictionary()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     PromptEntityResult ers = ed.GetEntity("Выберите примитив для добавления " +
  9.                                            " словаря расширения ");
  10.     if (ers.Status != PromptStatus.OK)
  11.         return;
  12.  
  13.     using (Transaction tr = db.TransactionManager.StartTransaction())
  14.     {
  15.         DBObject dbObj = tr.GetObject(ers.ObjectId,
  16.                                                    OpenMode.ForRead);
  17.  
  18.         ObjectId extId = dbObj.ExtensionDictionary;
  19.  
  20.         if (extId == ObjectId.Null)
  21.         {
  22.             dbObj.UpgradeOpen();
  23.             dbObj.CreateExtensionDictionary();
  24.             extId = dbObj.ExtensionDictionary;
  25.         }
  26.  
  27.         // Теперь у нас есть extId...
  28.         DBDictionary dbExt =
  29.                 (DBDictionary)tr.GetObject(extId, OpenMode.ForRead);
  30.  
  31.         // Если нет – добавим данные
  32.         if (!dbExt.Contains("TEST"))
  33.         {
  34.             dbExt.UpgradeOpen();
  35.             Xrecord xRec = new Xrecord();
  36.             ResultBuffer rb = new ResultBuffer();
  37.             rb.Add(new TypedValue(
  38.                       (int)DxfCode.ExtendedDataAsciiString, "Data"));
  39.             rb.Add(new TypedValue((int)DxfCode.ExtendedDataReal,
  40.                                                               10.2));
  41.  
  42.             // Устанавливаем данные
  43.             xRec.Data = rb;
  44.  
  45.             dbExt.SetAt("TEST", xRec);
  46.             tr.AddNewlyCreatedDBObject(xRec, true);
  47.         }
  48.         else
  49.         {
  50.             ed.WriteMessage("Примитив уже содержит TEST-данные \n");
  51.         }
  52.  
  53.  
  54.         tr.Commit();
  55.     }
  56.  
  57. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/06/adding-extension-dictionary.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=2922

Опубликовано 19.08.2015