在python中绘制svg,路径不是形状或转换它们

sli*_*pha 9 python svg

我正在制作显微镜滤镜生成器,首先绘制svg图像,然后将它们转换为3D以进行3D打印.

我用'svgwrite'

然而,这个librayry生成svg与形状(线,圆等),当时我不知道,但每个3D转换librayry /软件需要svg包含路径.

是否有一个librayry生成带路径的svg文件(但允许我在脚本中轻松绘制圆圈,线等?)

或者有没有办法将这些svg形状转换为svg路径?

我当前svg的形状示例:

<?xml version="1.0" encoding="utf-8" ?>
<svg baseProfile="tiny" height="100%" version="1.2" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs />
<circle cx="270" cy="270" fill="white" r="135.0" stroke="black" stroke-width="10" />
<circle cx="270" cy="270" r="25.0" />
<line stroke="black" stroke-width="10" x1="270" x2="270" y1="270" y2="135.0" />
<line stroke="black" stroke-width="10" x1="270" x2="405.0" y1="270" y2="347.9423" />
<line stroke="black" stroke-width="10" x1="270" x2="135.0" y1="270" y2="347.9423" />
</svg>
Run Code Online (Sandbox Code Playgroud)

谢谢.

PS:请注意我必须这样做,因为我打算生成很多过滤器.

Nik*_*yev 5

我已经根据自己的需要编写了一些东西,以使用 SVG 元素处理一些类似的任务,例如评估边界框、转换等。因此,这个任务对于我来说实现这样的转换似乎相对简单。您所需要的只是了解“d”属性由哪些路径组成 - 实际上有一系列直线、椭圆弧和贝塞尔曲线(您甚至不需要最复杂的后者)。如果您对此自定义感兴趣,请参阅此有用的教程 - http://tutorials.jenkov.com/svg/path-element.html

\n\n

但是当我开始回答你时,我发现了一个最近可用的库,它似乎完全适合你的需求。

\n\n

可以使用“pip install svgpathtools”(请参阅​​那里的手册)\xe2\x80\x94 https://pypi.python.org/pypi/svgpathtools/

\n\n

因此,您最初可能会创建高级对象,例如

\n\n
Line(start, end)\nArc(start, radius, rotation, large_arc, sweep, end) \n# See docstring for a detailed explanation of these parameters, \n# but you\'re definetely able to create cirlces that way\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后从它们中创建一个高级 Path 对象

\n\n
path = Path(*segemnts)  # segments are decribed above - Line(), Arc(), etc\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,您可以获取 path.d() 字符串,并使用所需的属性(笔画、笔划宽度等)构建 XML 表示形式,因为主 svg 路径数据完全存储在“d”属性中,该属性的值你已经有了。

\n\n

此外,您提到的svgwrite lib 也已经提供了一种构建 XML 表示的方法

\n\n
svgwrite.path.Path(d=path.d(), stroke=\'black\', **extra)  \n# **extra is every other common SVG attribute as keyword arguments\n
Run Code Online (Sandbox Code Playgroud)\n\n

甚至可能svgpathtools本身也有它(我还没有想到它的所有优点)

\n\n

如果还有什么问题没有得到解答,请在评论中询问我。

\n