2013-06-01 11 views
1

Для настраиваемого проекта ящиков с лазером я хотел бы иметь возможность создать соединение между любыми двумя пересекающимися перпендикулярными объектами «2D» (с шириной) программным способом. Для этого мне необходимо:Какую библиотеку CAD/геометрии я должен использовать: CGAL Open CASCADE или Boost :: Геометрия что-то еще?

  • Загрузить и сохранить 2D-объекты в некотором стандартном формате.
  • вытесняет 2D-объект и выполняет стандартные манипуляции с 2D-объектами (в частности, вычитание объектов).
  • пересекает 2 объекта и может определять «линию» пересечения.

Какая библиотека/инструмент вы бы предложили для этого? Можете ли вы оценить, как трудно было бы справиться с этим для выполнения вышеуказанных задач?

Спасибо,

Ронен

ответ

1

Я пристрастен (PythonOCC Dev), но я бы сказал, что OpenCasCade бы наилучшим образом соответствует вашим потребностям. Его приходят остроумие Step и Iges импортеров из коробки (больше форматов поддерживаются на коммерческой основе), где вам придется анализировать и восстанавливать геометрию из файла с Boost и CGAL. Наконец, ни один из этих пакетов не касается геометрии NURBS/CAD (BREP, граничное представление), а просто треугольников (многоугольный суп). Таким образом, OCC подходит к лучшему IMHO.

1

У меня есть опыт работы с OPENCASCADE и CGAL. Boost Geometry очень ограниченная/простая и не поддерживает поставщиков топологических структур, твердых тел, брешей и т. Д. Цель была совершенно иной, чем остальная. Конечно, его качество выше, чем у любого другого.

Opencascade среди трех наименее предпочтительных вариантов с точки зрения качества. Например, все определено в глобальном пространстве имен, в заголовочных файлах есть несколько макроопределений и раздутые классы. Он имеет определенную поддержку для различных алгоритмов и конструкций, но только до некоторой точки; для остальных вам придется заплатить. Это как-то понятно, так как оно было разработано как внутренняя библиотека, не предназначенная для публичного доступа, и поэтому они не заботились о таких вещах. Сообщество довольно мало, поэтому вам придется много искать документацию и экспериментировать с тем, как это делать. Как правило, существует более одного способа работы, и обычно приходится писать много адаптеров в вашем коде для взаимодействия между различными алгоритмами.

С другой стороны, CGAL - это совершенно противоположное решение, которое поддерживает почти все, что вы можете себе представить, оно довольно современно, и существует целая община, а также очень хорошая документация и примеры для большинства случаев использования. Существуют разные классы и алгоритмы, зависящие от компромисса проблемы. Существует поддержка различных пользовательских интерфейсов (WIN/QT), которые хорошо взаимодействуют с структурами контейнеров STL/BOOST. Сравнивая с opencascade, который даже не имеет подходящего STL-совместимого класса итератора, это существенная разница.

Поэтому я настоятельно рекомендую работать с CGAL.

В случае, если вы вынуждены работать с OPENCASCADE и хотите одновременно использовать CGAL, вам, вероятно, придется включать заголовочные файлы, чтобы макрос Handle не был определен, например.

#include <TopoDS_Shape.h> 
#undef Handle 
#include <CGAL/Alpha_shape_3.h> 
#define Handle(ClassName)  Handle_##ClassName 

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

  • Нет связанных вопросов^_^