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