Экспорт U3D/PDF3D из Visual C++

I have been requested to solve a problem of memory usage of a CAD application written on Visual C++ that occurs when trying to export the drawing to PDF3D.

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

Мы используем проект sourceforge U3D для создания объекта U3D; после того, как мы вставим его в PDF. Это часть создания объекта, которая является проблематичной.

Проект sourceforge U3D - это библиотека, построенная на C++ для использования на C++, которая устарела с 2007 года, имеет плохую документацию и коллекции ее примеров далеко не достаточно! В списке TODO проекта также указано, что у него есть проблемы с памятью!

Поэтому меня попросили атаковать проблему с двух сторон:

  1. Делайте сопровождение кода U3D.

  2. Измените способ взаимодействия приложения с библиотекой U3D.

Они также сказали, что сторона 2. предпочтительнее, так как она находится под нашим контролем.

When trying to solve the problem, I got two conclusions:

  1. Я сильно подозреваю, что метод EncodeX U3D отвечает за неправильное использование памяти.

  2. Я перепробовал множество мелких изменений в том, как приложение взаимодействует с библиотекой (изменение параметров сжатия, флагов и т. Д.), И каждый раз результатом было перераспределение памяти.

Итак, вопрос: стоит ли продолжать использовать эту библиотеку? The code of it is not a joy to read... Or maybe it could be a good idea to look at other libs for the same purpose? Я не изучал их, но я серьезно думаю о переходе на VCGlib или libharu... пожалуйста, предложите что-нибудь еще, если вы знаете, что это хорошо.

Другими альтернативами могут быть: использование экспортера визуальных технологий PDF3D, который имеет недопустимую стоимость, или разработка собственной реализации экспортера U3D, у которой есть недостатки, заключающиеся в том, что она представляет собой очень ограниченный набор функций U3D, а также может " не готовьтесь к ожидаемому сроку. So take these options as forbidden.

Мне действительно нужна помощь, чтобы решить, что лучше.

Заранее спасибо, Сержиу

2 ответа

Решение

После некоторых отчаянных и плохо спящих ночей, пытаясь обнаружить утечки памяти или некоторые другие проблемы с памятью, мы пришли к выводу для наиболее практичного решения:

Извлеките только ту часть кода, которая необходима для загрузки файла, и экспортируйте его как U3D в небольшую программу и заставьте его вызывать главное приложение CAD. Хотя это не самое элегантное решение, оно действительно работает хорошо - ни один из процессов не достигает использования памяти даже близко к барьеру в 2 ГБ.

Хотелось бы, чтобы я был уполномочен решать вещи таким способом раньше. Я предложил некоторые другие вещи, такие как:

  • переход на 64 бит

  • используйте опцию, которую поддерживают современные версии Windows, для расширения предела памяти каждого процесса до более чем 2 ГБ

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

Некоторые комментарии: VCGlib - не имеет отношения, MeshLab использует VCGlib для основных функций, но для U3D используется инструмент командной строки для экспорта из текстового формата в U3D, и этот инструмент из sf U3D lib. libharu - может вставлять 3D-модели в свои PDF-файлы, а не создавать модели (файлы U3D или PRC).

Другим вариантом является выход из другого формата Adobe 3D PDF, PRC. Acrobat SDK имеет описание формата в виде псевдокода. Исходя из этого, вывод PRC был реализован в Asymptote tool. Найдите его на sourceforge и задайте вопрос на форуме Asymptote, если вы заинтересованы.

Другие вопросы по тегам