我正在开发一个必须使用SVG形状来创建图表的编辑器。 要打开和显示SVG,我使用的是librsvg,这实际上非常好,但只对渲染SVG不能编辑它们很有用。
我想访问shape的属性并更改它们的值(即宽度,大小)。
我使用Cairo将它们绘制到屏幕上,但我不想使用cairo的缩放功能,因为它与更改形状的大小不同。
我在Win32上使用C ++ builder XE3。
有人知道我可以用来做一个好的C / C ++库吗?
感谢您的帮助。
答案 0 :(得分:0)
Cairo的缩放功能可以缩放整个坐标系,但如果先将其转换为形状的原点,则可以在单个形状上使用它;如果您使用保存/恢复对包含这些更改,则只会影响在此范围内完成的绘制。在行程之前重置矩阵允许您在不改变笔划宽度的情况下调整图形大小(或者,您可以将stroke_width调整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);
如果像这样明确地重置矩阵,你实际上不再需要保存/恢复(平移和缩放不会影响除矩阵之外的任何内容,并且笔划会重置路径)。