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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 19-11-2018, 22:56:50

Название: Чтение испорченной базы чертежа
Отправлено: Алексей (IdeaSoft) от 19-11-2018, 22:56:50
Получаю примитивы из базы данных
Какую инструкцию мне написать для проверки "плохого объекта".

Возникает ошибка 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.    }


Название: Re: Чтение испорченной базы чертежа
Отправлено: Александр Пекшев aka Modis от 19-11-2018, 23:02:03
А почему-бы так и не проверить?
Код - C# [Выбрать]
  1. if (id != ObjectId.Null)
  2. {.....}
Название: Re: Чтение испорченной базы чертежа
Отправлено: Алексей (IdeaSoft) от 19-11-2018, 23:17:35
Спасибо, попробую.
Название: Re: Чтение испорченной базы чертежа
Отправлено: Владимир Шу от 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; }
Название: Re: Чтение испорченной базы чертежа
Отправлено: Алексей (IdeaSoft) от 20-11-2018, 13:02:17
Пробовал только IsValid не помогло.
Видимо нужно все варианты перебрать

Название: Re: Чтение испорченной базы чертежа
Отправлено: Александр Ривилис от 20-11-2018, 13:17:12
eNullObjectID
Если исключение именно это, то должно быть достаточно проверки IsNull. Единственно что, возможно, что это не ObjectId примитива нулевой, а например, ObjectId слоя или типа линии или и т.д этого примитива. Короче говоря в этой ситуации нужно сразу прекращать работу и сообщать пользователю, что необходимо восстановить чертеж.