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

15/11/2013

Генерирование данных об использовании слоёв перед очисткой/удалением

Иногда случается, что не удаётся очистить слой и его свойство "IsUsed" возвращает true даже если этот слой не используется. Причина этого в том, что AutoCAD хранит информацию об использованных слоях и обновляет её только тогда, когда это требуется. Чтобы форсировать обновление этих данных следует использовать  метод "GenerateUsageData" объекта LayerTable.

Это пример кода, который пытается удалить записи таблицы слоёв после вызова "GenerateUsageData".

Код - C#: [Выделить]
  1. [CommandMethod("Test")]
  2. public void TestMethod()
  3. {
  4.     Document document
  5.             = Application.DocumentManager.MdiActiveDocument;
  6.     Database db = document.Database;
  7.     using (Transaction tr
  8.                     = db.TransactionManager.StartTransaction())
  9.     {
  10.         LayerTable lt = tr.GetObject(
  11.                                         db.LayerTableId,
  12.                                         OpenMode.ForRead
  13.                                     ) as LayerTable;
  14.         lt.GenerateUsageData();
  15.         foreach (ObjectId oid in lt)
  16.         {
  17.             LayerTableRecord ltr = tr.GetObject
  18.                                             (
  19.                                                 oid,
  20.                                                 OpenMode.ForRead
  21.                                             ) as LayerTableRecord;
  22.             if (ltr.IsUsed == false)
  23.             {
  24.                 ltr.UpgradeOpen();
  25.                 ltr.Erase();
  26.             }
  27.         }
  28.         tr.Commit();
  29.     }
  30. }

Источник: http://adndevblog.typepad.com/autocad/2012/05/generate-layer-usage-data-before-purgedelete.html

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

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