ParaViewの画面表示をベクター形式で出力する方法。

仕事の関係で、数値計算した結果をEPS出力せねばならない場面にしばしば出くわす。
これまでは市販の某ポスト処理ツールを使用していたのだが、最近のバージョンアップでEPS出力機能が廃止されたので、渋々ParaViewを使ってみることにした。

しかし、ParaViewを使えばすんなりベクターフォーマットで出力出来るようになる訳ではない。
以下はその顛末記。

OpenGLの表示をPostScript出力するライブラリとして、GL2PSなるものが提供されている。
ParaViewからベクターフォーマットする為には、GL2PS経由で画像を出力すればよい。

…のだが、一般に流通しているParaViewのバイナリにはGL2PSが同梱されていないorz

そんな訳で、GL2PS入りParaViewを入手する為には自前でビルドする必要がある。
詳しい方法は以下のサイトに紹介されていたので、こちらを参考にMac上でビルドしてみる事にした。

postprocess:paraview | Applied Mechanics Lab. WIKI

ParaViewの最新版ソース(.tar.gz形式、所謂tarball)はこの辺から拾ってきた。
適当な名前の空フォルダ上で解凍する。Safariで拾ってきて、Archive Utilityで解凍すればOK。ビルド時に同じ階層にごっそり中間ファイルが生成されるので、専用の空フォルダ上で作業した方がいい。

手元のMacBook Air(Intel Core i7 1.8GHz / 4GB RAM / Mac OS X 10.7.2)にはMacPortsがインストール済みなので、ビルド作業に必要なツールはMacPorts上で準備していく。
とは言うものの、今回新規にport installしたのはcmakeとqt4-macのみ。qt4-macを入れておかないと、cmakeした際にQT4_WRAP_CPPでエラーが出る。

ここからは(MacPortsもそうだけど)ターミナル上でゴリゴリ作業。
解凍されたParaViewデータの置いてあるフォルダ上でcmakeコマンドを実行すると、ずらずら関連ファイルを探し始める。cmakeが完了した時点でccmakeコマンドを実行すると、今度はビルドオプションを設定する画面が表示される。

上記サイトの記述に従って、PARAVIEW_ENABLE_PYTHONとVTK_USE_GL2PSをONにしてから、cキーを叩いてConfigureを実行する。
その後gキーを叩くとMakefileが生成される…のだが、当方の環境では何故かConfigure実行後gオプションが表示されなかった。一旦qキーを叩いてccmakeを終了して、再度ccmakeを起動してからConfigureを再実行したらようやくgオプションが表示された。原因は解らん。

その後makeしてからmake install。
デフォルトのインストール先は/usr/localなのだが、生成されたデータはUnix実行ファイルではなくIntelバイナリのパッケージだったので、そのままApplicationsフォルダに移動してしまった。


んで、実際にベクター形式のファイルを幾つか出力してみた。
PostScript出力する場合はPythonターミナル上でexporter.SetFileFormatToPS()を実行するのだが、最後の‘PS’の部分をEPSだのSVGだのPDFだのに変更すればそれぞれの形式で出力される。

…のだが、Lion標準のPostScriptエンジン及びAdobe Illustrator CS5では.ps及び.eps形式のファイルを解釈出来なかった。Ghostscriptなら行けるのかも知れないが、手元の環境にはGhostscriptをインストールしていないので確認出来ない。
また、PDFで出力した場合もオブジェクト本体がベクターフォーマットではなくビットマップで出力されてしまい、意図していた結果が得られなかった。

そんなこんなで、出力したデータを更にいじくり回すのであればSVGで出力しておくのが良さそう。
取り敢えず目的は果たせたので一安心。


しっかし、最新のMacBook Airでもmakeに2時間近く掛かるってのはどうにかならんものなのか…。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>