#ifndef __mesh_h_ #define __mesh_h_ #include "glm.h" namespace VMI { typedef struct _Vertex { GLfloat x, y, z; // Vertex coordinates GLuint numTriangles; // Number of triangles GLuint *triangles; // List of triangles int enable; } Vertex; typedef struct _Edge { GLuint u, v; // Edge vertices GLuint *triangles; // Edge triangles GLuint numTriangles; // Number of triangles int enable; } Edge; typedef struct _Triangle { GLuint id; // Triangle id GLuint submesh; // Triangle submesh GLuint indices[3]; // Triangle vertices GLuint edges[3]; // Triangle edges GLfloat normal[3]; // Triangle normal GLdouble area; // Triangle area GLdouble saliency; // Triangle saliency int enable; } Triangle; typedef struct _Mesh { Vertex *vertices; // Mesh vertices GLuint numVertices; // Number of vertices GLuint currentNumVertices; // Current number of vertices Edge *edges; // Mesh edges GLuint numEdges; // Number of edges Triangle *triangles; // Mesh triangles GLuint numTriangles; // Number of triangles GLuint currentNumTriangles; // Current number of triangles } Mesh; extern GLdouble computeTriangleArea(Vertex *vertices, Triangle *t); extern void computeTriangleNormal(Vertex *vertices, Triangle *t); extern int findEdge(Edge *e, GLuint num, GLuint _u, GLuint _v); extern GLboolean findVertex(GLfloat *vertices, GLuint num, GLfloat x, GLfloat y, GLfloat z, int *pos); extern Mesh *initMesh(GLMmodel* pmodel); extern void deleteMesh(Mesh *mesh); extern void printMesh(Mesh *mesh); extern void saveModel(char *filename, GLMmodel* pmodel, Mesh *mesh); extern void updateModel(GLMmodel* pmodel, Mesh *mesh, GLuint numVertices, GLuint numTriangles); extern int *trianglesAdjToEdge(Mesh *mesh, int e, int *n); extern int *trianglesAdjToVertex(Mesh *mesh, int v, int *n); extern int *verticesAdjToVertex(Mesh *mesh, int v, int *n); extern int *edgesAdjToVertex(Mesh *mesh, int v, int *n); extern int *edgesAdjToVertices(Mesh *mesh, int *vertices, int numVertices, int *n); extern void printItemList(int *list, int n); extern int findItem(int *list, int n, int item); extern void addItem(int *list, int *n, int item); } #endif