2011-01-13 2 views
2

Мне было предложено решить проблему использования памяти приложения САПР, написанного на Visual C++, которое возникает при попытке экспорта чертежа в PDF3D.Экспорт U3D/PDF3D из Visual C++

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

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

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

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

  1. ли содержание кода U3D.

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

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

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

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

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

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

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

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

Спасибо заранее, SERGIO

ответ

1

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

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

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

  • миграции на 64 бит

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

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

1

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

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

+0

PRC не является вариантом, так как заказчик имеет PDF/U3D в качестве стандарта на своих заводах ... – sergiol

Смежные вопросы