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

ADN Club => AutoCAD .NET API => Тема начата: pavka_97 от 24-01-2021, 12:13:18

Название: Исправить eInvalidextents программно
Отправлено: pavka_97 от 24-01-2021, 12:13:18
Добрый день. Попадаются файлы у которых xref имеет eInvalidExtents (чаще всего конвертированные файлы из ArchiCAD). Методы WblockCloneObject, ReadDwgFile,Wblock не помогают. Помогает обычный копипаст в новый файл файла-ссылки. Можно ли это исправить программно каким либо другим способом?
Название: Re: Исправить eInvalidextents программно
Отправлено: Привалов Дмитрий от 24-01-2021, 14:05:47
Можно ли это исправить программно каким либо другим способом?

Возможно в чертеже присутствуют объекты, которые имеют eInvalidExtents и мешают определить Extents ссылки.
При копировании они либо не попадают в выбор, либо исправляются при вставке.
Название: Re: Исправить eInvalidextents программно
Отправлено: pavka_97 от 24-01-2021, 16:14:30
исправляются при вставке
Проанализировал пару файлов -ссылок. eInvalidExtents у вставок блоков внутри которых атрибуты. В этом конкретном случае напрашивается аналог Burst, а затем создание нового блока.
а есть какой-то универсальный механизм нормализации extents?
Название: Re: Исправить eInvalidextents программно
Отправлено: Александр Ривилис от 24-01-2021, 20:40:55
а есть какой-то универсальный механизм нормализации extents?
Нет. Но я так понимаю, что проблема с пустыми атрибутами, текстами и т.д. Так что думай в эту сторону.
Название: Re: Исправить eInvalidextents программно
Отправлено: pavka_97 от 25-01-2021, 16:37:36
Так что думай в эту сторону.
Подумал. Причина в странном RotatedDimension. Он невидимый и у него eInvalidExtents. Но при изменении свойства его слоя, либо stretch, move итд. он становится видимым. Есть ли у этого размера какое-нибудь подходящее свойство в API, которое определяет это "странное" состояние?
Название: Re: Исправить eInvalidextents программно
Отправлено: Александр Ривилис от 25-01-2021, 16:50:13
Есть ли у этого размера какое-нибудь подходящее свойство в API, которое определяет это "странное" состояние?
Блок, на который он ссылается пустой, т.е. в нём нет ни одного примитива. Именно поэтому размер невидим и у него eInvalidExtents. Чтобы его исправить нужно вызвать Dimension.RecomputeDimensionBlock(true). Собственно говоря любое изменение свойств размера приводит к вызову Dimension.RecomputeDimensionBlock(true).
Ну а чтобы просто проверить нормальный размер или нет нужно получить его блок: Dimension.DimBlockId и посмотреть его содержимое - если ничего нет, то и будет eInvalidExtents.