10/08/2015
Как удалить полностью словарь расширения (ExtDict) примитива средствами .NET?
Вопрос:
Как удалить полностью словарь расширения (ExtDict) примитива средствами .NET?
Ответ:
В статье Как удалить полностью словарь расширения (ExtDict) примитива? описано как это сделать средствами ObjectARX. Ниже приводится код как тоже самое можно сделать при помощи AutoCAD .NET API:
Код - C#: [Выделить]
- using System;
- using System.Collections.Generic;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- using Autodesk.AutoCAD.EditorInput;
- [assembly: CommandClass(typeof(Rivilis.ExtDictUtils))]
- namespace Rivilis
- {
- public class ExtDictUtils
- {
- [CommandMethod("RemExtDict")]
- public void RemExtDict()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- PromptEntityOptions opt =
- new PromptEntityOptions("\nВыберите примитив со словарем расширения: ");
- opt.AllowNone = true;
- PromptEntityResult res = ed.GetEntity(opt);
- if (res.Status != PromptStatus.OK) return;
- ObjectId eId = res.ObjectId;
- try
- {
- using (Entity en = res.ObjectId.Open(OpenMode.ForWrite) as Entity)
- {
- ObjectId idExt = en.ExtensionDictionary;
- if (idExt.IsNull || idExt.IsErased)
- {
- ed.WriteMessage("\nУ примитива нет словаря расширения!");
- return;
- }
- using (DBDictionary dict = idExt.Open(OpenMode.ForWrite) as DBDictionary)
- {
- List<string> keys = new List<string>();
- using (DbDictionaryEnumerator dictEnum = dict.GetEnumerator())
- {
- while (dictEnum.MoveNext())
- keys.Add(dictEnum.Key);
- }
- foreach (string key in keys) dict.Remove(key);
- }
- en.ReleaseExtensionDictionary();
- }
- }
- catch (Autodesk.AutoCAD.Runtime.Exception ex)
- {
- ed.WriteMessage("\nОшибка удаления словаря расширения: {0}",
- ex.ToString());
- }
- }
- }
- }
До удаления словаря расширения:
После удаления:
Автор: Александр Ривилис
Отредактировано 10.08.2015 в 19:31:03
Обсуждение: http://adn-cis.org/forum/index.php?topic=2906
Опубликовано 10.08.2015Отредактировано 10.08.2015 в 19:31:03