Что Не Так С 3D Pdf И Edrawings. Как Мы Заменили Просмотрщик 3D Моделей В Нашем Приложении

Это история о том, как мы интегрировали новый C3D Viewer в систему управления жизненным циклом изделия ЛОЦМАН:PLM, зачем мы это сделали и что мы получили.



Что не так с 3D PDF и eDrawings. Как мы заменили просмотрщик 3D моделей в нашем приложении



.

1 Что такое «вторичное представительство»

Любое PLM-решение, о котором стоит упомянуть, включает в себя механизм/подсистему PDM (управление данными о продукте).

В базе данных системы PDM хранятся документы и файлы, созданные в различных CAD-системах: 3D-модели, чертежи, спецификации и расчеты.

Чтобы содержимое этих документов было доступно тем пользователям, у которых на рабочем месте не установлены соответствующие CAD-приложения (а они могут быть очень дорогими), система PDM генерирует «вторичное представление документа» — копию документ в каком-то «нейтральном» общедоступном формате.

После загрузки «вторичного представления» в систему его можно использовать для создания предварительного просмотра содержимого документа непосредственно в клиентском интерфейсе системы PDM; использовать в качестве средства при обмене информацией с внешними пользователями, в процессах утверждения и при обмене комментариями с использованием примечаний и аннотаций.



.

2 Вторичная подача в PILOTS:PLM

В разное время «вторичным представлением» 3D-моделей в LOTSMAN:PLM попеременно выступали VRML, eDrawings и 3D PDF. Про ВРМЛ говорить не буду – ошибки молодости… ни с кем не случаются.

eDrawings был неплохим, но за разработку адаптера для него и услуги поддержки приходилось платить весьма нескромные деньги.

Кроме того, начиная с 2014 года eDrawings стал доступен только в версии x64. Даже если бы мы захотели, мы больше не смогли бы встроить его в наш 32-битный клиент LOTSMAN:PLM как ActiveX. Поначалу 3D PDF казался подарком - бесплатный, уже установленный на каждом первом компьютере, фактический стандарт в нашем рукаве галактики плюс готовая библиотека ActiveX, пригодная для встраивания, но со временем начала проявляться его темная сторона.

откроется нам:

  1. Мы имеем право распространять Acrobat Reader в нашем дистрибутиве.

    Оказалось, что Acrobat Reader устанавливается не на каждом первом компьютере.

    Иногда установлена несовместимая версия Acrobat Reader, а иногда – совершенно другое приложение для просмотра PDF, несовместимое с Acrobat Reader и, в то же время, очень дорогое сердцу пользователя.

  2. Вектор развития Acrobat Reader непредсказуем.

    Каждый выпуск полон сюрпризов и пополняет наш арсенал инструментов, предназначенных для автоматического закрытия ненужных окон сообщений, минимизации раздражающих панелей и установки плохо документированных опций.

  3. Выпуск обновления Acrobat Reader является внезапным и неизбежным.

    Об этом мы узнаем из сообщений пользователей о том, что наше «вторичное представление» перестало работать.

  4. Обратная связь от разработчика, наверное, возможна, но, как показывает регулярное изучение печальных форумов, бесперспективна.

  5. Иногда использование Acrobat Reader ActiveX приводит к сбою приложения.

    Наконец мы пришли к использованию SafeMode в Acrobat Reader. В этом режиме периодически происходит сбой только скрытого дочернего процесса Acrobat Reader, а наше приложение продолжает работать.

  6. ActiveX Acrobat Reader доступен только в 32-битной версии без каких-либо опций.

И самое главное неудовлетворительная производительность при работе с большими моделями (сборками):
  • Низкая скорость экспорта из КОМПАС-3D в 3D PDF. Возможно, часть ответственности лежит на КОМПАС-3D, но это то, что есть.

  • Большой размер файла 3D PDF, что увеличивает нагрузку на файловую систему и сеть и требует больше оперативной памяти.

    Поиск оптимальных настроек по соотношению точности вывода модели и размера файла не дал приемлемых результатов.

  • Медленная скорость загрузки больших моделей 3D PDF.
  • Скорость/качество рендеринга больших файлов неудовлетворительны.



