[983] | 1 | #ifndef __mesh_h_
|
---|
| 2 | #define __mesh_h_
|
---|
| 3 |
|
---|
| 4 | #include "glm.h"
|
---|
| 5 | namespace VMI
|
---|
| 6 | {
|
---|
| 7 |
|
---|
| 8 | typedef struct _Vertex {
|
---|
[2127] | 9 | float x, y, z; // Vertex coordinates
|
---|
| 10 | int numTriangles; // Number of triangles
|
---|
| 11 | int *triangles; // List of triangles
|
---|
| 12 | int numEdges;
|
---|
| 13 | int *edges;
|
---|
[983] | 14 | int enable;
|
---|
| 15 | } Vertex;
|
---|
| 16 |
|
---|
| 17 | typedef struct _Edge {
|
---|
[2127] | 18 | int u, v; // Edge vertices
|
---|
[983] | 19 | int enable;
|
---|
| 20 | } Edge;
|
---|
| 21 |
|
---|
| 22 | typedef struct _Triangle {
|
---|
[2127] | 23 | int id; // Triangle id
|
---|
| 24 | int group; // Triangle group
|
---|
| 25 | int submesh; // Triangle submesh
|
---|
| 26 | int indices[3]; // Triangle vertices
|
---|
| 27 | float normal[3]; // Triangle normal
|
---|
| 28 | double area; // Triangle area
|
---|
| 29 | double saliency; // Triangle saliency
|
---|
[983] | 30 | int enable;
|
---|
| 31 | } Triangle;
|
---|
| 32 |
|
---|
| 33 | typedef struct _Mesh {
|
---|
| 34 | Vertex *vertices; // Mesh vertices
|
---|
[2127] | 35 | int numVertices; // Number of vertices
|
---|
| 36 | int currentNumVertices; // Current number of vertices
|
---|
[983] | 37 | Edge *edges; // Mesh edges
|
---|
[2127] | 38 | int numEdges; // Number of edges
|
---|
[983] | 39 | Triangle *triangles; // Mesh triangles
|
---|
[2127] | 40 | int numTriangles; // Number of triangles
|
---|
| 41 | int currentNumTriangles; // Current number of triangles
|
---|
[983] | 42 | } Mesh;
|
---|
| 43 |
|
---|
| 44 | extern GLdouble computeTriangleArea(Vertex *vertices, Triangle *t);
|
---|
[2127] | 45 | extern double computeEdgeLength(Vertex *vertices, int u, int v);
|
---|
[983] | 46 | extern void computeTriangleNormal(Vertex *vertices, Triangle *t);
|
---|
[2127] | 47 | extern double computeTriangleVolume(Vertex *vertices, Triangle *t);
|
---|
[983] | 48 |
|
---|
[2323] | 49 | extern int addEdge(Mesh *mesh, int u, int v);
|
---|
| 50 | extern int addTriangle(Mesh *mesh, int curGroup, int v1, int v2, int v3);
|
---|
| 51 | extern int addVertex(Mesh *mesh, float x, float y, float z);
|
---|
| 52 |
|
---|
[2090] | 53 | extern Vertex *addVertex(Vertex *list, int *n, float x, float y, float z, int *pos);
|
---|
[2127] | 54 | extern int findEdge(Edge *e, int num, int _u, int _v);
|
---|
[2090] | 55 | extern Edge *addEdge(Edge *list, int *n, int u, int v, int *pos);
|
---|
[2127] | 56 | extern GLboolean findVertex(float *vertices, int num, float x, float y, float z, int *pos);
|
---|
[983] | 57 |
|
---|
| 58 | extern Mesh *initMesh(GLMmodel* pmodel);
|
---|
| 59 | extern void deleteMesh(Mesh *mesh);
|
---|
| 60 | extern void printMesh(Mesh *mesh);
|
---|
| 61 | extern void saveModel(char *filename, GLMmodel* pmodel, Mesh *mesh);
|
---|
[2127] | 62 | extern void updateModel(GLMmodel* pmodel, Mesh *mesh, int numVertices, int numTriangles);
|
---|
[983] | 63 |
|
---|
| 64 | extern int *trianglesAdjToEdge(Mesh *mesh, int e, int *n);
|
---|
| 65 | extern int *verticesAdjToVertex(Mesh *mesh, int v, int *n);
|
---|
| 66 | extern int *edgesAdjToVertices(Mesh *mesh, int *vertices, int numVertices, int *n);
|
---|
| 67 |
|
---|
[2090] | 68 | // list of integers
|
---|
[983] | 69 | extern void printItemList(int *list, int n);
|
---|
| 70 | extern int findItem(int *list, int n, int item);
|
---|
| 71 | extern void addItem(int *list, int *n, int item);
|
---|
[2090] | 72 | extern void delItem(int *list, int *n, int item);
|
---|
[983] | 73 |
|
---|
| 74 |
|
---|
| 75 | }
|
---|
| 76 |
|
---|
| 77 | #endif
|
---|