vcg.tri.Clean

vcg.tri.Clean是一个用于三角网格数据清理的类。它提供了多种方法来处理三角网格上的不一致部分,并根据选项运用各种策略来更正不一致。

方法

  • triFixSelfIntersection(MeshType &m, bool delete_tets = true)
    使用自相交修复算法去除三角网格上的自相交。
    参数:\

    • m:MeshType类型,三角网格数据。
    • delete_tets:bool类型,选择是否删除自相交六面体单元(默认为true)。
  • triFixTJunction(MeshType &m, float cos_angle = 0.501, bool split_long_edges = true)
    使用T字处理修复算法去除三角网格上的T字连接。
    参数:\

    • m:MeshType类型,三角网格数据。
    • cos_angle:float类型,表示两条边拐角的cosine值,小于该值的边将被认为是需要修复的T字连接(默认为0.501)。
    • split_long_edges:bool类型,表示是否允许长边被分裂成多条较短边(默认为true)。
  • triFixNonManifold(MeshType &m, int rule = 0)
    使用非流形处理修复算法去除三角网格上的非流形(不可连续)的部分。
    参数:\

    • m:MeshType类型,三角网格数据。
    • rule:int类型,表示使用哪种算法去除非流形。\
      • 0表示使用默认算法(默认值),
      • 1表示使用二次法修正冗余边界
      • 2表示使用像素填充。

属性

本类没有属性。

示例代码

#include <vcg/complex/complex.h>
#include <vcg/complex/algorithms/clean.h>

using namespace vcg;
using namespace std;

class MyMesh : public vcg::tri::TriMesh<vector<VertexType>, vector<FaceType> > {};

int main()
{
    MyMesh m;
    vcg::tri::io::Importer<MyMesh>::Open(m, "mesh.obj"); //导入三角网格

    Clean<MyMesh>::RemoveDuplicateVertex(m); //调用其他清理算法
    Clean<MyMesh>::RemoveNonManifoldFace(m);
    Clean<MyMesh>::RemoveUnreferencedVertex(m);
    Clean<MyMesh>::TriMeshTetrahedralize(m);  

    tri::Clean<MyMesh>::triFixNonManifold(m); //调用本类的清理算法

    tri::io::Exporter<MyMesh>::Save(m, "clean.obj"); //导出清理后的三角网格
    return 0;
}

上述代码演示了使用vcg.tri.Clean类对三角网格进行数据清理的基本流程。