00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MbGeometryIjk_H
00024 #define _MbGeometryIjk_H
00025
00026 #ifdef _WIN32
00027 #pragma warning(push)
00028 #pragma warning(disable:4250)
00029 #pragma warning(disable:4251)
00030 #endif
00031
00032 #include <MeshVizXLM/mesh/geometry/MiGeometry.h>
00033 #include <MeshVizXLM/mesh/geometry/MiGeometryIjk.h>
00034
00035 #include <geometry/MbGeometry.h>
00036 #include <MbIjkToI.h>
00037
00038 #include <Inventor/STL/vector>
00039
00049 template <typename _Vec3T=MbVec3d, MiMeshIjk::StorageLayout _Layout = MiMeshIjk::LAYOUT_KJI>
00050 class MbGeometryIjk : public MiGeometryIjk, public MbGeometry, private MbIjkToI<_Layout>
00051 {
00052 public:
00054 MbGeometryIjk() : MbIjkToI<>(0,0),
00055 m_max(-_Vec3T::numeric_limit_max()), m_min(_Vec3T::numeric_limit_max())
00056 {
00057 }
00058 MbGeometryIjk(size_t numNodesI, size_t numNodesJ, size_t numNodesK)
00059 : MbIjkToI<_Layout>(numNodesI,numNodesJ,numNodesK),
00060 m_min(_Vec3T::numeric_limit_max()), m_max(-_Vec3T::numeric_limit_max())
00061 {
00062 m_coords.resize(numNodesI*numNodesJ*numNodesK);
00063 }
00064
00068 virtual MbVec3d getCoord(size_t i, size_t j, size_t k) const
00069 {
00070 return (MbVec3d) m_coords[this->getI(i,j,k)];
00071 }
00072
00076 virtual void setCoord(size_t i, size_t j, size_t k, const _Vec3T& val )
00077 {
00078 m_coords[this->getI(i,j,k)] = val;
00079 for(size_t d=0; d<3; ++d)
00080 {
00081 if(val[d] > m_max[d]) m_max[d] = val[d];
00082 if(val[d] < m_min[d]) m_min[d] = val[d];
00083 }
00084 m_timeStamp = MxTimeStamp::getTimeStamp();
00085 }
00086
00090 void setSize(size_t numNodesI, size_t numNodesJ, size_t numNodesK)
00091 {
00092 m_coords.resize(numNodesI*numNodesJ*numNodesK);
00093 m_timeStamp = MxTimeStamp::getTimeStamp();
00094 }
00095
00096 virtual MiMeshIjk::StorageLayout getStorageLayout() const { return _Layout; }
00097
00099
00102 MbVec3d getMin() const { return (MbVec3d) m_min;}
00103 MbVec3d getMax() const { return (MbVec3d) m_max;}
00105
00106 private:
00107
00108 std::vector<_Vec3T> m_coords;
00109 _Vec3T m_min;
00110 _Vec3T m_max;
00111
00112 };
00113
00114 #ifdef _WIN32
00115 #pragma warning(pop)
00116 #endif
00117
00118 #endif
00119
00120
00121