清除开罗的当前路径

Clear the current path in Cairo

在某些使用 Cairo 的 Ruby 代码中,我需要在单个路径上绘制多个填充。这是图形应用程序的一部分,其中可以使用不同的混合模式将多个填充堆叠在彼此之上。

每次填充都使用 fill_preserve 绘制以保留路径,以便下一次填充可以在同一路径上进行而无需回溯。这样做有点像这样:

rectangle_data.each do |rectangle_datum|
    context.rectangle(*rectangle_datum.rectangle)
    fill_data.each do |fill_datum|
        context.set_source_rgba(*fill_datum.color)
        context.fill_preserve
    end
end

问题是,即使在所有填充都发生之后,这也会留下路径,这意味着单个形状只是作为一个巨大的填充形状绘制。

要解决这个问题,我只需要手动清除当前路径,但我不知道该怎么做。我已经通过 Google 翻译查看了 Cairo::Context 的文档,但我找不到它。 (文档是日文的!)

如何手动清除 Cairo 上下文的当前路径?

我查看了 Cairo::Context#methods 并找到了 #new_path,这正是我想要的。所以你可以这样做:

rectangle_data.each do |rectangle_datum|
    context.rectangle(*rectangle_datum.rectangle)
    fill_data.each do |fill_datum|
        context.set_source_rgba(*fill_datum.color)
        context.fill_preserve
    end
    context.new_path
end