我使用CGAL对隐式曲面进行网格划分,到目前为止,example已接近我想要完成的任务。
但是,隐式曲面由几个连接的组件组成,其中可能无法检测到一个。
例如,如果初始点数设置为800
// meshing surface
CGAL::make_surface_mesh(c2t3, surface, criteria, CGAL::Manifold_with_boundary_tag(),800);
可以找到具体的组件。
但是,我宁愿提供明确的起点,这很容易被我的程序找到。不幸的是,我不明白如何使用CGAL实现这一目标。
从文档中我发现这个方法可能会有所帮助
SurfaceMeshTraits_3 :: Construct_initial_points()
我无法弄清楚,如何整合这个。
有人可以通过CGAL模板编程“熟悉”给我一个粗略的草图如何继续 - 可能只是模板< ...>类XXX public:YYY { Construct_initial_points ...}将在上面的示例代码中使用?
答案 0 :(得分:1)
如果我理解正确,你实际上想要从一个点集构造一个表面。只有tutorial就可以了。
帮助一下:
CGAL::make_surface_mesh(c2t3, // reconstructed mesh
surface, // implicit surface
criteria, // meshing criteria
CGAL::Manifold_with_boundary_tag()); // require manifold mesh
上面的代码显示了为构建曲面而必须提供的内容。您的结果存储在c2t3中,您可以使用泊松函数从example中显示的一组点生成隐式曲面:
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()) );
有两种方法可以继续:
包含从隐式函数生成的点集中的初始点,并在其上定义泊松重建函数。
提供SurfaceMeshTraits_3可以传递您可以传递的类模型。
原则上两个是困难的,你必须从开始重新定义它,修改现有的,或从当前和实现派生:
construct_initial_points_object()
提示:CGAL中的概念是抽象类,模型是具体实现。
完成后,您可以使用
CGAL::Surface_mesh_complex_2_in_triangulation_3< YOUR_NEW_TRAITS >
使用它。
为了实现自定义重建(例如,没有