2

Visual C++で書かれたCADアプリケーションで図面をPDF3Dに書き出す際に発生するメモリ使用量の問題を解決してほしいと依頼されました。

機能のエクスポートは、単純なモデルまたは複雑なモデルの一部のみでは適切に動作しますが、複雑なモデル全体では適切に動作しません。

U3D オブジェクトの作成には U3D sourceforge プロジェクトを使用しています。PDFに挿入した後。問題があるのはオブジェクト作成部分です。

U3D sourceforge プロジェクトは、C++ で使用するために C++ でビルドされたライブラリでもありますが、2007 年以降廃止されており、ドキュメントが貧弱であり、そのサンプルのコレクションは十分とは言えません! プロジェクトのTODOリストにも、メモリの問題があると記載されています!

そのため、私はこの問題を 2 つの側面から攻撃するよう求められました。

  1. U3D コードのメンテナンスを行います。

  2. アプリケーションが U3D ライブラリと対話する方法を変更します。

彼らはまた、私たちの管理下にあるので、サイド2.が好ましいと言いました。

問題を解決しようとしたとき、2 つの結論を得ました。

  1. 私は、U3D メソッド EncodeX がメモリの誤用の原因であると強く疑っています。

  2. アプリケーションがライブラリとやり取りする方法(圧縮パラメーター、フラグなどの変更)について、小さな変更をたくさん試みましたが、そのたびにメモリの過剰割り当てが発生しました。

問題は、このライブラリを使い続ける価値があるかどうかです。そのコードは読むのが楽しいものではありません...または、同じ目的で他のライブラリを見るのは良い考えでしょうか? 私はそれらを調査しませんでしたが、VCGlib または libharu に切り替えることを真剣に考えています。

他の選択肢は次のとおりです: Visual Technologies の PDF3D エクスポーターを使用しますが、これには許容できないコストがかかります。または、U3D エクスポーターの独自の実装を開発することもできます。予想される締め切りの準備ができていません。したがって、これらのオプションは禁止されています。

何が最善かを判断するには、本当に助けが必要です。

前もって感謝します、セルジオ

4

2 に答える 2

2

いくつかのコメント: VCGlib - 無関係、MeshLab はコア機能を VCGlib に依存していますが、U3D エクスポートでは、テキスト形式から U3D に変換するコマンドライン ツールが使用され、そのツールは sf U3D ライブラリからのものです。libharu - モデル (U3D または PRC ファイル) を作成するのではなく、3D モデルを PDF 出力に埋め込むことができます。

もう 1 つのオプションは、他の Adob​​e 3D PDF 形式である PRC を出力することです。Acrobat SDK には、疑似コード形式の形式記述があります。それに基づいて、PRC の出力が Asymptote ツールに実装されました。興味がある場合は、sourceforge で見つけて、Asymptote フォーラムで質問してください。

于 2011-02-16T16:39:37.877 に答える
1

いくつかの絶望と眠りの悪い夜の後、メモリリークやその他のメモリトラブルを発見しようと試みた後、私たちは最も実用的な解決策を結論付けました。

ファイルをロードするために必要なコード部分のみを抽出し、それをU3Dとして小さなプログラムにエクスポートし、メインのCADアプリケーションにそれを呼び出させます。これは最も洗練されたソリューションではありませんが、実際にはうまく機能します。2GBのバリアに近い場合でも、どのプロセスもメモリ使用量に達しません。

以前にこの方法で問題を解決する権限が与えられていればよかったのにと思います。私は次のような他のいくつかのことを提案しました:

  • 64ビットへの移行

  • 各プロセスのメモリ制限を2GB以上に拡張するために、最新のWindowsバージョンがサポートするオプションを使用します

一部の顧客にすでに実行中のハードウェアまたはソフトウェアを再インストールするように強制する必要があるため、これら2つのソリューションはいずれも受け入れられませんでした。

于 2011-02-26T17:46:31.853 に答える