(py) каир - заполнить

есть ли способ заполнить все за пределами замкнутого пути (многоугольника)?

Фон: я хотел бы отобразить некоторые карты с береговыми линиями - поэтому иногда мне нужно залить море синим цветом, поэтому я подумал, что будет проще всего и в моей ситуации наиболее эффективно залить синим все, что находится за пределами этого многоугольника береговой линии. цвет.

Заранее спасибо!


person xyz-123    schedule 16.11.2010    source источник
comment
Это не ответ, но если вы хотите отображать карты с помощью Python, вы можете сделать хуже, чем проверить комбинацию стройный и дескарт.   -  person fmark    schedule 16.11.2010


Ответы (3)


Вы можете добавить прямоугольник, покрывающий всю область рисования, к контуру береговой линии и установить правило заливки cairo.FILL_RULE_EVEN_ODD. Вызов fill() после этого заполняет область за пределами исходного пути. (Если вы выберете правильную ориентацию для своего прямоугольника, вы можете пропустить настройку правила заливки.)

person Sven Marnach    schedule 16.11.2010

Нарисовать большой синий прямоугольник поверх всей поверхности Каира, а затем нарисовать поверх него береговую линию?

person ptomato    schedule 16.11.2010

Хотя вы можете создать замкнутый путь размером с поверхность, а затем заполнить его сплошным узором (правило заливки не имеет значения для простого прямоугольника), было бы проще просто использовать контекстное рисование (), который заполнит текущую область отсечения (изначально заданную для всей поверхности). Важно сделать это перед рисованием границ карты/береговой линии и их заливкой, чтобы они были поверх фона.

person martineau    schedule 16.11.2010
comment
В моем ответе правило заполнения действительно имеет значение. Я добавил слово, чтобы было понятнее. - person Sven Marnach; 17.11.2010
comment
@Sven Marnach: я никогда не говорил, что в вашем ответе не имеет значения, что будет заполнять область вокруг того, что уже было нарисовано, при условии, что путь береговой линии и окружающий путь активны, когда fill() вызывается, и их пути противоречат друг с другом. - person martineau; 17.11.2010