2011-01-13 24 views
2

我已經被要求解決在嘗試將繪圖導出到PDF3D時出現的在Visual C++上編寫的CAD應用程序的內存使用問題。從Visual C++導出U3D/PDF3D

導出特徵對於簡單模型或僅複雜模型的一部分表現良好,但不適用於整個複雜模型。

我們使用U3D sourceforge項目創建U3D對象;我們將它插入到PDF後。這是造成問題的對象創建部分。

U3D sourceforge項目是一個以C++語言編寫的庫,用於C++,自2007年以來一直死亡,文檔很糟糕,其樣本集合遠遠不夠!在項目的TODO列表中還聲明它有內存問題!

所以,我一直在問由雙方攻擊的問題:

  1. 執行U3D代碼的維護。

  2. 更改應用程序與U3D庫交互的方式。

他們還表示方2.優先,因爲它在我們的控制之下。

在試圖解決這個問題,我有兩個結論:

  1. 我強烈懷疑該U3D方法EncodeX負責內存誤用。

  2. 對於apllication與lib交互的方式(更改壓縮參數,標誌等)以及每次結果都是內存過度分配,我嘗試了很多小事情的更改。

所以問題是:是否值得繼續使用這個庫?它的代碼閱讀起來並不是一件愉快的事情......或者爲了同一目的查看其他庫也許是個好主意? 我沒有探索他們,但我認真考慮切換到VCGlib或libharu ...如果你知道這很好,請提供其他建議。

其他的替代方案是:使用Visual Technologies PDF3D導出器,它具有不可接受的成本,或者開發我自己的U3D導出器實現,這將具有U3D功能的非常有限的缺點,也無法爲預期的截止日期做好準備。 所以把這些選項作爲禁止。

我真的需要幫助來決定什麼是最好的。

由於提前, 塞爾吉奧

回答

1

一些絕望和不良睡眠的夜晚之後,試圖發現內存泄漏或其它一些內存的煩惱,我們總結了最實用的解決方案:

只提取代碼的一部分需要加載一個文件,並將其導出爲U3D轉換爲一個小程序,並使主CAD應用程序調用它。儘管它不是最優雅的解決方案,但它確實效果不錯 - 即使接近2 GB的屏障,所有這些進程都無法達到內存使用率。

我希望我被授權可以提早解決問題。我提出了一些其他的東西,如:

  • 遷移到64位

  • 使用現代的Windows版本的每個進程的內存限制擴展到超過2 GB

支持選項

這兩種解決方案都不可接受,因爲需要強制某些客戶重新安裝已運行的硬件或軟件。

1

一些評論: VCGlib - 無關,MeshLab依靠VCGlib爲核心功能,但對於U3D出口的命令行工具從文本格式U3D轉換使用,並該工具來自sf U3D庫。 libharu - 可以將3D模型嵌入到其PDF輸出中,而不是創建模型(U3D或PRC文件)。

另一種選擇是超越其他Adobe 3D PDF格式PRC。 Acrobat SDK具有僞代碼形式的格式描述。 基於中國輸出在Asymptote工具中實施。 在sourceforge上找到它,如果你有興趣,可以在Asymptote論壇上提問。

+0

中國不是一種選擇,因爲客戶的工廠中有PDF/U3D作爲標準... – sergiol 2011-02-26 17:31:26