2011.10.14 | 

昨夜弊社でイベント(飲み会?)を開催したのですが、
お越しいただいた皆様ありがとうございました。
イベントでやりましたVJ的なアレについては
また機会をみてレポートできたらと思います。
こんにちはジョーとも呼ばれたりするムーチョです。

OPENGLというかCinderでdrawしたラインを印刷したい!
そのためにEPS形式にできないものかと
あれこれやってみて、とりあえずこれでいいんじゃないか?
というところにたどり着いたのでそのご紹介です。


これをEPSにしたい!

EPS保存ですが、いくつか方法がありました。
このライブラリは結局今回使わなかったのですが
王道っぽいのでメモ。
GL2PS: an OpenGL to PostScript printing library
http://geuz.org/gl2ps/

今回紹介するのは、Cinderのライブラリに入ってるCairoで書き出す方法です。

01// 描画した座標の配列
02vector<vector<Vec2f> >  shapePoints;
03//-----------------------------------------------------
04// 指定したファイル名でEPS保存
05void saveEPS(string path)
06{
07    cairo::Context ctx( cairo::SurfaceEps(  path + ".eps", getWindowWidth(), getWindowHeight() ) );
08    drawVectorLine( ctx );
09}
10//-----------------------------------------------------
11// EPSデータ用にあらためて描画(?)
12void drawVectorLine(cairo::Context &amp;amp;ctx)
13{
14    ctx.setLineWidth( 0.1f );
15    ctx.setSourceRgb( 0, 0, 0 );
16    Vec2f p0, p1;
17    int i,j,k;
18    for(i = 0; i < shapePoints.size(); i++){
19        ctx.newPath();
20        for(j = 0; j < shapePoints[i].size(); j++){
21            if(j == 0){
22                p0 = shapePoints[i][ shapePoints[i].size()-1];
23            }else{
24                p0 = shapePoints[i][j-1];
25            }
26            p1 = shapePoints[i][j];
27            ctx.line(p0,p1);
28        }
29        ctx.closePath();
30        ctx.stroke();
31    }
32    for(i = 0; i < pSteps; i++){
33        for(j = 0; j < addedPoints[i].size(); j++){
34            ctx.newPath();
35            for(k = 0; k < addedPoints[i][j].size(); k++){
36                if(k == 0){
37                    p0 = addedPoints[i][j][ addedPoints[i][j].size()-1];
38                }else{
39                    p0 = addedPoints[i][j][k-1];
40                }
41                p1 = addedPoints[i][j][k];
42                ctx.line(p0,p1);
43            }
44            ctx.closePath();
45            ctx.stroke();
46        }
47    }
48}

Cairoは元々ベクターデータ用の描画エンジンで
画面上に描画もできるのですが、画面に描画しなくても
上記のような書き方でEPS書き出ししてくれました。
保存されたファイルをillustratorで開いてみると…

激重ベクターデータの出来上がり!!
これでOpenCVから印刷データなんかも作れそうでムフフです。