Очистить текущий путь в Каире - PullRequest
0 голосов
/ 24 декабря 2018

В некотором коде Ruby, который использует Cairo, мне нужно нарисовать несколько заливок по одному пути.Это часть графического приложения, где несколько заливок могут накладываться друг на друга с использованием разных режимов наложения.

Каждая заливка рисуется с использованием 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 через Google Translate, но не могу ее найти.(Документы на японском языке!)

Как вручную очистить текущий путь контекста Каира?

1 Ответ

0 голосов
/ 24 декабря 2018

Я просмотрел 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
...