2010-11-23 13 views
10

У меня есть 2D замкнутые векторные пути, указанные в SVG paths-like syntax - то есть эти пути включают прямые и различные кривые Безье. Есть ли что-то вроде небольшой, красивой дискретной библиотеки & (желательно на C, Java или Ruby, но любой язык будет работать, если эта библиотека чиста и проста в использовании), что позволяет выполнять логические операции, такие как объединение, пересечение и вычитание с помощью этих путей ?SVG/векторные графические объекты булевых операций (объединение, пересечение, вычитание)

То, что я нашел до сих пор включает в себя:

  • огромные и дорогие коммерческие векторных графических продуктов (таких как Autodesk AutoCAD или Adobe Illustrator), которые могут быть вызваны с помощью какой-то API или скриптовые сделать логическое 2D пути, которые явно являются излишним для моих целей.
  • Inkscape developed in-house lib2geom библиотека, в которой отсутствует документация, привязки, есть некоторые проблемы с компиляцией, кажется, используется в проектах, кроме самого Inkscape, и выглядит довольно сложным.
  • CGAL - огромная и довольно сложная библиотека вычислительной геометрии, которая работает в довольно странном пространстве объектов (т. Е. У вас есть сумасшедшее сочетание шаблонов, императивные функции стиля для выполнения операций над этими шаблонами структур данных и т. Д. И т. Д.), t, похоже, имеют правильные привязки к другим языкам рядом с C++. Связывание Python с CGAL кажется заброшенным и не выглядит очень дружелюбным ко мне.
  • JTS, похоже, ориентирован на ГИС и имеет дело только с прямыми линиями, в то время как мне нужно иметь дело с SVG-подобными кривыми Безье.

Итак, вопрос, есть ли какие-либо другие мелкие, красивые & легкие библиотеки, плавающие вокруг, чтобы иметь дело с логическими операциями на SVG-подобных путей?

+0

Вы ищете какую-то геометрическую структуру данных из или просто визуального представления результатов? – 2010-11-23 22:54:59

+0

Я ищу: 1) структуру данных, 2) булевы операции с полигонами и кривыми; Мне не нужны библиотеки визуализации, то есть Каир или что-то подобное. – GreyCat 2010-11-23 23:01:15

ответ

5

Возможно, мне что-то не хватает, но не будут ли классы в пакете java.awt.geom соответствовать вашим потребностям? Они имеют дело с двумерными формами; в Area класс касается конкретно булевых операций:

Area объекта хранит и манипулирует описание разрешения независимого от закрытой площади 2-мерного пространства. Area объекты могут быть преобразованы и могут выполнять различные операции «Конструктивная площадь геометрии» (CAG) в сочетании с другими объектами Area. Операции CAG включают сложение, вычитание области, пересечение и исключение или.

+0

Спасибо! Кажется, это почти то, что мне нужно с первого взгляда - странно, как я это забыл. – GreyCat 2010-12-01 12:18:59

2

Вы можете JavaScript Clipper, порт Angus Johnson's Clipper (написанный на Delphi, C++, C# и Python), который, в свою очередь, основывается на Bala R. Vatti's clipping algorithm. Он способен обрабатывать все случаи полигона, включая самопересекающиеся.

Имейте в виде, что Lib принимает только многоугольники так any curves need to be polygonized первого

Смежные вопросы