MeshReader Class Reference

#include <MeshReader.hpp>

Inheritance diagram for MeshReader:

Inheritance graph
[legend]
Collaboration diagram for MeshReader:

Collaboration graph
[legend]

List of all members.

Public Member Functions

ReferenceCounting< Meshmesh ()
 MeshReader (const std::string &s)
virtual ~MeshReader ()
ReferenceCounting< Meshmesh () const

Protected Member Functions

 MeshReader (const MeshReader &M)
real_t __getReal ()
int __getInteger ()
virtual void __createMesh ()

Protected Attributes

FILE * __ifh
std::string __fileName
ReferenceCounting< VerticesSet__vertices
ReferenceCounting< Vector
< Hexahedron > > 
__hexahedra
ReferenceCounting< Vector
< Quadrangle > > 
__quadrilaterals
ReferenceCounting< Vector
< Tetrahedron > > 
__tetrahedra
ReferenceCounting< Vector
< Triangle > > 
__triangles
ReferenceCounting< Mesh__mesh

Classes

class  Error


Detailed Description

Definition at line 50 of file MeshReader.hpp.


Constructor & Destructor Documentation

MeshReader::MeshReader ( const MeshReader M  )  [protected]

Copy constructor is forbidden

Parameters:
M 

MeshReader::MeshReader ( const std::string &  s  ) 

Constructor

Parameters:
s the filename

Definition at line 29 of file MeshReader.cpp.

References __fileName, __ifh, and NULL.

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 }

MeshReader::~MeshReader (  )  [virtual]

Destructor

Definition at line 45 of file MeshReader.cpp.

References __ifh, and NULL.

00046 {
00047   if (__ifh != NULL) {
00048     fclose(__ifh);
00049   }
00050 }


Member Function Documentation

real_t MeshReader::__getReal (  )  [inline, protected]

Tries to read next real

Returns:
next real

Definition at line 99 of file MeshReader.hpp.

References __fileName, __ifh, and ErrorHandler::normal.

Referenced by MeshReaderAM_FMTFormat::__readVertices(), MeshFormatReader::__readVertices(), GmshFormatReader::__readVertices(), and GmshFormatReader::GmshFormatReader().

00100   {
00101     // a double is used here instead of a real_t to allow scanf to
00102     // behave correctly
00103     register double r;
00104     int retval = fscanf(__ifh,"%le",&r);
00105     if (retval <= 0) {
00106       throw ErrorHandler(__FILE__,__LINE__,
00107                          "reading mesh '"+__fileName+"': expected real not found",
00108                          ErrorHandler::normal);
00109       return 0;
00110     }
00111     return r;
00112   }

int MeshReader::__getInteger (  )  [inline, protected]

void MeshReader::__createMesh (  )  [protected, virtual]

This function is called when lists are filled to build __mesh

Definition at line 53 of file MeshReader.cpp.

References __hexahedra, MeshGenerator::__mesh, __quadrilaterals, __tetrahedra, __triangles, __vertices, and ffout().

Referenced by GmshFormatReader::GmshFormatReader(), MeshFormatReader::MeshFormatReader(), and MeshReaderAM_FMTFormat::MeshReaderAM_FMTFormat().

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     // If we get there: the mesh is a planar mesh
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 }

Here is the call graph for this function:

ReferenceCounting<Mesh> MeshReader::mesh (  )  [inline]

Access to the read mesh

Returns:
__mesh

Definition at line 155 of file MeshReader.hpp.

References MeshGenerator::__mesh.

00156   {
00157     return __mesh;
00158   }

ReferenceCounting<Mesh> MeshGenerator::mesh (  )  const [inline, inherited]

Access to the generated mesh

Returns:
__mesh

Definition at line 43 of file MeshGenerator.hpp.

References MeshGenerator::__mesh.

Referenced by SurfaceMeshGenerator::generateSurfacicMesh().

00044   {
00045     return __mesh;
00046   }


Member Data Documentation

FILE* MeshReader::__ifh [protected]

std::string MeshReader::__fileName [protected]

ReferenceCounting<Mesh> MeshGenerator::__mesh [protected, inherited]


The documentation for this class was generated from the following files:

Generated on Wed Nov 19 00:10:09 2008 for FreeFEM3D (aka ff3d) by  doxygen 1.5.6