Логические операции на дорожках SVG

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

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

Однако этот вопрос относится к двумерным векторным дорожкам. Популярными путями являются: Union, Substraction, Intersection, XOR (Exclusive Or). ​​

Существуют ли какие-нибудь библиотеки, которые будут всплывать, что поможет мне в этом?

Ответ 1

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

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

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

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


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