今天重又用起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();