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

sup*_*lou 7 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
Run Code Online (Sandbox Code Playgroud)

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

我似乎找不到用于确定元素绝对坐标的Python库,并且感觉就像重新发明轮子来尝试实现SVG规范的一部分.有必要来计算它.该RSVG API提到rsvg_handle_get_dimensions_subarsvg_handle_get_position_sub功能来获得尺寸和元件的位置,但我找不到pyRSVG的API.

有没有比手动计算旋转轴更好的方法?Inkscape SVG文件和测试片段的示例可作为要点.

hal*_*ngs -1

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

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

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