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

10/08/2015

Как удалить полностью словарь расширения (ExtDict) примитива средствами .NET?

Вопрос:
Как удалить полностью словарь расширения (ExtDict) примитива средствами .NET?

Ответ:
В статье Как удалить полностью словарь расширения (ExtDict) примитива? описано как это сделать средствами ObjectARX. Ниже приводится код как тоже самое можно сделать при помощи AutoCAD .NET API:

 

Код - C#: [Выделить]
  1. using System;
  2. using System.Collections.Generic;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.EditorInput;
  8.  
  9. [assembly: CommandClass(typeof(Rivilis.ExtDictUtils))]
  10.  
  11. namespace Rivilis
  12. {
  13.   public class ExtDictUtils
  14.   {
  15.     [CommandMethod("RemExtDict")]
  16.     public void RemExtDict()
  17.     {
  18.       Document doc = Application.DocumentManager.MdiActiveDocument;
  19.       if (doc == null) return;
  20.       Editor ed = doc.Editor;
  21.       PromptEntityOptions opt =
  22.         new PromptEntityOptions("\nВыберите примитив со словарем расширения: ");
  23.       opt.AllowNone = true;
  24.       PromptEntityResult res = ed.GetEntity(opt);
  25.       if (res.Status != PromptStatus.OK) return;
  26.       ObjectId eId = res.ObjectId;
  27.       try
  28.       {
  29.         using (Entity en = res.ObjectId.Open(OpenMode.ForWrite) as Entity)
  30.         {
  31.           ObjectId idExt = en.ExtensionDictionary;
  32.           if (idExt.IsNull || idExt.IsErased)
  33.           {
  34.             ed.WriteMessage("\nУ примитива нет словаря расширения!");
  35.             return;
  36.           }
  37.           using (DBDictionary dict = idExt.Open(OpenMode.ForWrite) as DBDictionary)
  38.           {
  39.             List<string> keys = new List<string>();
  40.             using (DbDictionaryEnumerator dictEnum = dict.GetEnumerator())
  41.             {
  42.               while (dictEnum.MoveNext())
  43.                 keys.Add(dictEnum.Key);
  44.             }
  45.             foreach (string key in keys) dict.Remove(key);
  46.           }
  47.           en.ReleaseExtensionDictionary();
  48.         }
  49.       }
  50.       catch (Autodesk.AutoCAD.Runtime.Exception ex)
  51.       {
  52.         ed.WriteMessage("\nОшибка удаления словаря расширения: {0}",
  53.           ex.ToString());
  54.       }
  55.  
  56.     }
  57.   }
  58. }

 

До удаления словаря расширения:

 

После удаления:

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

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

Опубликовано 10.08.2015
Отредактировано 10.08.2015 в 19:31:03