19/08/2015
Добавление словаря расширения
Для каждого объекта AutoCAD можно сохранить его пользовательские данные. Обычно это делается для графических примитивов, когда для них сохраняется неграфическая информация. Например, для отрезка AutoCAD можно сохранить строку и/или число (в его словаре расширения). Следующий код показывает как можно добавить в словарь расширения плавающее число и строку.
Код - C#: [Выделить]
- [CommandMethod("AddExtensionDictionary")]
- public void AddExtensionDictionary()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptEntityResult ers = ed.GetEntity("Выберите примитив для добавления " +
- " словаря расширения ");
- if (ers.Status != PromptStatus.OK)
- return;
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- DBObject dbObj = tr.GetObject(ers.ObjectId,
- OpenMode.ForRead);
- ObjectId extId = dbObj.ExtensionDictionary;
- if (extId == ObjectId.Null)
- {
- dbObj.UpgradeOpen();
- dbObj.CreateExtensionDictionary();
- extId = dbObj.ExtensionDictionary;
- }
- // Теперь у нас есть extId...
- DBDictionary dbExt =
- (DBDictionary)tr.GetObject(extId, OpenMode.ForRead);
- // Если нет – добавим данные
- if (!dbExt.Contains("TEST"))
- {
- dbExt.UpgradeOpen();
- Xrecord xRec = new Xrecord();
- ResultBuffer rb = new ResultBuffer();
- rb.Add(new TypedValue(
- (int)DxfCode.ExtendedDataAsciiString, "Data"));
- rb.Add(new TypedValue((int)DxfCode.ExtendedDataReal,
- 10.2));
- // Устанавливаем данные
- xRec.Data = rb;
- dbExt.SetAt("TEST", xRec);
- tr.AddNewlyCreatedDBObject(xRec, true);
- }
- else
- {
- ed.WriteMessage("Примитив уже содержит TEST-данные \n");
- }
- tr.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/06/adding-extension-dictionary.html
Автор перевода: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=2922
Опубликовано 19.08.2015