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

25/11/2013

Удаление неиспользуемых блоков

Ниже код показывает процедуру очистки таблицы блоков. Обратите внимание на цикл Do/while для удаления вложенных блоков.

Код - C#: [Выделить]
  1. [CommandMethod("PurgeBlocks")]
  2. public static void PurgeBlocks()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     using (Transaction Tx =
  9.            db.TransactionManager.StartTransaction())
  10.     {
  11.         BlockTable table = Tx.GetObject(db.BlockTableId,
  12.             OpenMode.ForRead) as BlockTable;
  13.  
  14.         ObjectIdCollection blockIds = new ObjectIdCollection();
  15.  
  16.         // используем цикл do/while для очистки вложенных блоков.
  17.         do
  18.         {
  19.             blockIds.Clear();
  20.  
  21.             foreach (ObjectId id in table)
  22.                  blockIds.Add(id);
  23.  
  24.             // этот метод удалит из набора все используемые
  25.             // в чертеже блоки
  26.             db.Purge(blockIds);
  27.  
  28.             foreach (ObjectId id in blockIds)
  29.             {
  30.                 DBObject obj = Tx.GetObject(id, OpenMode.ForWrite);
  31.                 obj.Erase();
  32.             }
  33.         } while (blockIds.Count != 0);
  34.         Tx.Commit();
  35.     }
  36. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/12/deleting-un-used-blocks.html

 

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

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