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

  • 相关阅读:
    用C# WebClient类 提交数据
    a标签弹出 文件上载框
    C中 #define
    五款专业文本编辑器比较(转贴)
    IE和Firefox(火狐)在JavaScript方面的不兼容及统一方法总结
    全球历史票房排行
    ASP调用带参数存储过程的几种方式
    VB6.0如何使用正则表达式
    实现VB与EXCEL的无缝连接
    初识Firebug 全文 — firebug的使用
  • 原文地址:https://www.cnblogs.com/vranger/p/2888153.html
Copyright © 2020-2023  润新知