Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков

Автор Тема: Чертежи ModelDoc (ViewBase) в AutoCAD 2017 не показывают зеркальных блоков  (Прочитано 10298 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Мои знакомые инженеры отказываются переходить на 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. извиняюсь за многословность. Долго шаманил, дым в голове :)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Долго шаманил, дым в голове :)
Это точно. br - это я так понял BlockReference. Вместо присваивания br.BlockTransform попробуй выполнить br.TransformBy.
А вообще, если это таки баг в 2017, то его нужно отправить в Autodesk не откладывая в долгий ящик. Может еще исправят.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Да, я и пишу дальше, что Помогает трансформация по матрице масштабирования

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Если хочешь, чтобы я отправил в Autodesk как баг, то:
1. Приложи чертеж, в котором это видно.
2. Сделай видео как это работает в AutoCAD 2016 (Autodesk Screencast)
3. Сделай видео как это работает в AutoCAD 2017. Надеюсь, что SP1 установлен.
4. Напиши количество пользователей, которых по твоим сведениям затрагивает это баг.
Видео желательно в английской версии, но в крайнем случае сойдет и в русской.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Стоп. Можно ничего не готовить. Баг известный. Его описали пять дней назад: https://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/viewbase-command-generates-incomplete-views-in-autocad.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Я так и знал! :)
Странно, что раньше не описали - мне все инженеры уже пол года про это жужжат.
И там не написано, что проблема только с зеркальными блоками.
И проблему не устранить, как написано, одним масштабированием всего чертежа. Если блоки вложены в блоки - надо проходить всю рекурсию.

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

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

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Цитировать
do one of the following suggestions
т.е. они думают, что отмасштабировать достаточно. Таки нет.