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

2024-10-04 11:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想动画一个围绕一个固定轴旋转的针为一个量规。为了定义针,图形设计师绘制图形化的“针”和“针轴”元素,这是一个小圆。然后,我想我可以使用所需的角度和“针轴”的中心坐标来设置变换属性。但是,由于其他变换可能会影响相对位置,因此确定旋转轴的绝对位置是非常重要的。在

我似乎找不到一个Python库来确定元素的绝对坐标,感觉就像是重新发明轮子,尝试实现SVG规范中计算它所必需的部分。rsvg API提到了rsvg_handle_get_dimensions_sub和{}函数来获取元素的尺寸和位置,但是我找不到pyRSVG的API。在

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


Tags: and项目svgapi图形元素wxpython动画
1条回答
网友
1楼 · 发布于 2024-10-04 11:35:54

如果我理解正确,你有针的坐标和旋转轴的坐标,你想通过编程改变针的“角度”,然后在SVG文件中相应地改变针的形状?在

我认为这是一个非常糟糕的主意:对SVG进行更改、保存并呈现“newsvg”将需要太多的资源,这正是为什么这么简单的任务看起来很复杂。在

相反,只需解析一次SVG(使用lxml例如,只需执行一些XPATH查询就可以提取坐标)并将形状构建到模型中(例如,Needle类,带有路径和中心),然后使用Cairo变换旋转指针。它们已经提供了一个^{}函数,可以满足您的需要!在

相关问题 更多 >