.

3 Знакомство с C3D Viewer

Мы всегда с интересом следили за успехами и инновациями C3D Labs (все-таки дочерняя компания АСКОН, коллеги).

Появление нового C3D Viewer не осталось незамеченным.

Получив доступ к ранним бета-версиям продукта, мы провели сравнительное исследование функциональности и производительности.

Результаты исследования вдохновили нас на запуск проекта, результатом которого стало внедрение компонента C3D Viewer как средства просмотра и аннотирования вторичного представления 3D-моделей в LOTSMAN:PLM.
  • Сохранение в формате C3D происходит быстрее по сравнению с PDF – от 6 до 18 раз! Никакой корреляции с размером моделей и количеством компонентов не было.

  • Файлы C3D в 2–39 раз меньше файлов PDF!
  • Скорость загрузки файлов C3D в 6–264 раза выше, чем загрузка PDF-файлов.

    Никакой корреляции с размером моделей и количеством компонентов не было.

  • Качество и плавность отображения при вращении C3D Viewer значительно превосходит качество Adobe Reader. По неизвестным причинам не всегда удавалось измерить FPS в Adobe Reader. В тех случаях, когда попытки измерения были успешными, FPS не превышал значения «5».

    C3D Viewer работает со скоростью 30-100++ FPS на разных моделях.

Интерес к проекту был обоюдный, что как нельзя лучше сказалось на качестве взаимодействия с разработчиками и скорости решения различных задач.

По нашему заказу команда C3D Labs разработала функционал аннотирования 3D-моделей и обеспечила локализацию на русский язык.

Ряд улучшений API C3D Viewer обусловлен спецификой использования компонента в нашем приложении.

В результате в API появились новые методы и события, что позволило реализовать собственный механизм индикации хода загрузки модели и аварийного прерывания/отмены загрузки.

А раз уж я упомянул о дороговизне eDrawings, то справедливости ради надо сказать, что C3D Viewer для нас тоже не бесплатен, но условия его использования гораздо доступнее.



.

4 Встраивание

Вначале следует дать краткое техническое описание системы, в которую нам предстояло интегрировать C3D Viewer - клиентское приложение ЛОЦМАН:PLM. Это настольное Win32-приложение с интерфейсом MDI, написанное на Delphi 2006. Компоновка дочерних окон MDI является динамической, построенной на основе описания набора взаимосвязанных «панелей», каждая из которых представляет некоторый аспект информации об указанном объекте.

Программный компонент C3D Viewer представляет собой библиотеку ActiveX COM (C++, Qt).

API простой и компактный, ключевые операции асинхронны и выполняются в отдельном потоке, поэтому взаимодействие с компонентом основано на вызове методов и обработке событий.

Прототип модуля просмотра вторичного вида был собран и интегрирован в ЛОЦМАН:PLM всего за пару часов, а вот прочие «мелочи» заняли гораздо больше времени.

Мы реализовали собственные панели инструментов, контекстное меню, панель, отображающую структуру модели, и панель со списком аннотаций — в нужном нам объёме и форме, в соответствии с общим визуальным стилем интерфейса приложения.

Мы используем компонент в нескольких режимах работы со вторичным видом: встроенный вид, полноэкранный режим и режим аннотаций.



Что не так с 3D PDF и eDrawings. Как мы заменили просмотрщик 3D моделей в нашем приложении



Что не так с 3D PDF и eDrawings. Как мы заменили просмотрщик 3D моделей в нашем приложении



Какие были трудности?



Импорт описания библиотеки типов

