svg路径对象和解析器

svg.path的Python项目详细描述


svg.path

path是实现不同路径的对象的集合 SVG中的命令,以及SVG路径定义的解析器。

用法

共有四个路径段对象, 直线 圆弧 立方线 quadraticbezier `还有一个 路径 对象充当 路径段对象的集合。

这些类的所有坐标值都以复数形式给出, 其中, .real 部分表示x坐标, .imag 部分表示x坐标。 代表Y坐标。

< Buff行情>
>>> from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier

所有这些对象都有一个 .point() 函数,该函数将返回 路径上的点的坐标,该点以浮点形式给出 点值,其中 0.0 是路径的起点, 1.0 是终点。

可以使用 .length() 函数。对于cubicbezier和arc段,这是通过 几何近似,因此 可能非常慢。你可以 通过向方法传递一个 错误 选项使其更快。如果你 不要误传,默认为1e-12

< Buff行情>
>>> CubicBezier(300+100j, 100+100j, 200+200j, 200+300j).length(error=1e-5)
297.2208145656899

cubicbezier和arc还有一个 min_depth 选项,指定 最小递归深度。默认设置为5,因此使用 最少32段用于计算。将其设置为0对于 因为它们可能接近一条直线。

line.length() quadraticbezier.length() 也接受 参数,但它们被忽略。

cubicbezier和quadraticbezier也有 是平滑的 方法,该方法检查段是否是"平滑"段,与 给定段。

还有一个 parse_path() 函数将采用SVG路径定义 并返回一个 路径 对象。

< Buff行情>
>>> from svg.path import parse_path
>>> parse_path('M 100 100 L 300 100')
Path(Move(to=(100+100j)), Line(start=(100+100j), end=(300+100j)), closed=False)

这些是svg路径段类。有关SVG规范的详细信息,请参见 参数表示。

  • 线路(起点,终点)
  • 弧(开始、半径、旋转、弧、扫掠、结束)
  • 正交贝塞尔(开始、控制、结束)
  • cubicbezier(开始,控制1,控制2,结束)

除此之外,还有一个 路径 类,它被实例化 具有一系列路径段:

  • 路径(*段)

path 类是一个可变序列,因此它的行为类似于一个列表。 您可以添加到其中并替换路径段等。

< Buff行情>
>>> path = Path(Line(100+100j,300+100j), Line(100+100j,300+100j))
>>> path.append(QuadraticBezier(300+100j, 200+200j, 200+300j))
>>> path[0] = Line(200+100j,300+100j)
>>> del path[1]

path对象还有一个 d() 方法,该方法将返回 路径段的SVG表示。

< Buff行情>
>>> path.d()
'M 200,100 L 300,100 Q 200,200 200,300'

示例

这个svg路径示例绘制一个三角形:

< Buff行情>
>>> path1 = parse_path('M 100 100 L 300 100 L 200 300 z')

您可以用许多不同的方式格式化svg路径,所有有效的路径都应该是 接受:

< Buff行情>
>>> path2 = parse_path('M100,100L300,100L200,300z')

这些路径应该相等:

< Buff行情>
>>> path1 == path2
True

您还可以从对象建立路径:

< Buff行情>
>>> path3 = Path(Line(100+100j,300+100j), Line(300+100j, 200+300j), Line(200+300j, 100+100j))

它应该再次等于第一条路径:

< Buff行情>
>>> path1 == path2
True

路径是可变序列,您可以切片并附加:

< Buff行情>
>>> from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier
1

路径还有一个 closed 属性,该属性定义路径是否应该 是否被视为闭合路径。

< Buff行情>
>>> from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier
2

如果修改路径的方式使其不再可关闭,则它将 不要关闭。

< Buff行情>
>>> from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier
3

但是,先前设置为关闭的路径将自动关闭如果是的话 进一步修改为可以关闭。

< Buff行情>
>>> from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier
4

如果结束与开始不一致,则尝试将路径设置为关闭 任何段都会引发错误。

< Buff行情>
>>> from svg.path import Path, Line, Arc, CubicBezier, QuadraticBezier
5

未来功能

  • 反转路径。然后,它们应该合理地"向后"绘制,意思是 路径段也需要反转。
  • 数学变换可能有意义。

许可证

本模块是麻省理工学院授权的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
插件Java Bukkit/spiget块指定的命令   通过索引Java在数组中查找异或   java程序无法识别字符在数组中的位置   unix无法启动测试系统“slim”:java。木卫一。IOException:无法运行程序“java”:错误=2,没有这样的文件或目录   java使用txt文件值创建对象数组   JAVAutil。扫描器如何在用户在JAVA程序上创建后为每个学生提供一个唯一的ID   java从选定的单元格列表项获取信息   小程序Java JFileChooser网络目录用户/密码提示   java如何格式化字符串以显示两位小数   keylistener使用java使用箭头键移动图形   java无法从HttpClient调用接收数据   java API中的条件字符串解析器?   正则表达式如何在java中将字符串拆分为单词来保留标点符号?   java使用多个jython PythonInterpreter对象和不同的PythonPath   java如何克服方法调用线程。sleep()在findbugs中带有锁定警告?   java Spring工具套件和Spring配置器目录结构   使用setterjava实现jTextField的swing验证输入