对于CGAL下的约束三角剖分,网格元素的排序是否从运行变为运行?

问题描述 投票:1回答:1

在使用Loyd优化生成约束delauny三角剖分后,我迭代finie_vertiecesfinite_edgesfinite_faces。我在VS2012上使用CGAL 4.12在发布模式下。我看到一个给定的情况finite_verices列表是可重复的(finite_faces下的顶点列表也是如此),然而,finite_edges中边缘的排序似乎从运行变为运行

for(auto eit = cdtp.finite_edges_begin(); eit != cdtp.finite_edges_end(); ++eit)
{

    const auto isConstrainedEdge  = cdtp.is_constrained(*eit);
    auto & cFace = *(eit->first);
    auto cwVert = cFace.vertex(cFace.cw(eit->second));
    auto ccwVert = cFace.vertex(cFace.ccw(eit->second));

我使用上面的代码片段来提取顶点列表,并且具有给定边缘的顶点列表从运行变为运行。任何帮助都很感激解决这个问题,因为我正在寻找代码中的一致行为。我的三角测量涉及二维域上的许多线约束。

mesh cgal triangulation delaunay
1个回答
2
投票

我是told它可能是可靠的行为,但不保证秩序。 IIRC文件说不能保证遍历顺序。我认为最好假设迭代器的横向不是确定性的并且可能会改变。

您可以使用任何_info extensions将信息嵌入到面部,边缘等(可能是哈希?),然后您可以检查以检测更改。

在我的用例中,我想并行遍历网格,OpenMP不支持迭代器。所以我在内存中保存了一个Face_handles的向量,然后我可以很容易地将其索引。结合_info数据,您可以使用它来使用->info()字段中的唯一信息构建具有保证顺序的边,面等矢量。

另一个_info example

© www.soinside.com 2019 - 2024. All rights reserved.