OpenMesh 编辑三角网格(1)-- 删除三角片

今天重又用起OpenMesh,动态编辑网格,效率很高。但中间遇到一个问题,花了我半天时间才搞定。

我使用删除顶点函数如下(一)所示,mesh_.garbage_collection();也加了,但怎么都删不掉,总是报错。

 

(一)

//顶点删除设置
  for (v_h_itr=del_v_handle_set.begin();v_h_itr!=del_v_handle_set.end();v_h_itr++)
  {
   Mesh::VertexHandle _vf=(*v_h_itr);
   pDmesh->mesh_.delete_vertex(_vf,false);
  }

  //执行删除操作
  pDmesh->mesh_.garbage_collection();

 

完全按照OpenMesh官网上提供的例子,就是不行。查阅之前的代码,才发现delete几何元素之前,要先获取它的属性定义。

用完后释放。如下(二)所示,问题解决。

(二) 

//获取预先定义属性
  if (!pDmesh->mesh_.has_vertex_status())
   pDmesh->mesh_.request_vertex_status();
  if(!pDmesh->mesh_.has_face_status())
   pDmesh->mesh_.request_face_status();
  if(!pDmesh->mesh_.has_edge_status())
   pDmesh->mesh_.request_edge_status();
  //


  //顶点删除设置
  for (v_h_itr=del_v_handle_set.begin();v_h_itr!=del_v_handle_set.end();v_h_itr++)
  {
   Mesh::VertexHandle _vf=(*v_h_itr);
   pDmesh->mesh_.delete_vertex(_vf,false);
  }

  //执行删除操作
  pDmesh->mesh_.garbage_collection();


  //释放预先定义属性
  if (pDmesh->mesh_.has_vertex_status())
   pDmesh->mesh_.release_vertex_status();/**/
  if(pDmesh->mesh_.has_face_status())
   pDmesh->mesh_.release_face_status();
  if(pDmesh->mesh_.has_edge_status())
   pDmesh->mesh_.release_edge_status();

posted @ 2013-01-31 20:24  vranger  Views(2871)  Comments(0Edit  收藏  举报