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