www.pudn.com > View3D.zip > HE_mesh.h
#ifndef HE_MESH_H #define HE_MESH_H #include "linklist.h" #include "GA_lib.h" #include "GA_math.h" #include#include using namespace std; #define EDGE_NO_REVERSE 1000 class HE_Vert; class HE_HalfEdge; class HE_Face; class HE_Vert{ public: int index; int flag; float co[3]; float no[3]; float gauss_cur; HE_HalfEdge * outedge; HE_Vert *next,*prev; public: HE_Vert(){ index = -1; co[0] = co[1] = co[2] = 0.0; no[0] = no[1] = no[2] = 0.0; gauss_cur = 0.0; outedge = NULL; next = NULL; prev = NULL; } }; class HE_HalfEdge{ public: int index; int flag; float length; HE_Vert * start; HE_HalfEdge * reverse; HE_HalfEdge * nextedge; HE_Face * face; HE_HalfEdge *next,*prev; public: HE_HalfEdge(){ length = 0.0; index = -1; start = NULL; reverse = NULL; nextedge = NULL; face = NULL; next = NULL; prev = NULL; } }; class HE_Face{ public: int index; int flag; float no[3]; HE_HalfEdge * edge; HE_Face *prev,*next; public: HE_Face(){ index = -1; no[0] = no[1] = no[2] = 0.0; edge = NULL; prev = NULL; next = NULL; } }; class HE_Mesh{ public: LinkList verts; LinkList edges; LinkList faces; float center[3]; public: int LoadWaveFrontObj(char * filename); int MoveToCenter(); vector VSurroundVertices(HE_Vert * vpos); vector VSurroundEdges(HE_Vert * vpos); int Gauss_Curvature(HE_Vert* vpos); int Gauss_CurvatureAll(); int CalcEdgeLength(HE_HalfEdge * epos); int CalcAllEdgeLength(); int GetReverseEdge(); int PM_CollapseEdge(HE_HalfEdge * epos); int PM_CanCollapse(HE_HalfEdge * epos); HE_HalfEdge * PM_SelectEdge(); int PM_Simplify(); int FCalculateNormFace(HE_Face * fpos); int FCalculateNormAllFace(); vector FSurroundVertices(HE_Face * fpos); }; #endif