【发布时间】:2023-04-06 14:12:02
【问题描述】:
我有一个来自约束 delaunay 三角剖分的 Cdt。我需要获得应该是微不足道的边界边缘:只有一个面但我不知道如何在 CGAL 中获得这些边缘:
for(Cdt::Finite_edges_iterator eit = cdt.finite_edges_begin(); eit != cdt.finite_edges_end(); ++eit)
{
CD_Cdt::Edge ed = *eit;
???
}
- 红线是边界
还有一件事,使用 is_constrained() 是没用的,因为我之前已经删除了一些面孔。
======== 编辑 ========
user3146587 的回答确实有效,但由于我删除了一些面孔,我无法再检测到边界:
std::vector<CDT::Face_handle> invalid_fhs;
// ... add faces to invalid_fhs
// I delete all face handles in invalid_fhs
for(int a = invalid_fhs.size() - 1; a >= 0; a--)
{ cdt.delete_face(invalid_fhs[a]); }
【问题讨论】:
-
请参阅 2D 三角剖分数据结构的高级修饰符的文档:“为方便高级用户,需要以下修饰符。它们不保证生成的三角剖分的组合有效性。”删除面后,您需要对孔进行三角测量。
-
与其删除您不感兴趣的面孔,不如将它们标记为“已删除”(面孔类型需要使用此信息进行扩充)。二维三角测量数据结构将保持其完整性。您可以将完全约束的 Delaunay 三角剖分的边界传播到您想要保留的有效面的子集。
-
谢谢,帮了大忙!