• 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();

  • 相关阅读:
    Java基础-Object通用方法
    Java基础-关键字
    Java基础-运算
    Java基础-String
    Java基础-数据类型
    GCN-GAN:对加权动态网络的非线性时间链路预测模型
    长短期记忆(long short-term memory, LSTM)
    CSP 201604-1 折点计数
    介绍一个好东西C++11
    malloc free使用规范
  • 原文地址:https://www.cnblogs.com/vranger/p/2888153.html
Copyright © 2020-2023  润新知