Какую библиотеку CAD / геометрии мне следует использовать: CGAL Open CASCADE или Boost::Geometry что-то еще?
Для настраиваемого проекта выдвижных ящиков для лазерной резки я хотел бы иметь возможность программно создавать связь между любыми двумя пересекающимися перпендикулярными "2D" объектами (с шириной). Для этого мне нужно:
- загружать и сохранять 2D-объекты в каком-то стандартном формате.
- выдавливать 2D-объект и выполнять стандартные манипуляции с 2D-объектами (в частности, вычитание объектов.)
- пересеките 2 объекта и сможете определить "линию" пересечения.
Какую библиотеку / инструмент вы бы предложили для этого? Можете ли вы оценить, насколько сложно было бы освоить его для выполнения вышеуказанных задач?
Спасибо,
Ронен
2 ответа
Я предвзято (разработчик PythonOCC), но я бы сказал, что OpenCasCade лучше всего подойдет для ваших нужд. Он поставляется с Step и Iges импортерами из коробки (больше форматов поддерживается на коммерческой основе), где вам придется анализировать и восстанавливать геометрию из файла с Boost и CGAL. Наконец, ни один из этих пакетов не имеет дело с геометрией nurbs / CAD ( BRep, представление границ), а просто с треугольниками (суп из многоугольника). Итак, OCC лучше всего подходит под объем IMHO.
У меня есть опыт работы с 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