Чтение испорченной базы чертежа

Автор Тема: Чтение испорченной базы чертежа  (Прочитано 6474 раз)

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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Получаю примитивы из базы данных
Какую инструкцию мне написать для проверки "плохого объекта".

Возникает ошибка eNullObjectID

Ситуацию конечно спасает команда _AIDIT, которая исправляет ошибки
в базе, после проблем с файлов не возникает

Делаю вот так:

Код - C# [Выбрать]
  1. using CAD_DBS = Autodesk.AutoCAD.DatabaseServices;
  2. using CAD_APS = Autodesk.AutoCAD.ApplicationServices;
  3. CAD_APS.Document doc = CAD_APS.Application.DocumentManager.MdiActiveDocument;
  4. CAD_DBS.Database db = HostApplicationServices.WorkingDatabase;
  5. using (Transaction tr = db.TransactionManager.StartTransaction()) {
  6.    BlockTableRecord btRecord = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);
  7.       foreach (ObjectId id in btRecord) {
  8.       // Как мне обработать ошибку eNullObectID?
  9.       // все ли объекты я могу преобразовывать в CAD_DBS.Entity?  
  10.          CAD_DBS.Entity ent = (CAD_DBS.Entity)tr.GetObject(id, OpenMode.ForRead);
  11.       }
  12.       tr.Commit();
  13.    }



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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Чтение испорченной базы чертежа
« Ответ #1 : 19-11-2018, 23:02:03 »
А почему-бы так и не проверить?
Код - C# [Выбрать]
  1. if (id != ObjectId.Null)
  2. {.....}

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Чтение испорченной базы чертежа
« Ответ #2 : 19-11-2018, 23:17:35 »
Спасибо, попробую.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Чтение испорченной базы чертежа
« Ответ #3 : 20-11-2018, 12:02:03 »
У ObjectId есть:
Код - C# [Выбрать]
  1.         public bool IsEffectivelyErased { get; }
  2.         public bool IsErased { get; }
  3.         public bool IsNull { get; }
  4.         public bool IsResident { get; }
  5.         public bool IsValid { get; }

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Чтение испорченной базы чертежа
« Ответ #4 : 20-11-2018, 13:02:17 »
Пробовал только IsValid не помогло.
Видимо нужно все варианты перебрать


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Чтение испорченной базы чертежа
« Ответ #5 : 20-11-2018, 13:17:12 »
eNullObjectID
Если исключение именно это, то должно быть достаточно проверки IsNull. Единственно что, возможно, что это не ObjectId примитива нулевой, а например, ObjectId слоя или типа линии или и т.д этого примитива. Короче говоря в этой ситуации нужно сразу прекращать работу и сообщать пользователю, что необходимо восстановить чертеж.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение