Создавайте параметризованные 3D примитивы с помощью cgal

Я использую cgal для оценки научных данных (поверхность многогранника, массовая доля, доля пустот, …).

Я выполняю логические операции, чтобы вырезать объемы измерений (подобъем, где я хочу усреднить данные). В этом особом случае это цилиндр. Теперь я прочитаю общий цилиндр из файла STL и преобразую его в нужный размер и положение. Это не очень элегантно. Например, невозможно настроить разрешение триангуляции поверхности.

Гораздо лучше (более общий подход) было бы генерировать объем моего зонда во время выполнения. Есть ли у cgal модуль для создания 3D примитивов? Я не мог найти что-то подобное в документации.

Я совершенно новичок в cgal и немного смущен этими документами. Так что вполне возможно, что я что-то упустил.

Было бы очень хорошо, если бы кто-нибудь дал мне подсказку о том, как начать решать эту проблему!

Заранее спасибо!

0

Решение

Для всех, кто пробует что-то подобное, вот мое решение:

#include <CGAL/Polyhedron_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/Nef_polyhedron_3.h>
#include <CGAL/convex_hull_3.h>

Nef_polyhedron_3 create_probe_cylinder(unsigned int argNum_segments, double argRadius, double argZmin, double argZmax)
{

std::vector<Point_3> probecylinder_points;
double x, y;
for (unsigned int point_index = 0; point_index < argNum_segments; point_index++)
{
x = argRadius*cos(2*M_PI*point_index/argNum_segments);
y = argRadius*sin(2*M_PI*point_index/argNum_segments);;

Point_3 point_bot(x,y, argZmin);
Point_3 point_top(x,y, argZmax);

probecylinder_points.push_back(point_bot);
probecylinder_points.push_back(point_top);
}

std::cout << "creating convex hull.." << std::endl;

Polyhedron_3 poly_cylinder;
CGAL::convex_hull_3(probecylinder_points.begin(), probecylinder_points.end(), poly_cylinder);

std::cout << "converting to nef poly.." << std::endl;
Nef_polyhedron_3 nef_cylinder(poly_cylinder);

return nef_cylinder;
}

Краткое содержание кода:

1) создать список точек (обод снизу / сверху). argNum_segments устанавливает разрешение цилиндра (количество сегментов)

2) создать выпуклую оболочку из списка точек

3) преобразовать многогранник в представление nef (необходимо для логических операций)

Там может быть лучшее решение. Если кто-то знает, как выполнить эту задачу более элегантно, пожалуйста, дайте мне знать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]