OpenMesh实现对点编辑
OpenMesh 通过handle操作,使用set_point()函数对点的位置操作,同时保持面的结构.
以下是对官方教程中的cube(output.off)进行每个点遍历,每个点坐标+1.
如图所示,向右上方平移.
#include <iostream>
// -------------------- OpenMesh
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
// ----------------------------------------------------------------------------
typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh;
// ----------------------------------------------------------------------------
// Build a simple cube and write it to std::cout
int main()
{
MyMesh mesh;
// generate vertices
if(!OpenMesh::IO::read_mesh(mesh, "output.off")){
std::cerr<<"Read error"<<std::endl;
exit(1);
}
//iterate all point
MyMesh::VertexIter v_it, v_end(mesh.vertices_end());
for(v_it = mesh.vertices_begin(); v_it!=v_end; v_it++){
MyMesh::Point mypoint;
for(int i=0; i<3; i++){
mypoint[i] = mesh.point(*v_it)[i] + 1;
}
mesh.set_point(*v_it, mypoint);
std::cout<<mesh.point(*v_it)<<std::endl;//*v_it is the handle
}
if(!OpenMesh::IO::write_mesh(mesh, "output2.off")){
std::cerr<<"write failed"<<std::endl;
}
return 0;
}