⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_mesh.cc

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 CC
字号:
#define TA 1#define PA 0#if TA#  include <OpenMesh/Core/Mesh/Types/TriMesh_ArrayKernelT.hh>#  define MESH_TYPE TriMesh_ArrayKernelT#elif PA#  include <OpenMesh/Core/Mesh/Types/PolyMesh_ArrayKernelT.hh>#  define MESH_TYPE PolyMesh_ArrayKernelT#else#  error You should define a mesh type#endifusing namespace OpenMesh;using namespace OpenMesh::Attributes;struct MyTraits1 : public virtual DefaultTraits{  VertexAttributes   (Attributes::Normal);  HalfedgeAttributes (Attributes::PrevHalfedge);  FaceAttributes     (Attributes::Normal);  VertexTraits  {    typename Refs::Point aa;  };  FaceTraits  {    typename Refs::VertexHandle traits_vertex_handle;  };};struct MyTraits2 : public virtual DefaultTraits{  VertexAttributes  (Attributes::Status);  EdgeAttributes    (Attributes::Status);  FaceAttributes    (Attributes::Status);  VertexTraits  {    typename Refs::Point bb;  };};OM_Merge_Traits(MyTraits1, MyTraits2, MyTraits);typedef MESH_TYPE<MyTraits>  MyMesh;int main(){  MyMesh                   m;  MyMesh::VertexHandle     vh0, vh1, vh2, vh3;  MyMesh::FaceHandle       fh;  MyMesh::EdgeHandle       eh;  MyMesh::HalfedgeHandle   heh0, heh1;  //MyMesh::VertexIter       vi;  //MyMesh::ConstVertexIter  cvi(vi);  //MyMesh::ConstVertexFaceIter cvfit;  // use face's vertex handle  MyMesh::Face f;  f.traits_vertex_handle = MyMesh::VertexHandle(0);  MyMesh::Vertex v;  v.aa = v.bb = MyMesh::Point(1,2,3);    // sizes  std::cout     << "\nsizeof(MyMesh::Point)    = "     << sizeof(MyMesh::Point)     << "\nsizeof(MyMesh::Vertex)   = "     << sizeof(MyMesh::Vertex)    << "\nsizeof(MyMesh::Halfedge) = "     << sizeof(MyMesh::Halfedge)    << "\nsizeof(MyMesh::Edge)     = "     << sizeof(MyMesh::Edge)    << "\nsizeof(MyMesh::Face)     = "     << sizeof(MyMesh::Face)     << "\n\n";  // support prev halfedge ?  std::cout << "stores prev halfedge: "  	    << MyMesh::has_prev_halfedge()	    << "\n\n";  // add vertices  vh0 = m.add_vertex(MyMesh::Point(1,0,0));  vh1 = m.add_vertex(MyMesh::Point(0,2,0));  vh2 = m.add_vertex(MyMesh::Point(0,0,3));  vh3 = m.add_vertex(MyMesh::Point(4,0,0));  // add face  std::vector<MyMesh::VertexHandle> vhandles(3);  vhandles[0] = vh0;  vhandles[1] = vh1;  vhandles[2] = vh2;  fh = m.add_face(vhandles);  vhandles[0] = vh2;  vhandles[1] = vh1;  vhandles[2] = vh3;  fh = m.add_face(vhandles);  std::cout << m.n_vertices() << " vertices, "	    << m.n_edges()    << " edges, "	    << m.n_faces()    << " faces\n\n";  // edge-halfedge test  heh0 = m.halfedge_handle(fh);  heh1 = m.opposite_halfedge_handle(heh0);  eh   = m.edge_handle(heh1);  std::cout << "edge <-> halfedge test:\n";  std::cout << "{" << heh0 << ", " << heh1 << "} == {"	    << m.halfedge_handle(eh, 0) << ", "	    << m.halfedge_handle(eh, 1) << "}\n\n";  // opposite test  std::cout << "opposite test:\n";  std::cout << heh0 	    << " == " 	    << m.opposite_halfedge_handle(heh1) 	    << " && "	    << heh1 	    << " == " 	    << m.opposite_halfedge_handle(heh0) 	    << "\n\n";  // next-prev test  std::cout << "next <-> prev test:\n";  heh1 = m.prev_halfedge_handle(heh0);  std::cout << heh0 	    << " == " 	    << m.next_halfedge_handle(heh1) 	    << "\n\n";    // additional attributes  m.update_face_normals();  m.update_vertex_normals();    // halfedge iter  MyMesh::HalfedgeIter  hIt(m.halfedges_begin()),                         hEnd(m.halfedges_end());  int count=0;  std::cout << "HalfedgeIter test:\n";  for (; hIt != hEnd; ++hIt, ++count);  std::cout << count << " halfedges\n\n";  // deletion test  m.delete_vertex(MyMesh::VertexHandle(0));  m.garbage_collection();  std::cout << m.n_vertices() << " vertices, "	    << m.n_edges()    << " edges, "	    << m.n_faces()    << " faces\n\n";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -