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 #ifndef FIBREREADER_HPP_
00030 #define FIBREREADER_HPP_
00031
00032 #include <string>
00033 #include <fstream>
00034 #include <vector>
00035
00036 #include "UblasIncludes.hpp"
00037 #include "FileFinder.hpp"
00038
00042 typedef enum FibreFileType_
00043 {
00044 AXISYM=0,
00045 ORTHO
00046 } FibreFileType;
00047
00053 template<unsigned DIM>
00054 class FibreReader
00055 {
00056 private:
00058 std::ifstream mDataFile;
00059
00061 std::string mFilePath;
00062
00064 unsigned mNumLinesOfData;
00065
00066 bool mFileIsBinary;
00069 unsigned mNumItemsPerLine;
00070
00072 std::vector<double> mTokens;
00073
00079 unsigned GetTokensAtNextLine();
00080
00086 void ReadNumLinesOfDataFromFile();
00087
00088 public:
00095 FibreReader(FileFinder& rFileFinder, FibreFileType fibreFileType);
00096
00100 ~FibreReader();
00101
00102
00120 void GetNextFibreSheetAndNormalMatrix(c_matrix<double,DIM,DIM>& rFibreMatrix, bool checkOrthogonality=true);
00121
00133 void GetNextFibreVector(c_vector<double,DIM>& rFibreVector, bool checkNormalised=true);
00134
00139 unsigned GetNumLinesOfData()
00140 {
00141 return mNumLinesOfData;
00142 }
00143
00151 void GetAllAxi(std::vector< c_vector<double, DIM> >& direction);
00152
00162 void GetAllOrtho(std::vector< c_vector<double, DIM> >& first_direction,
00163 std::vector< c_vector<double, DIM> >& second_direction,
00164 std::vector< c_vector<double, DIM> >& third_direction);
00165
00166 };
00167
00168 #endif