我正在尝试为自己编写一个模块,用cairocffi做一些简单的绘图,使得使用包不那么麻烦。但是,我似乎遇到了正确实现剪辑的麻烦。具体来说,我无法正确重置裁剪区域。
我写了一个示例Python脚本,其结果应该是一个PostScript文件:
circle_1
)line1
)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()
)。
如果有人能够指出我做错了什么,我真的很感激。