Логические операции на каирских путях?

Есть ли способ построить пути в Cairo, объединив два пути вместе с помощью логических операций, таких как Union, Difference и Intersection? Я работаю над приложением для векторной графики, которое использует Cairo для рендеринга, и хотел бы дать своим пользователям возможность комбинировать пути таким образом, но я не могу найти способ сделать это в Cairo.


person Adrian Lopez    schedule 09.05.2009    source источник


Ответы (2)


Я не нашел способ сделать это с каирскими библиотеками. Но это функция, которую я тоже искал. Определенно было бы полезно, когда (например) поглаживание комбинации двух путей - операторы композитинга, упомянутые ntd, похоже, не могут этого сделать.

Тем временем я пытаюсь писать сценарии для inkscape и позволяю inkscape выполнять объединение/разницу. Приемлемо для проблемы, над которой я работаю, но определенно не для вашей. Вам повезло с cairo или любой другой svg-библиотекой? После пары дней гугления это не кажется тривиальным :/

person ImAlsoGreg    schedule 11.03.2012
comment
ps — путь intersect/combine/overlay указан на сайте cairo как возможный проект летнего кода cairographics. org/summerofcode/ideas - person ImAlsoGreg; 12.03.2012

Комбинирование путей с операторами для меня не имеет никакого смысла. Что вы получаете от «линия И кривая ИЛИ дуга»?

Вместо этого вы можете применить композитные операторы с помощью cairo_set_operator(): он установит, как текущая операция рисования (будучи cairo_fill() , cairo_stroke() или что-то еще) следует смешивать со старым содержимым поверхности.

person ntd    schedule 08.10.2009