00001 #ifndef FLOWGEOMETRY_H 00002 #define FLOWGEOMETRY_H 00003 00004 #include <stdio.h> 00005 #include <iostream> 00006 #include "vec3.h" 00008 class FlowGeometry{ 00009 friend class FlowData; 00010 private: 00012 int dim[2]; 00014 vec3 boundaryMin; 00016 vec3 boundaryMax; 00018 vec3 boundarySize; 00019 00021 vec3* geometryData; 00022 00024 int getVtx(int x, int y); 00026 int getVtxX(int vtxID); 00028 int getVtxY(int vtxID); 00029 00031 int getXYvtx(vec3 pos); 00032 00034 vec3 getPos(int vtxID); 00036 float getPosX(int vtxID); 00038 float getPosY(int vtxID); 00039 00041 bool isFlipped; 00042 00043 //TODO for students: improve this 00045 int getNearestVtx(vec3 pos); 00046 00047 public: 00048 FlowGeometry(); 00050 ~FlowGeometry(); 00051 00053 00060 bool getInterpolationAt(vec3 pos, int* vtxID, float* coef); 00061 00063 bool readFromFile(char* header, FILE* fp, bool bigEndian); 00064 00065 //remember that our grids are curvilinear and only 2D 00067 inline int getDimX() {return (isFlipped) ? dim[1] : dim[0];} 00069 inline int getDimY() {return (isFlipped) ? dim[0] : dim[1];} 00071 inline int getDimZ() {return dim[2];} 00072 00074 float getMinX(); 00076 float getMaxX(); 00078 float getMinY(); 00080 float getMaxY(); 00081 00083 int getRightNeigh(int vtxID); 00085 int getTopNeigh(int vtxID); 00087 int getLeftNeigh(int vtxID); 00089 int getBottomNeigh(int vtxID); 00090 00092 vec3 normalizeCoords(vec3 pos); 00094 vec3 unNormalizeCoords(vec3 pos); 00095 }; 00096 00097 #endif