如何在pycairo中快速绘制大量多边形?

时间:2019-02-13 19:21:00

标签: python cairo pycairo

我有一个将多边形绘制到pycairo上下文中的函数,如下所示:

def draw_polygon(context, polygon):
    context.move_to(*polygon[0])
    for point in polygon:
        context.line_to(*point)
    context.line_to(*polygon[0])

然后,此循环多次调用此操作(约350k):

for polygon in polygons:
    draw_polygon(context, polygon)
    context.stroke()

运行cProfilerdraw_polygon的主要瓶颈,约占tottime的60%。

当涉及大量几何图形时,什么是优化此类工程图的好方法?是否可以像openGL一样将几何体组装到顶点列表或其他一些优化的数据结构中?

1 个答案:

答案 0 :(得分:0)

  

是否有类似于openGL的方法将几何体组装到顶点列表或其他一些优化的数据结构中?

context.append_path()。在内部,这仅调用其他C函数,没有什么特别的,但是也许可以节省pycairo的一些开销?我不确定这是否真的会更快。

然而,append_path的文档说以下话,这使我认为您不能真正从纯Python构造此数据结构:

  

将路径追加到当前路径。路径可以是Context.copy_path()或Context.copy_path_flat()之一的返回值,也可以手动构造(在C中)。