Одной из первых проблем было то, что Delphi 2006 некорректно импортировал описание библиотеки типов из ActiveX C3D Viewer, написанного на C++ с использованием Qt. Из этого мы выходили с помощью утилиты импорта библиотеки типов Delphi 2010, которая, однако, тоже не дала 100% правильного результата — десяток строчек всё равно пришлось исправлять «вручную».



Трудности «усыновления»

В нашем приложении пользователю доступен редактор макетов WYSIWYG, который позволяет добавлять и перемещать «панели» с информацией.

На одной из этих панелей находится средство просмотра ActiveX C3D Viewer. Оказалось, что при перемещении панели с ActiveX C3D Viewer в другой «контейнер» она частично «разрушается».

Мы выяснили, что причина в конкретной реализации механизма смены родительского окна VCL Delphi. Если кратко, то конечным результатом является вызов функции winapi DestroyWindow ActiveX C3D Viewer, после чего он начинает считать себя «убитым», а Delphi тем временем продолжает считать его «живым».

Мы обошли эту проблему, поместив ActiveX в специальный контейнер, который может обнаружить изменение родительского окна, и в этот момент корректно освобождает ActiveX и воссоздает его.



Проблемы с памятью

У нас 32-битное приложение, и «Недостаточно памяти» никто не отменял.

Возможность появления огромных сборок в условиях ограниченности 2 ГБ оперативной памяти неизбежно приводила к тому, что проблема обострялась.

Особенно острым было то, что если бы память закончилась во время загрузки модели в C3D Viewer, это привело бы к неожиданному сбою всего приложения.

Причину установили не сразу.

Мне пришлось разработать собственный отладчик PostMortem на основе профилировщика выборки, который восстанавливал стек с использованием отладочной информации JDBG. Поняв причину, мы начали с увеличения лимита доступной оперативной памяти до 3,5 ГБ, добавления флага IMAGE_FILE_LARGE_ADDRESS_AWARE в заголовок EXE и немного уменьшили потребление памяти в нашем приложении, но результат не порадовал.

Дело в том, что если у вас 32-битное MDI-приложение (с многооконным интерфейсом), то пользователь в принципе может открыть неограниченное количество окон по здравому смыслу.

И он обязательно это сделает. Имеет право на.

Чтобы снизить вероятность возникновения проблем, связанных с нехваткой памяти, мы встроили в приложение механизм мониторинга и оптимизации использования памяти.

При достижении определенного предела неактивные в данный момент MDI-окна переходят в «спящий режим», тем самым освобождая ресурсы.



Проблемы с виртуальными машинами

Для отображения C3D Viewer требуется версия OGL не ниже 2.1. Мы пробовали разные виртуальные машины, вот некоторая информация об этом: Hyper-V — средство просмотра C3D не работает. Virtual Box 4.1.44 + Window 7 - C3D Viewer работает. VMWare Player v14 (Ускорение 3D-графики + OGL v3 в настройках) — C3D Viewer работает. В результате активная фаза разработки и отладки нового просмотрщика заняла около двух месяцев.

Еще две-три недели мы потратили на исправление ошибок.



.

5 Что впереди

В следующих версиях C3D Viewer мы надеемся увидеть функции динамического сечения, измерений модели, новые возможности работы с PMI, настройки модели совместно с КОМПАС-3D и ЛОЦМАН:ПЛМ.



P.S.

Для знакомства с C3D Viewer есть бесплатная версия (скачать Здесь ).

Он не включает API и некоторые другие функции.

Встраиваемую версию можно запросить у разработчиков C3D Labs для тестирования.



Что не так с 3D PDF и eDrawings. Как мы заменили просмотрщик 3D моделей в нашем приложении

Сергей Ершов, руководитель группы прикладных автоматизированных рабочих мест АСКОН.

Теги: #Просмотр 3D-моделей #pdf #pdm #ecm #plm #CAD #3d #eDrawings #viewer #viewer #viewer #graphicsviewer #delphi #pdf #CAD/CAM #ECM/EDS

Вместе с данным постом часто просматривают: