Булевы операции на путях SVG
По состоянию на начало 2014 года в спецификации SVG не было встроенной поддержки логических операций.
Булевы операции - это методы изменения внутренней геометрии в основном перекрывающихся путей. Они позволяют создавать сложные формы, выполняя операции над более простыми формами, и чем-то похожи на Constructive Solid Geometry (CSG).
Однако этот вопрос относится к 2D векторным путям. Популярные операции с путями: объединение, вычитание, пересечение, XOR(исключающее или).
Есть ли какие-нибудь библиотеки, которые бы помогли мне в этом?
1 ответ
Есть Javascript Clipper, который допускает все наборы логических операций на путях, но при условии, что входной путь является многоугольником.
Если у нас есть какие-либо кривые (кубические / квадратичные кривые Безье), их можно легко подразделить на многоугольники, используя алгоритм де Кастельжау.
- Если выборка подразделения достаточно высока, результатом будет полигон, который визуально выглядит как кривая (за счет большого объема данных, поскольку число вершин увеличивается линейно, в зависимости от точности подразделения).
Затем мы можем указать путь в JavaScript Clipper для логических операций.
Предостережение заключается в том, что мы теряем присущую "пышную" природу пути, если он содержит кривые. Упомянутая выше "полигонизация" более или менее является улицей с односторонним движением.