25/11/2013
Удаление неиспользуемых блоков
Ниже код показывает процедуру очистки таблицы блоков. Обратите внимание на цикл Do/while для удаления вложенных блоков.
Код - C#: [Выделить]
- [CommandMethod("PurgeBlocks")]
- public static void PurgeBlocks()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- using (Transaction Tx =
- db.TransactionManager.StartTransaction())
- {
- BlockTable table = Tx.GetObject(db.BlockTableId,
- OpenMode.ForRead) as BlockTable;
- ObjectIdCollection blockIds = new ObjectIdCollection();
- // используем цикл do/while для очистки вложенных блоков.
- do
- {
- blockIds.Clear();
- foreach (ObjectId id in table)
- blockIds.Add(id);
- // этот метод удалит из набора все используемые
- // в чертеже блоки
- db.Purge(blockIds);
- foreach (ObjectId id in blockIds)
- {
- DBObject obj = Tx.GetObject(id, OpenMode.ForWrite);
- obj.Erase();
- }
- } while (blockIds.Count != 0);
- Tx.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/12/deleting-un-used-blocks.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=345
Опубликовано 25.11.2013