2

図を作成するために SVG 図形を使用する必要があるエディターを開発しています。SVG を開いて表示するには、librsvg を使用します。これは実際にはかなり優れていますが、SVG を編集するのではなくレンダリングするのにのみ役立ちます。

形状のプロパティにアクセスして、その値 (幅、サイズ) を変更したいと考えています。

カイロを使用して画面に描画しますが、形状のサイズを変更するのと同じではないため、カイロのスケール機能を使用したくありません。

Win32 で C++ ビルダー XE3 を使用しています。

そのために使用できる優れた C/C++ ライブラリを知っている人はいますか?

ご協力いただきありがとうございます。

4

1 に答える 1

0

Cairo のスケール関数は座標系全体をスケーリングしますが、最初に形状の原点に変換すると、個々の形状で使用できます。これらの変更を保存/復元のペアで囲むと、このスパン内で行われた描画にのみ影響します。ストロークの前にマトリックスをリセットすると、ストローク幅を変更せずに描画のサイズを変更できます (または、ストローク幅を 1/scaling-factor で調整できます)。

cairo_matrix_t m;
cairo_get_matrix(cr, &m);
cairo_save(cr);
    cairo_translate(shape_x, shape_y);
    cairo_scale(shape_w, shape_h);
        //cairo_move_to(cr, x, y);   //perform the actual drawing
        //cairo_line_to(cr, x, y);
        //cairo_closepath(cr);
    cairo_set_matrix(cr, &m);
    cairo_stroke(cr);
cairo_restore(cr);

そして、このようにマトリックスを明示的にリセットする場合、実際には保存/復元はもう必要ありません (変換とスケーリングはマトリックス以外には影響せず、ストロークはパスをリセットします)。

于 2013-06-20T17:23:07.000 に答える