在本节中,您将会了解到OpenMesh提供网格的基本操作,边的折叠。
边的折叠
在此剖分,您将会学习如何使两个相邻的顶点合并,OpenMesh提供了OpenMesh::PolyConnectivity::collapse(HalfedgeHandle _heh)来执行这个操作。对于指定的半边,半边的起点将被折叠到其终点上,对应的半边和起点将被删除。如下图所示。在折叠边操作之后,有可能会导致网格拓扑的不一致,可以调用函数
OpenMesh::PolyConnectivity::is_collapse_ok()进行验证。
注意:
为了使用折叠和删除操作,需要请求基本元的状态属性。
代码如下:
PolyMesh mesh;
// Request required status flags
mesh.request_vertex_status();
mesh.request_edge_status();
mesh.request_face_status();
// Add some vertices as in the illustration above
PolyMesh::VertexHandle vhandle[7];
vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, 1, 0));
vhandle[1] = mesh.add_vertex(MyMesh::Point(-1, 3, 0));
vhandle[2] = mesh.add_vertex(MyMesh::Point(0, 0, 0));
vhandle[3] = mesh.add_vertex(MyMesh::Point(0, 2, 0));
vhandle[4] = mesh.add_vertex(MyMesh::Point(0, 4, 0));
vhandle[5] = mesh.add_vertex(MyMesh::Point(1, 1, 0));
vhandle[6] = mesh.add_vertex(MyMesh::Point(1, 3, 0));
// Add three quad faces
std::vector<PolyMesh::VertexHandle> face_vhandles;
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[0]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[3]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[1]);
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[5]);
face_vhandles.push_back(vhandle[4]);
mesh.add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(vhandle[3]);
face_vhandles.push_back(vhandle[2]);
face_vhandles.push_back(vhandle[6]);
face_vhandles.push_back(vhandle[5]);
mesh.add_face(face_vhandles);
// Now find the edge between vertex vhandle[2]
// and vhandle[3]
for(PolyMesh::HalfedgeIter it = mesh.halfedges_begin(); it != mesh.halfedges_end(); ++it) {
if( mesh.to_vertex_handle(*it) == vhandle[3] &&
mesh.from_vertex_handle(*it) == vhandle[2])
{
// Collapse edge
mesh.collapse(*it);
break;
}
}
// Our mesh now looks like in the illustration above after the collapsing.
译者说明:因科研需要,避免重复造轮子,近来借用OpenMesh,因其结构封装严谨,灵活可靠,且十分方便,故抽出时间对官网的说明做点翻译。英文水平不高,如翻译有误请多多包涵,也请您多多指正。
上一篇:OpenMesh译稿:使用并理解OpenMesh-边的翻转
英文原文地址:http://www.openmesh.org/Documentation/OpenMesh-Doc-Latest/index.html
---------------------
作者:feengg
来源:优快云
原文:https://blog.youkuaiyun.com/feengg/article/details/88367786
版权声明:本文为博主原创文章,转载请附上博文链接!
更多精彩文章,请扫码关注公众号,嘿嘿~