ePermanentlyErased при получении слоев

Автор Тема: ePermanentlyErased при получении слоев  (Прочитано 2591 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Всем привет. Имеется вот такое свойство (ну можно сказать - метод):
Код - C# [Выбрать]
  1. public static List<string> Layers
  2. {
  3.     get
  4.     {
  5.         var layers = new List<string>();
  6.         using (Document.LockDocument())
  7.         {
  8.             using (OpenCloseTransaction tr = Database.TransactionManager.StartOpenCloseTransaction())
  9.             {
  10.                 LayerTable lt = tr.GetObject(Database.LayerTableId, OpenMode.ForRead) as LayerTable;
  11.                 if (lt != null)
  12.                 {
  13.                     foreach (ObjectId layerId in lt)
  14.                     {
  15.                         var layer = tr.GetObject(layerId, OpenMode.ForRead) as LayerTableRecord;
  16.                         if (layer != null)
  17.                             layers.Add(layer.Name);
  18.                     }
  19.                 }
  20.             }
  21.         }
  22.         return layers;
  23.     }
  24. }
Этот метод выдает иногда ошибку ePermanentlyErased. Переводится вроде как "Стерт навсегда".
У меня два вопроса:
1. Что это за условие такое, при котором может быть такая ошибка? Я сам не сталкивался (только по отчетам) и никак не могу понять какие условия возникновения такой ошибки могут быть
2. Достаточно ли будет добавить такую проверку:
Код - C# [Выбрать]
  1. if (layer != null && !layer.IsErased && !layer.IsEraseStatusToggled)
  2.     layers.Add(layer.Name);
?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: ePermanentlyErased при получении слоев
« Ответ #1 : 19-08-2019, 23:24:11 »
Не уверен, но мне кажется я сталкивался с этим эксепшеном и заблокировал просто по IsErased

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: ePermanentlyErased при получении слоев
« Ответ #2 : 20-08-2019, 00:03:18 »
но мне кажется я сталкивался с этим эксепшеном
Специально получалось создать условия возникновения ошибки? Не программно, а какими-то действиями в автокаде

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: ePermanentlyErased при получении слоев
« Ответ #3 : 20-08-2019, 00:10:26 »
Боюсь соврать, но кажется я пытался сделать выпадающий список с именами слоев... или ошибка потом вылезала, потому что слой уже в самом деле удален был... Вот кроме впечатляющего ePermanentlyErased уже ничего не помню :)

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: ePermanentlyErased при получении слоев
« Ответ #4 : 20-08-2019, 00:13:19 »
Я стараюсь еще до вызова GetObject всегда проверять ObjectId на IsErased  - оно так безопасней и по идее быстрей.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: ePermanentlyErased при получении слоев
« Ответ #5 : 20-08-2019, 07:23:11 »
2. Достаточно ли будет добавить такую проверку:
Попробуй так:
var layer = tr.GetObject(layerId, OpenMode.ForRead, false) as LayerTableRecord;

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ePermanentlyErased при получении слоев
« Ответ #6 : 20-08-2019, 08:55:31 »
но мне кажется я сталкивался с этим эксепшеном
Специально получалось создать условия возникновения ошибки? Не программно, а какими-то действиями в автокаде
_PURGE, которое почистит неиспользуемые слои. Они же физически не удаляются, а только помечаются как удаленные. И только сохранение чертежа и повторное его открытие удаляет их физически.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ePermanentlyErased при получении слоев
« Ответ #7 : 20-08-2019, 10:22:07 »
Может быть это слои удалённой внешней ссылки?