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

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

2 голосов
/ 13 января 2011

Меня попросили решить проблему использования памяти приложения CAD, написанного на Visual C ++, которая возникает при попытке экспортировать чертеж в PDF3D.

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

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

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

Итак, меня попросили атаковать проблему двумя сторонами:

  1. Выполните обслуживание кода U3D.

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

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

При попытке решить проблему я получил два вывода:

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

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

Так что вопрос: стоит ли продолжать использовать эту библиотеку? Код этого не радость читать ... Или, может быть, было бы неплохо посмотреть на других библиотек с той же целью? Я их не изучал, но я серьезно думаю о переходе на VCGlib или libharu ... пожалуйста, предложите что-нибудь еще, если вы знаете, что это хорошо.

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

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

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

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

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

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

1 голос
/ 26 февраля 2011

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

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

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

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

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

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

...