Исправить eInvalidextents программно

Автор Тема: Исправить eInvalidextents программно  (Прочитано 3708 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Добрый день. Попадаются файлы у которых xref имеет eInvalidExtents (чаще всего конвертированные файлы из ArchiCAD). Методы WblockCloneObject, ReadDwgFile,Wblock не помогают. Помогает обычный копипаст в новый файл файла-ссылки. Можно ли это исправить программно каким либо другим способом?

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

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Исправить eInvalidextents программно
« Ответ #1 : 24-01-2021, 14:05:47 »
Можно ли это исправить программно каким либо другим способом?

Возможно в чертеже присутствуют объекты, которые имеют eInvalidExtents и мешают определить Extents ссылки.
При копировании они либо не попадают в выбор, либо исправляются при вставке.

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

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Исправить eInvalidextents программно
« Ответ #2 : 24-01-2021, 16:14:30 »
исправляются при вставке
Проанализировал пару файлов -ссылок. eInvalidExtents у вставок блоков внутри которых атрибуты. В этом конкретном случае напрашивается аналог Burst, а затем создание нового блока.
а есть какой-то универсальный механизм нормализации extents?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исправить eInvalidextents программно
« Ответ #3 : 24-01-2021, 20:40:55 »
а есть какой-то универсальный механизм нормализации extents?
Нет. Но я так понимаю, что проблема с пустыми атрибутами, текстами и т.д. Так что думай в эту сторону.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Исправить eInvalidextents программно
« Ответ #4 : 25-01-2021, 16:37:36 »
Так что думай в эту сторону.
Подумал. Причина в странном RotatedDimension. Он невидимый и у него eInvalidExtents. Но при изменении свойства его слоя, либо stretch, move итд. он становится видимым. Есть ли у этого размера какое-нибудь подходящее свойство в API, которое определяет это "странное" состояние?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исправить eInvalidextents программно
« Ответ #5 : 25-01-2021, 16:50:13 »
Есть ли у этого размера какое-нибудь подходящее свойство в API, которое определяет это "странное" состояние?
Блок, на который он ссылается пустой, т.е. в нём нет ни одного примитива. Именно поэтому размер невидим и у него eInvalidExtents. Чтобы его исправить нужно вызвать Dimension.RecomputeDimensionBlock(true). Собственно говоря любое изменение свойств размера приводит к вызову Dimension.RecomputeDimensionBlock(true).
Ну а чтобы просто проверить нормальный размер или нет нужно получить его блок: Dimension.DimBlockId и посмотреть его содержимое - если ничего нет, то и будет eInvalidExtents.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение