C++ 用CGAL简化组合映射
我想使用CGAL将从.off文件读取的网格简化或边折叠为组合贴图C++ 用CGAL简化组合映射,c++,qt,graphics,computational-geometry,cgal,C++,Qt,Graphics,Computational Geometry,Cgal,我想使用CGAL将从.off文件读取的网格简化或边折叠为组合贴图 std::ifstream ifile(fileName.toStdString().c_str()); if (ifile) { CGAL::load_off(lcc, ifile); lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<st
std::ifstream ifile(fileName.toStdString().c_str());
if (ifile)
{
CGAL::load_off(lcc, ifile);
lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<std::endl;
}
namespace SMS = CGAL::Surface_mesh_simplification ;
SMS::Count_stop_predicate<LCC> stop(lcc.number_of_halfedges()/2 - 1);
int r = SMS::edge_collapse
(lcc
,stop
,CGAL::parameters::halfedge_index_map(get(CGAL::halfedge_index, lcc))
.vertex_index_map(get(boost::vertex_index, lcc))
.get_cost(SMS::Edge_length_cost<LCC>())
.get_placement(SMS::Midpoint_placement<LCC>())
);
std::cout << "\nFinished...\n" << r << " edges removed.\n"
<< (lcc.number_of_darts()/2) << " final edges.\n" ;
lcc.display_characteristics(std::cout)<<", is_valid="<<CGAL::is_valid(lcc)<<std::endl;
该方法什么都不做,我尝试了更多的.off文件,它可以正确地预览它,但它不能简化它
非常感谢您的帮助。请看下面给出的示例,它非常有效 尝试更改停止谓词参数或使用其他谓词(读取文档)。@gdamiand我尝试了SMS::Count\u stop\u predicate stop(1000);但它不起作用,再试试。。。我刚刚运行了这里给出的示例,效果非常好。谢谢你,我发现了问题,我使用读取而不是加载,它解决了问题。你知道如何存储删除的边以再次插入它们吗?请参阅;可以定义自己的函子来存储折叠边的列表。但这还不够,您还需要存储其他信息(事件顶点、点的位置…)是否有用于获取(事件顶点、点的位置…)的CGAL函数?
#Darts=16674, #0-cells=2775, #1-cells=8337, #2-cells=5558, #ccs=1, is_valid=1
Finished...
0 edges removed.
8337 final edges.
#Darts=16674, #0-cells=2775, #1-cells=8337, #2-cells=5558, #ccs=1, is_valid=1