使用cgal创建参数化的3D基元

时间:2015-10-18 12:19:02

标签: c++ 3d primitive cgal

我正在使用cgal来评估科学数据(多面体表面,质量分数,空隙率,......)。

我预先做了布尔运算以减少我的测量量(我希望平均数据的子体积)。在这种特殊情况下它是一个圆柱体。到现在为止,我将从STL文件中读取一个通用柱面,并将其转换为所需的大小和位置。这不是很优雅。例如,无法调整表面三角测量的分辨率。

更好(更通用的方法)是在运行时生成探针卷。 cgal有一个模块来创建3D基元吗?我在文档中找不到类似的东西。

我对cgal很新,对这些文件有点困惑。所以我很可能忽视了一些事情。

如果有人能给我一个如何开始解决这个问题的提示,那将是非常好的!

提前致谢!

1 个答案:

答案 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表示(布尔运算所需)

可能有更好的解决方案。如果有人知道如何以更优雅的方式完成此任务,请告诉我。