00001 #ifndef _POLYHEDRALMESHREADER_H
00002 #define _POLYHEDRALMESHREADER_H
00003
00004 #define EPSILON 0.001
00005 #define READBINARY 1
00006 #define GENERATEMASK 1
00007 #include <mesh/volumes/MbVolumeMeshUnstructured.h>
00008 #include <data/MbScalarSetI.h>
00009 #include <data/MbVec3SetI.h>
00010 #include <Inventor/STL/vector>
00011
00012 class PolyhedralMeshReader {
00013
00014 public:
00015
00016 PolyhedralMeshReader();
00017 ~PolyhedralMeshReader();
00018 MbVolumeMeshUnstructured<MbVec3d,double,MbVec3d>& readMesh(const std::string& filename);
00019
00020 private:
00021 void clear();
00022
00023 int ReadHeader();
00024 int ReadZone();
00025
00026 int ReadData();
00027 int ReadNumNodeFace();
00028 int ReadFaceNodes();
00029 int ReadElementFaces();
00030
00031 template <typename _T>
00032 int read(size_t nelements,_T* databuffer, int& res_err,size_t& nelements_read);
00033
00034 char* getLine();
00035 size_t CompareKeyword(char* keyword);
00036
00037
00038 MbVolumeMeshUnstructured<MbVec3d,double,MbVec3d>* m_mesh;
00039 std::vector< MbScalarSetI<double>* > m_scalarSets;
00040 MbVec3SetI<MbVec3d>* m_vec3Set;
00041
00042 size_t m_numVariables;
00043 size_t m_numElements;
00044 size_t m_numNodes;
00045 size_t m_numFaces;
00046 size_t m_totalNumFaceNodes;
00047
00048 size_t* m_numNodePerFaceList;
00049 size_t* m_faceNodeList;
00050 std::vector<size_t> * m_elementFaces;
00051
00052 std::vector<MbVec3d> m_coord;
00053 std::vector<double> m_scalars;
00054
00055 int m_Spec_res;
00056 int m_data_res;
00057 int m_NumFaces_res;
00058 int m_ElementFaces_res;
00059 int m_Actnum_res;
00060
00061 int m_LineNumber;
00062 char m_Line[1024];
00063 FILE* fp;
00064 };
00065
00066 #endif
00067
00068
00069