【问题标题】:Clear the current path in Cairo清除开罗的当前路径
【发布时间】:2018-12-24 09:32:45
【问题描述】:

在一些使用 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

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

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

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

【问题讨论】:

    标签: ruby gtk3 cairo


    【解决方案1】:

    我查看了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
    

    【讨论】:

    • 如果有人(比如我)想知道:在 C API 中,这是文档中列出的用于路径而非上下文的函数 cairo_new_path
    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多