00001
00002 #ifndef Tetraarray_H
00003 #define Tetraarray_H
00004
00005 #include <stdio.h>
00006 #include "tetra.h"
00007 #include "nodearray.h"
00008 #include "edgearray.h"
00009 #include "facearray.h"
00010
00011 class Tetra;
00012 class NodeArray;
00013 class EdgeArray;
00014 class FaceArray;
00015 class Object;
00016
00017 class TetraArray
00018 {
00019 private:
00020 int numtetras, maxtetras;
00021 Tetra* *tetras;
00022
00023
00024 NodeArray* nodearray_p;
00025 EdgeArray* edgearray_p;
00026 FaceArray* facearray_p;
00027
00028 public:
00029 TetraArray(NodeArray* nodearray_p_in,
00030 EdgeArray* edgearray_p_in,
00031 FaceArray* facearray_p_in);
00032
00033 ~TetraArray();
00034
00035 static const char* rcsid;
00036 static int debug;
00037
00038
00039 void reset(void);
00040
00041 int getNumTetras();
00042
00043 Tetra* getTetra(int i);
00044 int getIndex(Tetra* t);
00045
00046 Object* getObject();
00047
00048 friend ostream& operator<<(ostream& os, const TetraArray& ta);
00049
00050
00051 void allocateTetras(int i);
00052
00053 int getAmiraTetraData(FILE *meshfile, int numtetras_given);
00054 void SaveAmiraTetraData(ostream& os);
00055
00056 int addTetra();
00057
00058 int addTetra(int i0, int i1, int i2, int i3);
00059 int addTetra(Node* n0, Node* n1, Node* n2, Node* n3);
00060
00061
00062 void DrawTetras(int do_texture);
00063
00064 void drawlabels(float offset);
00065
00066 void drawnormals();
00067
00068 void computeIsobarys();
00069 void computeNormals(void);
00070 double getVolume();
00071
00072 void DeleteTetra(int index);
00073 void DeleteTetra(Tetra *t);
00074 void DeleteAllTetras();
00075
00076 void EraseTetra(Tetra *t);
00077 NodeArray* getNodeArray();
00078
00079 void SanityCheck(NodeArray* real_na_p, EdgeArray* real_ea_p, FaceArray* real_fa_p);
00080
00081 void Cleanup();
00082
00083 };
00084 inline NodeArray* TetraArray::getNodeArray()
00085 { return (nodearray_p); }
00086
00087 inline int TetraArray::getNumTetras()
00088 { return (numtetras); }
00089
00090 inline Tetra* TetraArray::getTetra(int i)
00091 { return (tetras[i]); }
00092
00093 inline Object* TetraArray::getObject()
00094 { return (nodearray_p->getObject()); }
00095
00096 #endif