2

我正在开发一个必须使用 SVG 形状来创建图表的编辑器。为了打开和显示 SVG,我使用了 librsvg,它实际上非常好,但仅用于渲染 SVG 而不是编辑它们。

我想访问形状的属性并更改它们的值(即宽度、大小)。

我使用 Cairo 将它们绘制到屏幕上,但我不想使用 cairo 的缩放功能,因为它与更改形状的大小不同。

我在 Win32 上使用 C++ builder XE3。

有谁知道我可以用来做的一个好的 C/C++ 库吗?

谢谢你的帮助。

4

1 回答 1

0

Cairo 的 scale 函数缩放整个坐标系,但如果您首先转换到形状的原点,则可以在单个形状上使用它;如果您将这些更改与保存/恢复对括起来,它只会影响在此范围内完成的绘图。在描边之前重置矩阵允许您在不更改描边宽度的情况下调整绘图的大小(或者,您可以通过 1/缩放因子调整描边宽度)。

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 回答