Есть ли способ построить пути в Cairo, объединив два пути вместе с помощью логических операций, таких как Union, Difference и Intersection? Я работаю над приложением для векторной графики, которое использует Cairo для рендеринга, и хотел бы дать своим пользователям возможность комбинировать пути таким образом, но я не могу найти способ сделать это в Cairo.
Логические операции на каирских путях?
Ответы (2)
Я не нашел способ сделать это с каирскими библиотеками. Но это функция, которую я тоже искал. Определенно было бы полезно, когда (например) поглаживание комбинации двух путей - операторы композитинга, упомянутые ntd, похоже, не могут этого сделать.
Тем временем я пытаюсь писать сценарии для inkscape и позволяю inkscape выполнять объединение/разницу. Приемлемо для проблемы, над которой я работаю, но определенно не для вашей. Вам повезло с cairo или любой другой svg-библиотекой? После пары дней гугления это не кажется тривиальным :/
Комбинирование путей с операторами для меня не имеет никакого смысла. Что вы получаете от «линия И кривая ИЛИ дуга»?
Вместо этого вы можете применить композитные операторы с помощью cairo_set_operator(): он установит, как текущая операция рисования (будучи cairo_fill() , cairo_stroke() или что-то еще) следует смешивать со старым содержимым поверхности.