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
00067 unsigned mNumItemsPerLine;
00068
00070 std::vector<double> mTokens;
00071
00077 unsigned GetTokensAtNextLine();
00078
00084 void ReadNumLinesOfDataFromFile();
00085
00086 public:
00093 FibreReader(FileFinder& rFileFinder, FibreFileType fibreFileType);
00094
00098 ~FibreReader();
00099
00100
00118 void GetNextFibreSheetAndNormalMatrix(c_matrix<double,DIM,DIM>& rFibreMatrix, bool checkOrthogonality=true);
00119
00131 void GetNextFibreVector(c_vector<double,DIM>& rFibreVector, bool checkNormalised=true);
00132
00137 unsigned GetNumLinesOfData()
00138 {
00139 return mNumLinesOfData;
00140 }
00141
00149 void GetAllAxi(std::vector< c_vector<double, DIM> >& direction);
00150
00160 void GetAllOrtho(std::vector< c_vector<double, DIM> >& first_direction,
00161 std::vector< c_vector<double, DIM> >& second_direction,
00162 std::vector< c_vector<double, DIM> >& third_direction);
00163
00164 };
00165
00166 #endif