将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:一个提供路径的轴对齐范围的对象,作为 xmin,xmax,ymin 和 ymax。
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e1b2df99b4ba1986e9ab04de5088506a804a21fd525d1cd07c24e47903929d3e |
|
MD5 | b2cd80c0167c5b86e5a43b6402aac091 |
|
BLAKE2b-256 | f94501c3f8d015eca7f4ef41bd3517b038807104cfe8dc2b35fc0cf7e0cac61c |