Я пишу приложение для манипулирования формами, чтобы после создания простых форм пользователь мог создавать более сложные, обрезая фигуры друг против друга (т.е. объединяя два круга вместе в фигуру 8, сохраненную с использованием одного пути, а не группы, или выполняя пересечение двух кругов для создания отметки "укуса"), и я пытаюсь выбрать графическую библиотеку для использования.
Кажется, что SVG обеспечивает 80% необходимой мне функциональности (хранение форм, перемещение, вращение, масштабирование). Проблема в том, что остальные 20% (с использованием отсечения для создания нового набора сложных многоугольников) кажется невозможным без воссоздания функциональности SVG в моих собственных модулях (мне пришлось бы сохранить форму один раз для рисования внутри SVG, и один раз для обрабатываю вырезку сам). Я мог ошибаться насчет SVG, но, читая о библиотеке Рафаэля (на основе SVG), кажется, что она обрабатывает только обрезку с использованием прямоугольника, и даже это обрезание является временным (оно отображает только часть формы, но сохраняет всю форму. для повторной визуализации после перемещения прямоугольника отсечения). Возможно, я просто запутался в стандарте SVG, но даже получение / анализ путей для вычисления нового пути с использованием подмножеств предыдущих путей кажется неочевидным в SVG (есть функция Subpath (), но я не вижу ничего для найти точки пересечения двух периметров многоугольника или объединить несколько подпутей в один путь).
В результате Canvas кажется лучшей альтернативой, поскольку он не вносит дополнительных накладных расходов, отслеживая формы, которые мне уже пришлось отслеживать, чтобы моя собственная реализация отсечения работала. Мало того, я уже реализовал класс многоугольника, который можно перемещать, вращать и масштабировать. Однако у Canvas есть и другие проблемы (мне пришлось бы реализовать свой собственный метод перерисовки, который, я уверен, не будет таким эффективным, как метод SVG, использующий преимущества специфичных для браузера фреймворков в Chrome и Firefox; и я бы принять несовместимость IE, которая решается бесплатно с помощью таких библиотек, как Raphael).
Спасибо