Булевы операции на путях SVG

По состоянию на начало 2014 года в спецификации SVG не было встроенной поддержки логических операций.

Булевы операции - это методы изменения внутренней геометрии в основном перекрывающихся путей. Они позволяют создавать сложные формы, выполняя операции над более простыми формами, и чем-то похожи на Constructive Solid Geometry (CSG).

Однако этот вопрос относится к 2D векторным путям. Популярные операции с путями: объединение, вычитание, пересечение, XOR(исключающее или).

Есть ли какие-нибудь библиотеки, которые бы помогли мне в этом?

1 ответ

Решение

Есть Javascript Clipper, который допускает все наборы логических операций на путях, но при условии, что входной путь является многоугольником.

  • Если у нас есть какие-либо кривые (кубические / квадратичные кривые Безье), их можно легко подразделить на многоугольники, используя алгоритм де Кастельжау.

    • Если выборка подразделения достаточно высока, результатом будет полигон, который визуально выглядит как кривая (за счет большого объема данных, поскольку число вершин увеличивается линейно, в зависимости от точности подразделения).

Затем мы можем указать путь в JavaScript Clipper для логических операций.


Предостережение заключается в том, что мы теряем присущую "пышную" природу пути, если он содержит кривые. Упомянутая выше "полигонизация" более или менее является улицей с односторонним движением.

Другие вопросы по тегам