00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <MeshReader.hpp>
00021
00022 #include <SurfaceMeshOfTriangles.hpp>
00023 #include <SurfaceMeshOfQuadrangles.hpp>
00024
00025 #include <MeshOfHexahedra.hpp>
00026 #include <MeshOfTetrahedra.hpp>
00027 #include <MeshOfTriangles.hpp>
00028
00029 MeshReader::MeshReader(const std::string & s)
00030 : MeshGenerator(),
00031 __ifh(NULL),
00032 __fileName(s),
00033 __vertices(0),
00034 __hexahedra(0),
00035 __quadrilaterals(0),
00036 __tetrahedra(0),
00037 __triangles(0)
00038 {
00039 __ifh = fopen(__fileName.c_str(),"r");
00040 if (__ifh == NULL) {
00041 throw MeshReader::Error("cannot open file '"+__fileName+"'");
00042 }
00043 }
00044
00045 MeshReader::~MeshReader()
00046 {
00047 if (__ifh != NULL) {
00048 fclose(__ifh);
00049 }
00050 }
00051
00052 void
00053 MeshReader::__createMesh()
00054 {
00055 ReferenceCounting<VerticesCorrespondance> correspondance
00056 = new VerticesCorrespondance((*__vertices).numberOfVertices());
00057
00058 if (__hexahedra != 0) {
00059 SurfaceMeshOfQuadrangles* quadrilaterals = 0;
00060 if (__quadrilaterals != 0) {
00061 quadrilaterals = new SurfaceMeshOfQuadrangles(__vertices,
00062 correspondance,
00063 __quadrilaterals);
00064 }
00065 MeshOfHexahedra* m
00066 = new MeshOfHexahedra(__vertices,
00067 correspondance,
00068 __hexahedra,
00069 quadrilaterals);
00070 __mesh = m;
00071 ffout(3) << "- Number of Hexahedra: " << (*__hexahedra).size() << '\n';
00072 return;
00073 }
00074
00075
00076 if (__tetrahedra != 0) {
00077 SurfaceMeshOfTriangles* triangles = 0;
00078 if (__triangles != 0) {
00079 triangles = new SurfaceMeshOfTriangles(__vertices,
00080 correspondance,
00081 __triangles);
00082 }
00083 MeshOfTetrahedra* m
00084 = new MeshOfTetrahedra(__vertices,
00085 correspondance,
00086 __tetrahedra,
00087 triangles);
00088 __mesh = m;
00089 ffout(3) << "- Number of Tetrahedra: " << (*__tetrahedra).size() << '\n';
00090 return;
00091 }
00092
00093 if (__triangles != 0) {
00094 for (size_t i=0; i<__vertices->numberOfVertices();++i) {
00095 const Vertex& v = (*__vertices)[i];
00096 if (v[2] != 0) {
00097 SurfaceMeshOfTriangles* m
00098 = new SurfaceMeshOfTriangles(__vertices,
00099 correspondance,
00100 __triangles);
00101 __mesh = m;
00102 ffout(3) << "- Number of Triangles: " << __triangles->size() << '\n';
00103 return;
00104 }
00105 }
00106
00107 MeshOfTriangles* m
00108 = new MeshOfTriangles(__vertices,
00109 correspondance,
00110 __triangles);
00111 __mesh = m;
00112 ffout(3) << "- Number of Triangles: " << __triangles->size() << '\n';
00113 return;
00114 }
00115
00116 if (__quadrilaterals != 0) {
00117 SurfaceMeshOfQuadrangles* m
00118 = new SurfaceMeshOfQuadrangles(__vertices,
00119 correspondance,
00120 __quadrilaterals);
00121 __mesh = m;
00122 ffout(3) << "- Number of Quadrilaterals: " << (*__quadrilaterals).size() << '\n';
00123 return;
00124 }
00125 }