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

22/11/2013

Удаление неиспользуемых слоёв из чертежа

Метод Database.Purge можно использовать для идентификации неиспользованных слоёв. Если установлено что слой неиспользованный, то его можно безопасно удалять из базы при помощи метода “erase”.

Заметим, что логика очень похожа на логику удаления неиспользованных зарегистрированных приложений из чертежа.

Код - C#: [Выделить]
  1. [CommandMethod("PurgeLayers")]
  2. public static void PurgeLayers()
  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.         LayerTable table = Tx.GetObject(db.LayerTableId,
  12.             OpenMode.ForRead) as LayerTable;
  13.  
  14.         ObjectIdCollection layIds = new ObjectIdCollection();
  15.         foreach (ObjectId id in table)
  16.         {
  17.             layIds.Add(id);
  18.         }
  19.  
  20.         // этот метод позволяет идентифицировать
  21.         // слои, которые не использовались в файле чертежа
  22.         db.Purge(layIds);
  23.  
  24.         foreach (ObjectId id in layIds)
  25.         {
  26.             DBObject obj = Tx.GetObject(id, OpenMode.ForWrite);
  27.             obj.Erase();
  28.         }
  29.         Tx.Commit();
  30.     }
  31. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/05/delete-un-used-layers-from-database.html

 

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

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