8

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

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

我想为测量仪的固定轴设置旋转针的动画。为了定义针,图形设计师绘制图形“needle”和一个“needle_axis”元素,它是一个小圆圈。然后,我想我可以使用所需的角度和“needle_axis”的中心坐标来设置变换属性。但是,由于其他变换可能会影响相对位置,因此确定旋转轴的绝对位置并非易事。

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

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

4

1 回答 1

-1

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

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

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

于 2013-08-01T02:20:15.253 回答