c++ - CGAL edge_collapse 断言失败
问题描述
我正在使用具有内核类型typedef CGAL::Simple_cartesian<float> Kernel;
和表面网格类型的 CGAL 5.1typedef CGAL::Surface_mesh<Kernel::Point_3> Mesh;
我通过 Assimp 加载网格,一切似乎都很好。但是当我开始运行 edge_collapse 时,我得到一个断言失败CGAL_assertion(resulting_vertex_count == vertices(m_tm).size());
果然,对顶点总数减去删除的顶点数进行数学运算表明,无论我设置的比率如何,它都偏离了一个。
相关代码为:
if(!CGAL::is_triangle_mesh(*node->mesh_info.mesh))
{
std::cerr << "Input geometry is not triangulated." << std::endl;
return;
}
if(!is_valid_polygon_mesh(*node->mesh_info.mesh))
{
std::cerr << "Input geometry is not valid." << std::endl;
return;
}
SMS::Count_ratio_stop_predicate<Mesh> stop(reduction);
SMS::edge_collapse(*node->mesh_info.mesh, stop);
这两个测试都通过了,所以我有什么明显的遗漏吗?我还没有尝试过其他算法,也没有设置任何可选属性。我已经使用 Assimp 的工具清理了网格,用于移除退化的面和边,并合并重合顶点,但我没有尝试过任何 CGAL 的工具。
我在每个顶点上都有一个“v:uv”属性,但位置属性是默认值。
如果有人可以给我一个健全性检查,我将不胜感激!
解决方案
在尝试将问题隔离到此处发布时,我开始玩弄,发现由于我的网格嘈杂且不完整 - 这是摄影测量扫描 - 标准的简化策略在我的边界上大吃一惊。忽略断言只会产生海星。
所以我按照用户手册中的示例,将我的边框标记为不可移动,现在它更快乐了。
推荐阅读
- windows - 无法在 Chrome 中启动 Flutter 项目
- c# - 具有空格分隔键的 C# Unflatten JSON 对象
- python - Azure devOps 中的 LRE 请求超时
- visual-studio-code - How to disable comment formatting in VS Code?
- python - 如何使用 Python Instaloader 跳过 Instagram Web 检查点
- mariadb - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法 SQL MOCK SBA 分配
- ethers.js - 如何在 ethers.js ABI 中定义一个结构数组返回类型
- javascript - 日期字段在 pagedlist 的第二页上失去价值
- java - 在 Java 中查询距 AWS DynamoDB 10 英里内的最近位置
- jquery - 如何从模态插入更新值