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 #include <MbError.h>
00038
00039 #include <Inventor/STL/vector>
00040
00050 template <typename _Vec3T=MbVec3d>
00051 class MbGeometryIj : public MiGeometryIj, public MbGeometry, private MbIjToI
00052 {
00053 public:
00055 MbGeometryIj(size_t numNodesI, size_t numNodesJ)
00056 : MbIjToI(numNodesI),m_numJ(numNodesJ),
00057 m_max(0), m_min(_Vec3T::numeric_limit_max())
00058 {
00059 m_coords.resize(m_numI*m_numJ);
00060 }
00061
00065 virtual MbVec3d getCoord(size_t i, size_t j) const
00066 {
00067 #ifndef MBMESH_DONT_USE_ASSERT
00068 if (m_numI <= i || m_numJ <= j)
00069 throw MbError("accessing coordinate out of range");
00070 #endif
00071 return (MbVec3d) m_coords[getI(i,j)];
00072 }
00073
00077 virtual void setCoord(size_t i, size_t j, const _Vec3T& val )
00078 {
00079 if (i<m_numI && j<m_numJ)
00080 {
00081 m_coords[getI(i,j)] = val;
00082 for(size_t d=0; d<3; ++d)
00083 {
00084 if(val[d] > m_max[d]) m_max[d] = val[d];
00085 if(val[d] < m_min[d]) m_min[d] = val[d];
00086 }
00087 m_timeStamp = MxTimeStamp::getTimeStamp();
00088 }
00089 }
00090
00094 void getSize(size_t &numNodesI, size_t &numNodesJ) const
00095 {
00096 numNodesI = m_numI;
00097 numNodesJ = m_numJ;
00098 }
00099
00101
00104 MbVec3d getMin() const { return (MbVec3d) m_min;}
00105 MbVec3d getMax() const { return (MbVec3d) m_max;}
00107
00108 private:
00109
00110 std::vector<_Vec3T> m_coords;
00111 size_t m_numJ;
00112 _Vec3T m_max;
00113 _Vec3T m_min;
00114
00115 };
00116
00117 #ifdef _WIN32
00118 #pragma warning(pop)
00119 #endif
00120
00121 #endif
00122
00123
00124