获取Inkscape SVG元素旋转的绝对坐标

时间:2013-07-09 13:07:15

标签: python svg inkscape

我正在使用wxPython为一个最终将成为嵌入式设计的项目的一些显示接口构建原型。由于我们正在使用图形设计器进行迭代,因此让它们在像Inkscape这样的WYSIWYG编辑器中工作要比不断重写2D图形绘制调用要容易得多。对于需要动画或动态文本的元素,SVG元素可以通过ID轻松识别,以便在渲染之前以编程方式更新它们。渲染流程如下所示:

Inkscape SVG as XML --> Python modification of XML --> Drawing onto wxPython buffered canvas using Cairo and pyRSVG

我想围绕固定轴为一个仪表设置一个旋转针。为了定义针,图形设计者绘制图形“针”和“needle_axis”元素,这是一个小圆圈。然后,我想我可以使用所需的角度和“needle_axis”的中心坐标设置transform属性。但是,由于相对位置可能因其他变换而受到影响,因此确定旋转轴的绝对位置并非易事。

我似乎找不到用于确定元素绝对坐标的Python库,感觉就像重新发明轮子来尝试实现SVG规范的一部分。有必要来计算它。 rsvg API提及rsvg_handle_get_dimensions_subarsvg_handle_get_position_sub函数来获取元素的维度和位置,但我找不到pyRSVG的API。

有没有比手动计算旋转轴更好的方法?示例Inkscape SVG file and test snippet可作为要点。

1 个答案:

答案 0 :(得分:-1)

如果我理解正确,您有针的坐标和旋转轴坐标,并且您想以编程方式更改针的“角度”,然后相应地更改SVG文件中针的形状?

我认为这是一个非常糟糕的主意:对SVG进行更改,保存然后渲染“新SVG”将需要太多的资源,这正是为什么这么简单的任务看起来很复杂的原因。

相反,解析你的SVG一次(例如,使用lxml,仅通过执行一些XPATH查询来提取坐标是一块蛋糕)并将形状构建到模型中({{1例如,使用路径和中心),然后使用Needle变换简单地旋转该针。他们已经提供了rotate功能,可以满足您的需求!