00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBGEOMETRYIJ_H
00024 #define _MBGEOMETRYIJ_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/MiGeometryIj.h>
00034
00035 #include <geometry/MbGeometry.h>
00036 #include <MbIjToI.h>
00037
00038 #include <Inventor/STL/vector>
00039
00049 template <typename _Vec3T=MbVec3d>
00050 class MbGeometryIj : public MiGeometryIj, public MbGeometry, private MbIjToI
00051 {
00052 public:
00054 MbGeometryIj(size_t numNodesI, size_t numNodesJ)
00055 : MbIjToI(numNodesI),m_numJ(numNodesJ),
00056 m_max(0), m_min(_Vec3T::numeric_limit_max())
00057 {
00058 m_coords.resize(m_numI*m_numJ);
00059 }
00060
00064 virtual MbVec3d getCoord(size_t i, size_t j) const
00065 {
00066 #ifndef MBMESH_DONT_USE_ASSERT
00067 if (m_numI <= i || m_numJ <= j)
00068 throw MbError("accessing coordinate out of range");
00069 #endif
00070 return (MbVec3d) m_coords[getI(i,j)];
00071 }
00072
00076 virtual void setCoord(size_t i, size_t j, const _Vec3T& val )
00077 {
00078 if (i<m_numI && j<m_numJ)
00079 {
00080 m_coords[getI(i,j)] = val;
00081 for(size_t d=0; d<3; ++d)
00082 {
00083 if(val[d] > m_max[d]) m_max[d] = val[d];
00084 if(val[d] < m_min[d]) m_min[d] = val[d];
00085 }
00086 m_timeStamp = MxTimeStamp::getTimeStamp();
00087 }
00088 }
00089
00093 void getSize(size_t &numNodesI, size_t &numNodesJ) const
00094 {
00095 numNodesI = m_numI;
00096 numNodesJ = m_numJ;
00097 }
00098
00100
00103 MbVec3d getMin() const { return (MbVec3d) m_min;}
00104 MbVec3d getMax() const { return (MbVec3d) m_max;}
00106
00107 private:
00108
00109 std::vector<_Vec3T> m_coords;
00110 size_t m_numJ;
00111 _Vec3T m_max;
00112 _Vec3T m_min;
00113
00114 };
00115
00116 #ifdef _WIN32
00117 #pragma warning(pop)
00118 #endif
00119
00120 #endif
00121
00122
00123