CGAL 3D曲面网格生成设置初始点



我使用CGAL对隐式曲面进行网格划分,到目前为止,此示例已接近我想要实现的目标。

然而,隐式表面由几个连接的组件组成,其中一个可能无法检测到。

例如,如果初始点数设置为800

  // meshing surface
  CGAL::make_surface_mesh(c2t3, surface, criteria, CGAL::Manifold_with_boundary_tag(),800);

可以找到具体的组成部分。

然而,我更愿意提供明确的起点,这很容易被我的程序找到。不幸的是,我不知道如何通过CGAL实现这一点。

从文件中我发现这种方法可能有助于

SurfaceMeshTraits_3::Construct_initial_points()

我搞不清楚,怎么把这个整合起来。

熟悉CGAL模板编程的人能给我一个大致的草图吗?也许只是模板<…>XXX类公共:YYY{Construct_initial_points…}正如上面的示例代码中所使用的那样?

如果我理解正确,您实际上想要从点集构造曲面。这里有一个教程。

帮助一下:

CGAL::make_surface_mesh(c2t3,                                 // reconstructed mesh
                        surface,                              // implicit surface
                        criteria,                             // meshing criteria
                        CGAL::Manifold_with_boundary_tag());  // require manifold mesh

上面的代码显示了为了构建曲面必须提供的内容。结果存储在c2t3中,您可以使用泊松函数从一组点生成隐式曲面:

typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Poisson_reconstruction_function<Kernel> Poisson_reconstruction_function;
Poisson_reconstruction_function function(points.begin(), points.end(),
        CGAL::make_normal_of_point_with_normal_pmap(PointList::value_type()) );

有两种方法:

  1. 将初始点包括在由隐式函数生成的点集中,并在此基础上定义泊松重建函数。

  2. 提供SurfaceMeshTraits_3特征类模型,您可以继续传递该模型。

原则上,第二个是困难的,你必须从一开始就重新定义它,修改现有的,或者从当前的派生并实现:

construct_initial_points_object()

提示:CGAL中的概念是抽象类,模型是具体实现。

完成后,您可以使用

CGAL::Surface_mesh_complex_2_in_triangulation_3< YOUR_NEW_TRAITS >

为了实现自定义重建(例如,没有

相关内容

  • 没有找到相关文章

最新更新