简介
查找一个顶点的一层领域面
代码
#include <iostream>
#include <vector>
// -------------------- OpenMesh
using namespace std;
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
#include <OpenMesh/Core/Mesh/Handles.hh>
typedef OpenMesh::TriMesh_ArrayKernelT<>MyMesh;
int main()
{
MyMesh mesh;
// read mesh from stdin
int a, x0, y0;
if (!OpenMesh::IO::read_mesh(mesh, "C:/Users/lee/Desktop/output8.off"))
{
cerr << "Error: cannot write mesh to " << endl;
return 1;
}
cout << "请输入您要查找邻域的顶点坐标:" << endl;
cout << "x="; cin >> x0;
cout << "y="; cin >> y0;
for (MyMesh::VertexIter v_it = mesh.vertices_begin(); v_it != mesh.vertices_end(); ++v_it)
{
// circulate around the current vertex
auto point = mesh.point(*v_it);
if (point.data()[0] == x0 && point.data()[1] == y0)// 找到匹配的点
for (MyMesh::VertexFaceIter vf_it = mesh.vf_iter(*v_it); vf_it.is_valid(); ++vf_it)//这个顶点所带有的面迭代器
{
for (MyMesh::FaceHalfedgeIter fh_it = mesh.fh_begin(*vf_it); fh_it != mesh.fh_end(*vf_it); ++fh_it)//面的半边迭代器
//一个面有3个半边
{
OpenMesh::ArrayKernel::VertexHandle to_v = mesh.to_vertex_handle(*fh_it);// 这个半边所带有的点的handle
OpenMesh::Vec3f point = mesh.point(to_v);
cout << "邻域面顶点坐标x:" << point.data()[0] << " y:" << point.data()[1] << " z:" << point.data()[2] << endl;
}
cout << "\n";
}
else continue;
}
cin >> a;
// write mesh to stdout
if (!OpenMesh::IO::write_mesh(mesh, "output9.off"))
{
cerr << "Error: cannot write mesh to " << endl;
return 1;
}
return 0;
}
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》