FibreReader.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef FIBREREADER_HPP_
00037 #define FIBREREADER_HPP_
00038
00039 #include <string>
00040 #include <fstream>
00041 #include <vector>
00042
00043 #include "UblasIncludes.hpp"
00044 #include "FileFinder.hpp"
00045
00049 typedef enum FibreFileType_
00050 {
00051 AXISYM=0,
00052 ORTHO
00053 } FibreFileType;
00054
00060 template<unsigned DIM>
00061 class FibreReader
00062 {
00063 private:
00065 std::ifstream mDataFile;
00066
00068 std::string mFilePath;
00069
00071 unsigned mNumLinesOfData;
00072
00073 bool mFileIsBinary;
00076 unsigned mNumItemsPerLine;
00077
00079 unsigned mNextIndex;
00080
00082 std::vector<double> mTokens;
00083
00089 unsigned GetTokensAtNextLine();
00090
00096 void ReadNumLinesOfDataFromFile();
00097
00098 public:
00105 FibreReader(const FileFinder& rFileFinder, FibreFileType fibreFileType);
00106
00110 ~FibreReader();
00111
00112
00133 void GetFibreSheetAndNormalMatrix(unsigned fibreIndex, c_matrix<double,DIM,DIM>& rFibreMatrix, bool checkOrthogonality=true);
00134
00149 void GetFibreVector(unsigned fibreIndex, c_vector<double,DIM>& rFibreVector, bool checkNormalised=true);
00150
00155 unsigned GetNumLinesOfData()
00156 {
00157 return mNumLinesOfData;
00158 }
00159
00167 void GetAllAxi(std::vector< c_vector<double, DIM> >& direction);
00168
00178 void GetAllOrtho(std::vector< c_vector<double, DIM> >& first_direction,
00179 std::vector< c_vector<double, DIM> >& second_direction,
00180 std::vector< c_vector<double, DIM> >& third_direction);
00181
00185 bool IsBinary()
00186 {
00187 return mFileIsBinary;
00188 }
00189
00190 };
00191
00192 #endif