#ifndef __mesh_h_ #define __mesh_h_ #include "glm.h" namespace VMI { typedef struct _Vertex { float x, y, z; // Vertex coordinates int numTriangles; // Number of triangles int *triangles; // List of triangles int numEdges; int *edges; int enable; } Vertex; typedef struct _Edge { int u, v; // Edge vertices int enable; } Edge; typedef struct _Triangle { int id; // Triangle id int group; // Triangle group int submesh; // Triangle submesh int indices[3]; // Triangle vertices float normal[3]; // Triangle normal double area; // Triangle area double saliency; // Triangle saliency int enable; } Triangle; typedef struct _Mesh { Vertex *vertices; // Mesh vertices int numVertices; // Number of vertices int currentNumVertices; // Current number of vertices Edge *edges; // Mesh edges int numEdges; // Number of edges Triangle *triangles; // Mesh triangles int numTriangles; // Number of triangles int currentNumTriangles; // Current number of triangles } Mesh; extern GLdouble computeTriangleArea(Vertex *vertices, Triangle *t); extern double computeEdgeLength(Vertex *vertices, int u, int v); extern void computeTriangleNormal(Vertex *vertices, Triangle *t); extern double computeTriangleVolume(Vertex *vertices, Triangle *t); extern int addEdge(Mesh *mesh, int u, int v); extern int addTriangle(Mesh *mesh, int curGroup, int v1, int v2, int v3); extern int addVertex(Mesh *mesh, float x, float y, float z); extern Vertex *addVertex(Vertex *list, int *n, float x, float y, float z, int *pos); extern int findEdge(Edge *e, int num, int _u, int _v); extern Edge *addEdge(Edge *list, int *n, int u, int v, int *pos); extern GLboolean findVertex(float *vertices, int num, float x, float y, float 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, int numVertices, int numTriangles); extern int *trianglesAdjToEdge(Mesh *mesh, int e, int *n); extern int *verticesAdjToVertex(Mesh *mesh, int v, int *n); extern int *edgesAdjToVertices(Mesh *mesh, int *vertices, int numVertices, int *n); // list of integers 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); extern void delItem(int *list, int *n, int item); } #endif