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

ADN Club => AutoCAD .NET API => Тема начата: avc от 27-09-2016, 16:12:34

Название: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: avc от 27-09-2016, 16:12:34
Мои знакомые инженеры отказываются переходить на 2017 т.к. не могут открывать в нем старые чертежи. Виды, сделанные через ViewBase (БазВид) не показывают ничего или показывают кусочки модели. Когда я взялся решить эту проблему, я был уверен, что плагин ModelDoc просто не имеет нормальной обратной совместимости и надо создавать виды заново. Но вновь созданные  виды тоже не работали и я занялся чисткой чертежей. Я написал программку, которая убивала все объекты AcDbViewBorder, AcDbDetailSymbol и AcDbSectionSymbol. Потом нашел мусор в словарях и удалил словари SY_IDW_DICT_ROOT, SY_IDW_VERSION и SY_ROOT_DICTIONARY (Похоже плагин ModelDoc когда то назывался Synergy). Но даже в таком стерильном документе новые виды по старой модели не строились. Я понял, что дело не в совместимости версий. Есть объекты чертежа, с которыми 2015 работает нормально, а 2017 не справляется (про 2016 мнения народа расходятся). Пару дней помучился – нашел-таки эти объекты. Это зеркальные блоки. Если любой солид загнать в блок и потом вызвать Mirror для блока – то ViewBase уже ничего не покажет. Или покажет только первый, незеркальный блок. Напоровшись на зеркальный блок, плагин прекращает отрисовку без всяких сообщений об ошибках. Все нормальные объекты, которые он еще не успел прочертить, прочерчены не будут. Ребята из моей команды используют Mirror ежеминутно – удобно расставлять симметричные объекты. Поэтому все старые чертежи не отображались. Проблема нигде не упоминается в интернете (или я не нашел?) и я стал искать, что можно сделать. Дальше уже чистые танцы с бубном без всякой логики.
Я заметил, что зеркальность отображается в свойствах блока как Scale X = -1. Иногда Зеркало по Z выворачивает объекты. Если изменить масштаб хотя бы чуть-чуть, на -1.0000001 – ViewBase сразу заработает! А в чертеже это не видно. Ура! Пишу программу и получаю банан – большинство больных BlockReference не принимает даже своей собственной матрицы трансформации. Т.е.  br.BlockTransform = br.BlockTransform вызывает ошибку. Автокад сам считает недопустимой трансформацию, сделанную его же командой Mirror. Но можно поиграться с br.ScaleFactors. Тут еще много приколов. Часто недостаточно обновить только зеркальный блок, надо еще потеребить остальные ссылки на этот же блок. Часто Автокад просто отказывается присваивать новый ScaleFactors – никаких ошибок, но у объекта остался старый ScaleFactors. Помогает трансформация по матрице масштабирования. Но и она может игнорироваться, если коэффициент масштабирования меньше чем 1.00001 (т.е. автокад считает 1.000001 == 1). Короче, работающий бубен я, в конце концов, сделал. Если кто хочет покамлать – опубликую код. Но если опять вызвать Mirror, то и с бубном надо танцевать заново. А ошибка от масштабирований будет накапливаться. Вернуть Scale X обратно на -1 нельзя – опять отключатся виды.
Если кто знает менее шаманский метод – напишите пожалуйста.
p.s. извиняюсь за многословность. Долго шаманил, дым в голове :)
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: Александр Ривилис от 27-09-2016, 16:25:19
Долго шаманил, дым в голове :)
Это точно. br - это я так понял BlockReference. Вместо присваивания br.BlockTransform попробуй выполнить br.TransformBy.
А вообще, если это таки баг в 2017, то его нужно отправить в Autodesk не откладывая в долгий ящик. Может еще исправят.
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: avc от 27-09-2016, 16:30:02
Да, я и пишу дальше, что Помогает трансформация по матрице масштабирования
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: Александр Ривилис от 27-09-2016, 16:55:40
Если хочешь, чтобы я отправил в Autodesk как баг, то:
1. Приложи чертеж, в котором это видно.
2. Сделай видео как это работает в AutoCAD 2016 (Autodesk Screencast)
3. Сделай видео как это работает в AutoCAD 2017. Надеюсь, что SP1 установлен.
4. Напиши количество пользователей, которых по твоим сведениям затрагивает это баг.
Видео желательно в английской версии, но в крайнем случае сойдет и в русской.
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: Александр Ривилис от 27-09-2016, 17:16:19
Стоп. Можно ничего не готовить. Баг известный. Его описали пять дней назад: https://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/viewbase-command-generates-incomplete-views-in-autocad.html
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: avc от 27-09-2016, 17:32:21
Я так и знал! :)
Странно, что раньше не описали - мне все инженеры уже пол года про это жужжат.
И там не написано, что проблема только с зеркальными блоками.
И проблему не устранить, как написано, одним масштабированием всего чертежа. Если блоки вложены в блоки - надо проходить всю рекурсию.
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: Александр Ривилис от 27-09-2016, 17:40:08
И проблему не устранить, как написано, одним масштабированием всего чертежа. Если блоки вложены в блоки - надо проходить всю рекурсию.
Так они же предложили все блоки расчленить!!!
Название: Re: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков
Отправлено: avc от 27-09-2016, 17:50:04
Цитировать
do one of the following suggestions
т.е. они думают, что отмасштабировать достаточно. Таки нет.