00001
00002
00003
00004
00005
00006
00007 #ifndef _MbGeometryHexahedronIjk_H
00008 #define _MbGeometryHexahedronIjk_H
00009
00010 #ifdef _WIN32
00011 #pragma warning(push)
00012 #pragma warning(disable:4250)
00013 #pragma warning(disable:4251)
00014 #pragma warning(disable:4512)
00015 #endif
00016
00017 #include <MeshVizXLM/mesh/geometry/MiGeometryHexahedronIjk.h>
00018 #include <mesh/volumes/MbHexahedronMeshIjk.h>
00019 #include <geometry/MbGeometry.h>
00020
00021
00053 template <MiMeshIjk::StorageLayout LAYOUT>
00054 class MbGeometryHexahedronIjk : virtual public MiGeometryHexahedronIjk, public MbGeometry
00055 {
00056 public:
00060 MbGeometryHexahedronIjk(const MbHexahedronMeshIjk<MbVec3d,double,MbVec3d,LAYOUT>& indexedMesh)
00061 : m_topology((const MbHexahedronTopologyExplicitIjk<LAYOUT>&)indexedMesh.getTopology()), m_geometry(indexedMesh.getGeometry()) {}
00062
00067 void getCellCoords(size_t i, size_t j, size_t k, MbVec3d& v0, MbVec3d& v1, MbVec3d& v2, MbVec3d& v3,
00068 MbVec3d& v4, MbVec3d& v5, MbVec3d& v6, MbVec3d& v7) const;
00069
00070 virtual MiMeshIjk::StorageLayout getStorageLayout() const { return m_topology.getStorageLayout(); }
00071
00072 size_t getTimeStamp() const { return m_timeStamp + m_topology.getTimeStamp() + m_geometry.getTimeStamp();}
00073
00074 private:
00075 const MbHexahedronTopologyExplicitIjk<LAYOUT>& m_topology;
00076 const MbMeshGeometry<MbVec3d>& m_geometry;
00077 };
00078
00079
00080 template <MiMeshIjk::StorageLayout LAYOUT>
00081 inline
00082 void MbGeometryHexahedronIjk<LAYOUT>::getCellCoords(size_t i, size_t j, size_t k, MbVec3d& v0, MbVec3d& v1, MbVec3d& v2, MbVec3d& v3,
00083 MbVec3d& v4, MbVec3d& v5, MbVec3d& v6, MbVec3d& v7) const
00084 {
00085 const size_t* id = m_topology.getCellNodeIndicesBuffer(i,j,k);
00086 v0 = m_geometry[id[0]];
00087 v1 = m_geometry[id[1]];
00088 v2 = m_geometry[id[2]];
00089 v3 = m_geometry[id[3]];
00090 v4 = m_geometry[id[4]];
00091 v5 = m_geometry[id[5]];
00092 v6 = m_geometry[id[6]];
00093 v7 = m_geometry[id[7]];
00094 }
00095
00096 #ifdef _WIN32
00097 #pragma warning(pop)
00098 #endif
00099
00100 #endif
00101
00102
00103