如何在cairocffi中正确重置剪辑?

时间:2015-03-30 18:17:49

标签: python-3.x cairo

我正在尝试为自己编写一个模块,用cairocffi做一些简单的绘图,使得使用包不那么麻烦。但是,我似乎遇到了正确实现剪辑的麻烦。具体来说,我无法正确重置裁剪区域。

我写了一个示例Python脚本,其结果应该是一个PostScript文件:

  • 1个红色圆圈(circle_1
  • 从圆圈的左下角到右上角的一条黑线(line1
  • 从图片左上角到图片右下角的1条黑线(line2

而不是line2从一个角落延伸到另一个角落,但它仍被前一个clip()调用所限制。

以下是示例脚本:

import cairocffi as cairo
from math import pi

fig_w, fig_h = 237.6, 237.6
test_surf = cairo.PSSurface('test.ps', fig_w, fig_h)
temp_surf = cairo.PSSurface('temp.ps', fig_w, fig_h)

line1 = cairo.Context(temp_surf)
line1.move_to(0, fig_h)
line1.line_to(fig_w, 0)
line1.set_source_rgb(0,0,0)
line1.stroke()

circle_1 = cairo.Context(test_surf)
circle_1.arc(fig_w/2, fig_h/2, fig_w/4, 0, 2*pi)
circle_1.close_path()
circle_1.set_source_rgb(1,0,0)
circle_1.stroke_preserve()
circle_1.set_source_surface(temp_surf)
with circle_1:
    circle_1.clip()
    circle_1.paint()

line2 = cairo.Context(test_surf)
line2.reset_clip()
line2.move_to(0, 0)
line2.line_to(fig_w, fig_h)
line2.set_source_rgb(0,0,0)
line2.stroke()

我不确定自己做错了什么。这似乎是cairocffi文档如何表明它应该完成(即见reset_clip()save())。

如果有人能够指出我做错了什么,我真的很感激。

0 个答案:

没有答案