00001 /* 00002 00003 Copyright (C) University of Oxford, 2005-2009 00004 00005 University of Oxford means the Chancellor, Masters and Scholars of the 00006 University of Oxford, having an administrative office at Wellington 00007 Square, Oxford OX1 2JD, UK. 00008 00009 This file is part of Chaste. 00010 00011 Chaste is free software: you can redistribute it and/or modify it 00012 under the terms of the GNU Lesser General Public License as published 00013 by the Free Software Foundation, either version 2.1 of the License, or 00014 (at your option) any later version. 00015 00016 Chaste is distributed in the hope that it will be useful, but WITHOUT 00017 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00018 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 00019 License for more details. The offer of Chaste under the terms of the 00020 License is subject to the License being interpreted in accordance with 00021 English Law and subject to any action against the University of Oxford 00022 being under the jurisdiction of the English Courts. 00023 00024 You should have received a copy of the GNU Lesser General Public License 00025 along with Chaste. If not, see <http://www.gnu.org/licenses/>. 00026 00027 */ 00028 00029 00030 #ifndef _TRIANGLESMESHREADER_HPP_ 00031 #define _TRIANGLESMESHREADER_HPP_ 00032 00033 #include <vector> 00034 #include <string> 00035 #include <fstream> 00036 #include "AbstractMeshReader.hpp" 00037 00044 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM> 00045 class TrianglesMeshReader : public AbstractMeshReader<ELEMENT_DIM,SPACE_DIM> 00046 { 00047 private: 00048 00049 bool mIndexFromZero; 00051 std::string mFilesBaseName; 00053 std::ifstream mNodesFile; 00054 std::ifstream mElementsFile; 00055 std::ifstream mFacesFile; 00057 unsigned mNumNodes; 00058 unsigned mNumElements; 00059 unsigned mNumFaces; 00061 unsigned mNodesRead; 00062 unsigned mElementsRead; 00063 unsigned mFacesRead; 00064 unsigned mBoundaryFacesRead; 00066 unsigned mNumNodeAttributes; 00067 unsigned mMaxNodeBdyMarker; 00068 unsigned mNumElementNodes; 00069 unsigned mNumElementAttributes; 00070 unsigned mNumFaceAttributes; 00072 unsigned mOrderOfElements; 00073 unsigned mOrderOfBoundaryElements; 00074 unsigned mNodesPerElement; 00075 unsigned mNodesPerBoundaryElement; 00077 public: 00078 00089 TrianglesMeshReader(std::string pathBaseName, unsigned orderOfElements=1, unsigned orderOfBoundaryElements=1); 00090 00092 unsigned GetNumElements() const; 00093 00095 unsigned GetNumNodes() const; 00096 00098 unsigned GetNumFaces() const; 00099 00101 unsigned GetNumEdges() const; 00102 00104 unsigned GetNumElementAttributes() const; 00105 00107 unsigned GetNumFaceAttributes() const; 00108 00110 void Reset(); 00111 00113 std::vector<double> GetNextNode(); 00114 00116 ElementData GetNextElementData(); 00117 00119 ElementData GetNextFaceData(); 00120 00122 ElementData GetNextEdgeData(); 00123 00124 private: 00125 00127 void OpenFiles(); 00128 00130 void OpenNodeFile(); 00131 00133 void OpenElementsFile(); 00134 00136 void OpenFacesFile(); 00137 00139 void ReadHeaders(); 00140 00142 void CloseFiles(); 00143 00150 void GetNextLineFromStream(std::ifstream& fileStream, std::string& rRawLine); 00151 00153 std::string GetMeshFileBaseName(); 00154 00155 }; 00156 00157 #endif //_TRIANGLESMESHREADER_HPP_