我正在使用cgal来评估科学数据(多面体表面,质量分数,空隙率,......)。
我预先做了布尔运算以减少我的测量量(我希望平均数据的子体积)。在这种特殊情况下它是一个圆柱体。到现在为止,我将从STL文件中读取一个通用柱面,并将其转换为所需的大小和位置。这不是很优雅。例如,无法调整表面三角测量的分辨率。
更好(更通用的方法)是在运行时生成探针卷。 cgal有一个模块来创建3D基元吗?我在文档中找不到类似的东西。
我对cgal很新,对这些文件有点困惑。所以我很可能忽视了一些事情。
如果有人能给我一个如何开始解决这个问题的提示,那将是非常好的!
提前致谢!
答案 0 :(得分: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表示(布尔运算所需)
可能有更好的解决方案。如果有人知道如何以更优雅的方式完成此任务,请告诉我。