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

Есть ли способ построить пути в 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
comment
Примером того, что я имею в виду, является то, как Inkscape объединяет пути с помощью логических операций: usinginkscape.com/node/34< /а>. Я полагаю, что большинство этих эффектов можно было бы достичь с помощью ряда операторов композитинга, за исключением того, что места, где пути двух фигур пересекаются, не обязательно должны иметь правильные соединения линий. - person Adrian Lopez; 19.03.2010
comment
Я до сих пор не понимаю вопроса: сам inkscape использует cairo начиная с версии 0.46: wiki.inkscape.org/wiki/index.php/Release_notes/ - person ntd; 20.01.2015