eInvalidExtents при получении габаритов полилинии

Автор Тема: eInvalidExtents при получении габаритов полилинии  (Прочитано 1020 раз)

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

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 426
  • Карма: 1
Здравствуйте!

Хватаю ошибку eInvalidExtents при получении габаритов полилинии. При попытке выловить сбойный объект по handle через MGDDBG получаю тоже ошибку -  нет такого ObjectId. Однако под отладчиком ObjectId виден и Handle тоже. На форуме нашел информацию о eInvalidExtents в случае пустого текста, но у меня не текст.
Что это может быть и как его исправить если этот объект MGDDBG не находит?








Код метода с ошибкой, но на большей части полилиний он работает нормально, только доходя до этой падает

Код - C# [Выбрать]
  1. public static bool IsInBuildingRegion(Entity ent, ObjectIdCollection boundaries, Transaction tr)
  2.         {
  3.             bool valid = false;
  4.  
  5.             if (ent is Curve)
  6.             {
  7.                 Curve pline = ent as Curve;
  8.  
  9.                 Point2dCollection points = new Point2dCollection();
  10.                 points.Add(new Point2d(pline.GeometricExtents.MaxPoint.X, pline.GeometricExtents.MaxPoint.Y));
  11.                 points.Add(new Point2d(pline.GeometricExtents.MinPoint.X, pline.GeometricExtents.MinPoint.Y));
  12.  
  13.                 foreach (ObjectId boundaryId in boundaries)
  14.                 {
  15.                     Polyline boundary = (Polyline)tr.GetObject(boundaryId, OpenMode.ForWrite, false, true);
  16.  
  17.                     foreach (var point in points)
  18.                     {
  19.                         if (IsPointInPolygon(boundary, point))
  20.                         {
  21.                             valid = true;
  22.                         }
  23.                     }
  24.                 }
  25.             }
  26.             return valid;
  27.         }

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

  • Administrator
  • *****
  • Сообщений: 13064
  • Карма: 1684
  • Рыцарь ObjectARX
  • Skype: rivilis
Atomohod,
1. Проверь тип объекта.
2. Убедись, что он не удален
3. Если это полилиния, то убедись что у неё количество вершин не меньше двух.
То что по Handle ты не находишь объект говорит о том, что он или удалён или в другой базе или ты неправильно задал Handle.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13064
  • Карма: 1684
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, если ты создаёшь объект и добавляешь его в базу в транзакции и не завершаешь её (например, возникает исключение или забыл вызвать Transaction.Commit() ), то происходит откат транзакции и объекта в базе нет и соответственно по Handle ты  получишь нулевой ObjectId
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 426
  • Карма: 1
например, возникает исключение или забыл вызвать Transaction.Commit()
Этот момент я проверил - все в порядке, кроме того обрабатываемые полилинии массово создаются другим моим кодом в едином цикле, и с другими линиями таких проблем нет. База у меня одна и та же - я работаю только с текущим открытым чертежом. Cвойство erased у полилинии false.
Что по итогу мне помогло - у этой сбойной полилинии свойство Area равно 0. По нему удалось выбросить эту сбойную полилинию из обработки. Но причина появления битой полилинии по- прежнему не ясна - не могу найти где ошибка.

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

  • Administrator
  • *****
  • Сообщений: 13064
  • Карма: 1684
  • Рыцарь ObjectARX
  • Skype: rivilis
Но причина появления битой полилинии по- прежнему не ясна - не могу найти где ошибка.
Интересно понять что с ней не так. Если ты нашел её, то можешь определить и количество её вершин, да и координаты вершин...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение