SVG / векторные графические объекты логические операции (объединение, пересечение, вычитание)
У меня есть 2D замкнутые векторные пути, указанные в SVG пути-как синтаксис - т. е. эти пути включают в себя прямые линии и различные кривые Безье. Есть ли что-то вроде небольшой, приятной и дискретной библиотеки (предпочтительно в C, Java или Ruby, но любой язык будет делать, если эта библиотека чиста и проста в использовании), которая позволяет выполнять логические операции, такие как объединение, пересечение и вычитание с этими путями?
Что я нашел до сих пор включает в себя:
- огромный и дорогие коммерческие векторные графические продукты (такие как Autodesk AutoCAD или Adobe Illustrator), которые можно вызвать с помощью какого - то API или сценария для выполнения логических операций 2D-путей, что явно является излишеством для моих целей.
- Inkscape разработан в доме lib2geom библиотека, которой не хватает документации, Привязок, имеет некоторые проблемы с компиляцией, кажется, не используется ни в каких проектах, кроме Inkscape, и выглядит довольно сложной.
- CGAL - это огромная и довольно сложная библиотека вычислительной геометрии, которая работает в довольно странном пространстве объектов (т. е. у вас есть сумасшедшее сочетание шаблонов, императивных функций стиля для выполнения операций над этими шаблонными структурами данных и т. д.) и, похоже, не имеет разумных привязок к другим языкам помимо c++. Привязки Python к CGAL кажутся заброшенными и не выглядят очень дружелюбными для меня.
- JTS Кажется, что ГИС-центр и имеет дело только с прямыми линиями, в то время как мне нужно иметь дело с SVG-подобными кривыми Безье.
Итак, вопрос в том, есть ли другие небольшие, приятные и легкие библиотеки, плавающие вокруг, чтобы иметь дело с булевыми операциями на SVG-подобных путях?
2 ответов
возможно, я что-то упускаю, но не классы java.awt.geom
пакет соответствует вашим потребностям? Они имеют дело с двумерными формами;Area
класс имеет дело конкретно с логическими операциями:
An
Area
объект хранит и управляет независимым от разрешения описанием замкнутой области 2-мерного пространства.Area
объекты могут быть преобразованы и могут выполнять различные Операции конструктивной геометрии области (CAG) в сочетании с другимиArea
объекты. Операции CAG включают добавление области, вычитание, пересечение и исключающее ИЛИ.
вы можете JavaScript Clipper ,порт Клипер Ангуса Джонсона (написано на Delphi, C++, C# и Python), который в свою очередь основан на алгоритм отсечения Бала Р. Ватти. Он способен обрабатывать все полигональные случаи, включая самопересекающиеся.
имейте в виду, что lib принимает только полигона так любые кривые должны быть полигонизированы первый