00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBTOPOLOGYIJ_H
00024 #define _MBTOPOLOGYIJ_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/topology/MiTopologyIj.h>
00033 #include <topology/MbTopology.h>
00034 #include <MbIjToI.h>
00035
00036 #include <Inventor/STL/cassert>
00037
00038
00048 class MbTopologyIj : public MiTopologyIj, public MbTopology, private MbIjToI
00049 {
00050 public:
00052 MbTopologyIj(size_t numCellI, size_t numCellJ)
00053 : MiTopologyIj()
00054 , MbTopology()
00055 , MbIjToI(numCellI)
00056 , m_numJ(numCellJ)
00057 , m_hasDeadCells(false)
00058 {
00059 #ifndef MBMESH_DONT_USE_STL
00060 m_deadCells.resize(numCellI*numCellJ);
00061 #else
00062 m_deadCells = new bool[numCellI*numCellJ];
00063 #endif
00064 }
00065
00069 virtual size_t getNumCellsI() const { return m_numI; }
00070
00074 virtual size_t getNumCellsJ() const { return m_numJ; }
00075
00076
00080 virtual bool hasDeadCells() const { return m_hasDeadCells;}
00081
00088 virtual bool isDead(size_t i, size_t j) const;
00089
00093 void setDeadFlag(size_t i, size_t j, bool isDead=true);
00094
00095 private:
00096 size_t m_numJ;
00097 bool m_hasDeadCells;
00098
00099 };
00100
00101
00102 inline bool
00103 MbTopologyIj::isDead(size_t i, size_t j) const
00104 {
00105 #ifndef MBMESH_DONT_USE_ASSERT
00106 assert(i<m_numI && j<m_numJ);
00107 #endif
00108 return m_deadCells[getI(i,j)];
00109 }
00110
00111
00112
00113 inline void
00114 MbTopologyIj::setDeadFlag(size_t i, size_t j, bool isDead)
00115 {
00116 if (i<m_numI && j<m_numJ)
00117 {
00118 m_deadCells[getI(i,j)] = isDead;
00119 m_hasDeadCells |= isDead;
00120 m_timeStamp = MxTimeStamp::getTimeStamp();
00121 }
00122 }
00123
00124 #ifdef _WIN32
00125 #pragma warning(pop)
00126 #endif
00127
00128 #endif
00129
00130
00131