Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: pavka_97 от 24-01-2021, 12:13:18
-
Добрый день. Попадаются файлы у которых xref имеет eInvalidExtents (чаще всего конвертированные файлы из ArchiCAD). Методы WblockCloneObject, ReadDwgFile,Wblock не помогают. Помогает обычный копипаст в новый файл файла-ссылки. Можно ли это исправить программно каким либо другим способом?
-
Можно ли это исправить программно каким либо другим способом?
Возможно в чертеже присутствуют объекты, которые имеют eInvalidExtents и мешают определить Extents ссылки.
При копировании они либо не попадают в выбор, либо исправляются при вставке.
-
исправляются при вставке
Проанализировал пару файлов -ссылок. eInvalidExtents у вставок блоков внутри которых атрибуты. В этом конкретном случае напрашивается аналог Burst, а затем создание нового блока.
а есть какой-то универсальный механизм нормализации extents?
-
а есть какой-то универсальный механизм нормализации extents?
Нет. Но я так понимаю, что проблема с пустыми атрибутами, текстами и т.д. Так что думай в эту сторону.
-
Так что думай в эту сторону.
Подумал. Причина в странном RotatedDimension. Он невидимый и у него eInvalidExtents. Но при изменении свойства его слоя, либо stretch, move итд. он становится видимым. Есть ли у этого размера какое-нибудь подходящее свойство в API, которое определяет это "странное" состояние?
-
Есть ли у этого размера какое-нибудь подходящее свойство в API, которое определяет это "странное" состояние?
Блок, на который он ссылается пустой, т.е. в нём нет ни одного примитива. Именно поэтому размер невидим и у него eInvalidExtents. Чтобы его исправить нужно вызвать Dimension.RecomputeDimensionBlock(true). Собственно говоря любое изменение свойств размера приводит к вызову Dimension.RecomputeDimensionBlock(true).
Ну а чтобы просто проверить нормальный размер или нет нужно получить его блок: Dimension.DimBlockId и посмотреть его содержимое - если ничего нет, то и будет eInvalidExtents.