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

23/06/2014

Поиск удаленных примитивов

Чтобы получить запись таблицы блоков, в которой имеются удаленные примитивы, можно воспользоваться методом BlockTableRecord.IncludingErased. Например таким образом можно восстановить удаленные примитивы в блоке, как показано ниже.

Код - C#: [Выделить]
  1. [CommandMethod("GetErasedEntities")]
  2. public void GetErasedEntities()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Editor ed = doc.Editor;
  6.     Database db = doc.Database;
  7.  
  8.     ObjectId ModelSpaceId = SymbolUtilityServices.GetBlockModelSpaceId(db);
  9.  
  10.     using (Transaction tr = db.TransactionManager.StartTransaction())
  11.     {
  12.         BlockTableRecord record = tr.GetObject(ModelSpaceId, OpenMode.ForRead) as BlockTableRecord;
  13.  
  14.         BlockTableRecord withErasedBTR = record.IncludingErased;
  15.  
  16.         foreach (ObjectId Id in withErasedBTR)
  17.         {
  18.             if (!Id.IsErased)
  19.                 continue;
  20.  
  21.             // Восстанавливаем примитив...
  22.  
  23.             // У метода GetObject третий параметр указывает
  24.             // на возможность открытия удаленного примитива
  25.             Entity ent = (Entity)tr.GetObject(Id,
  26.                                            OpenMode.ForWrite, true);
  27.             ent.Erase(false); // Восстанавливаем
  28.         }
  29.         tr.Commit();
  30.     }
  31. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/07/indentifying-erased-entities.html

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

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