00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _MBVOLUMEMESHREGULAR_H
00025 #define _MBVOLUMEMESHREGULAR_H
00026
00027 #ifdef _WIN32
00028 # pragma warning( push )
00029 # pragma warning(disable:4250)
00030 # pragma warning(disable:4251)
00031 #endif
00032
00033 #include <MeshVizXLM/mesh/MiVolumeMeshRegular.h>
00034 #include <mesh/volumes/MbMeshStructuredIjk.h>
00035 #include <geometry/MbGeometryRegular.h>
00036
00047 template <typename _CoordT=double, typename _ScalarT=double, typename _Vec3T=MbVec3d, MiMeshIjk::StorageLayout _Layout = MiMeshIjk::LAYOUT_KJI>
00048 class MbVolumeMeshRegular : virtual public MiVolumeMeshRegular, public MbMeshStructuredIjk<_ScalarT,_Vec3T,_Layout>
00049 {
00050 public:
00051
00053 MbVolumeMeshRegular(size_t numCellI, size_t numCellJ, size_t numCellK,
00054 _CoordT xmin, _CoordT ymin, _CoordT zmin,
00055 _CoordT xmax, _CoordT ymax, _CoordT zmax)
00056 : MbMeshStructuredIjk<_ScalarT,_Vec3T,_Layout>(numCellI,numCellJ,numCellK),
00057 m_geometry(xmin,ymin,zmin, xmax,ymax,zmax)
00058 {
00059 }
00060
00064 virtual const MiGeometryRegular& getGeometry() const
00065 {
00066 return m_geometry;
00067 }
00068
00069 void touch()
00070 {
00071 this->m_topology.touch();
00072 this->m_geometry.touch();
00073 }
00074
00075 private:
00076 virtual std::ostream& toStream(std::ostream& s) const;
00077
00078 MbGeometryRegular<_CoordT> m_geometry;
00079
00080 };
00081
00082
00083 template <typename _CoordT, typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00084 inline std::ostream&
00085 MbVolumeMeshRegular<_CoordT,_ScalarT,_Vec3T,_Layout>::toStream(std::ostream& s) const
00086 {
00087 MiVolumeMeshRegular::toStream(s);
00088 MbMeshStructuredIjk<_ScalarT,_Vec3T,_Layout>::toStream(s);
00089 return s;
00090 }
00091
00092
00093 #ifdef _WIN32
00094 # pragma warning( pop )
00095 #endif
00096
00097 #endif
00098
00099
00100