<2x6x2>OpenMesh译稿:使用并理解OpenMesh-边的折叠

                                                        

在本节中,您将会了解到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 
来源:CSDN 
原文:https://blog.csdn.net/feengg/article/details/88367786
版权声明:本文为博主原创文章,转载请附上博文链接!

     更多精彩文章,请扫码关注公众号,嘿嘿~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值