跳转到主要内容

将SVG文件加载到pyglet批处理对象中,用于OpenGL渲染。

项目描述

svgbatch

此文档的最新版本可在http://pypi.python.org/pypi/svgbatch上在线查看

SvgBatch是一个纯Python包,用于加载SVG矢量图形文件,并将它们转换为pyglet批处理对象,用于OpenGL渲染。

使用GLU函数将SVG文件中的多边形进行镶嵌,并用于创建一个由GL_TRIANGLES索引顶点数组组成的pyglet批处理对象。批处理将汇总SVG文件中的所有路径,以单个OpenGL原语进行渲染。每个路径也以非镶嵌形式公开,因此应用程序可以使用它们进行渲染以外的其他操作,例如碰撞检测。

目前只处理SVG的子集 - 形成闭合多边形的路径,填充为实色。每个路径可能包含多个环路(非连接区域或孔),但必须由直线边缘组成。弧线、贝塞尔曲线、渐变填充和其他SVG实体(如矩形或文本)目前不处理。

依赖关系

仅在Windows上测试过,但应该是跨平台的。仅在Python 2.5和2.6上测试过。需要令人惊叹的pyglet

状态

名义上完成,并且可以与由Inkscape生成的某些简单SVG文件一起工作,但尚未真正使用。

下载

您可以将svgbatch安装到您的site-packages目录中,使其可供计算机上的任何Python程序导入。自动执行此操作的方法是安装setuptools,然后使用命令行

easy_install svgbatch

手动执行相同操作的方法是从项目PyPI页面的底部下载源代码分布,然后手动安装,使用命令行

python setup.py install

或者,可以从上面的源代码分布中直接复制svgbatch包到您的项目中,这可能如果您打算修改它可能很有用。

最后,为了获取最新的(可能存在问题的)版本,您可能需要从Google Code上的Subversion中检出。

用法

非常简单

svg = SvgBatch('data/logo.svg')
batch = svg.create_batch()

create_batch() 返回一个pyglet批处理对象,可以使用 batch.draw() 在pyglet程序中渲染(参见 demo.py)。

您的应用程序可以通过以下方式访问每个路径的非细分几何形状,按id索引:

path = svg.path_by_id['pathid']

其中 pathid 是SVG文件中路径标签的字符串ID。路径的ID可以在Inkscape中通过编辑其对象属性来设置。返回的Path对象具有以下属性:

  • id:字符串,从svg标签的id属性复制而来

  • color:无符号字节的三元组,(r, g, b)

  • loops:一个循环列表。循环是一个表示封闭多边形边界的顶点列表(可能是凸的)。顶点是一对浮点数或整数。

  • bounds:一个提供路径的轴对齐范围的对象,作为 xminxmaxyminymax

  • offset(x, y):将给定的偏移量添加到路径中的所有顶点

已知问题

  • 它通常在处理除我从Inkscape保存的小SVG文件之外的实际SVG文件时会崩溃,这是因为未处理的SVG实体,如矩形或文本。通过仅使用闭合、边缘直的路径并用纯色填充来避免这种情况。

  • 我仅在Windows上进行了测试。我的笔记本电脑显卡在Ubuntu的Jaunty之后的OpenGL内容上不起作用。谢谢ATI。

计划

参见TODO.txt

致谢

非常感谢supereffective.org的Martin O'Leary,他的Squirtle模块为这个项目提供了主要灵感,特别是他的卓越的镶嵌代码,我已根据BSD条款全部复制。

此项目的测试使用了一个略微修改后的嵌入式voidspace的出色有用的mock库

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

svgbatch-0.1.9.zip (34.8 kB 查看哈希值)

上传时间

svgbatch-0.1.9.tar.gz (19.9 kB 查看哈希值)

上传时间

由以下支持