00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _MBMESHIJ_H
00025 #define _MBMESHIJ_H
00026
00027 #ifdef _WIN32
00028 # pragma warning( push )
00029 # pragma warning(disable:4250)
00030 #endif
00031
00032 #include <MeshVizXLM/mesh/data/MiDataSetIj.h>
00033 #include <MeshVizXLM/mesh/MiMeshIj.h>
00034
00035 #include <MbMeshVizImpl.h>
00036 #include <topology/MbTopologyIj.h>
00037 #include <data/MbVec3SetIj.h>
00038 #include <data/MbScalarSetIj.h>
00039 #include <MbDataSetComparator.h>
00040
00041 #include <Inventor/STL/set>
00042 #include <Inventor/STL/algorithm>
00043 #include <Inventor/STL/functional>
00044 #include <Inventor/STL/iostream>
00045
00054 template <typename _ScalarT, typename _Vec3T>
00055 class MbMeshIj: virtual public MiMeshIj
00056 {
00057 public:
00058
00059 virtual const MiTopologyIj& getTopology() const;
00060
00064 void setDeadCell(size_t i, size_t j, bool isDead=true)
00065 {
00066 m_topology.setDeadFlag(i,j,isDead);
00067 }
00068
00075 bool addScalarSet(const MbScalarSetIj<_ScalarT>* scalarSet);
00076
00083 bool addVec3Set(const MbVec3SetIj<_Vec3T>* vectorSet);
00084
00090 virtual const MbVec3SetIj<_Vec3T>* getVec3Set(size_t id) const;
00091
00096 virtual const MbVec3SetIj<_Vec3T>* getVec3Set(std::string name) const;
00097
00103 virtual const MbScalarSetIj<_ScalarT>* getScalarSet(size_t id) const;
00104
00109 virtual const MbScalarSetIj<_ScalarT>* getScalarSet(std::string name) const;
00110
00112
00113 virtual size_t getNumVec3Sets() const;
00114 virtual size_t getNumScalarSets() const;
00115 virtual size_t getNumMaterialSets() const;
00117
00118 private:
00119 virtual std::ostream& toStream(std::ostream& s) const;
00120
00121 typedef std::set< const MbVec3SetIj<_Vec3T>*, MbDataSetComparator<const MbVec3SetIj<_Vec3T>* > > SetOfVec3Set;
00122 typedef std::set< const MbScalarSetIj<_ScalarT>*, MbDataSetComparator<const MbScalarSetIj<_ScalarT>* > > SetOfScalarSet;
00123
00124
00125 MbMeshIj(size_t numCellI, size_t numCellJ);
00126
00127 MbTopologyIj m_topology;
00128 SetOfScalarSet m_scalarSets;
00129 SetOfVec3Set m_vec3Sets;
00130 };
00131
00132
00133 template <typename _ScalarT, typename _Vec3T>
00134 inline const MiTopologyIj&
00135 MbMeshIj<_ScalarT,_Vec3T>::getTopology() const
00136 {
00137 return m_topology;
00138 }
00139
00140
00141 template <typename _ScalarT, typename _Vec3T>
00142 bool
00143 MbMeshIj<_ScalarT,_Vec3T>::addScalarSet(const MbScalarSetIj<_ScalarT>* scalarSet)
00144 {
00145 std::pair<typename SetOfScalarSet::iterator,bool> ret = m_scalarSets.insert(scalarSet);
00146 return ret.second;
00147 }
00148
00149
00150 template <typename _ScalarT, typename _Vec3T>
00151 bool
00152 MbMeshIj<_ScalarT,_Vec3T>::addVec3Set(const MbVec3SetIj<_Vec3T>* vectorSet)
00153 {
00154 std::pair<typename SetOfVec3Set::iterator,bool> ret = m_vec3Sets.insert(vectorSet);
00155 return true;
00156 }
00157
00158
00159 template <typename _ScalarT, typename _Vec3T>
00160 MbMeshIj<_ScalarT,_Vec3T>::MbMeshIj(size_t numCellI, size_t numCellJ):
00161 m_topology(numCellI,numCellJ)
00162 {
00163 }
00164
00165
00166 template <typename _ScalarT, typename _Vec3T>
00167 const MbVec3SetIj<_Vec3T>*
00168 MbMeshIj<_ScalarT,_Vec3T>::getVec3Set(size_t id) const
00169 {
00170 typename SetOfVec3Set::const_iterator it=m_vec3Sets.begin();
00171 for (size_t i=0; i<id && it!=m_vec3Sets.end(); ++i,++it);
00172 if ( it!=m_vec3Sets.end() )
00173 return *it;
00174 else
00175 return NULL;
00176 }
00177
00178
00179 template <typename _ScalarT, typename _Vec3T>
00180 const MbVec3SetIj<_Vec3T>*
00181 MbMeshIj<_ScalarT,_Vec3T>::getVec3Set(std::string name) const
00182 {
00183 MbVec3SetIj<_Vec3T> tmp;
00184 tmp.setName(name);
00185 typename SetOfVec3Set::const_iterator it;
00186 it = m_vec3Sets.find(&tmp);
00187 if ( it!=m_vec3Sets.end() )
00188 return *it;
00189 else
00190 return NULL;
00191 }
00192
00193
00194 template <typename _ScalarT, typename _Vec3T>
00195 const MbScalarSetIj<_ScalarT>*
00196 MbMeshIj<_ScalarT,_Vec3T>::getScalarSet(size_t id) const
00197 {
00198 typename SetOfScalarSet::const_iterator it=m_scalarSets.begin();
00199 for (size_t i=0; i<id && it!=m_scalarSets.end(); ++i,++it);
00200 if ( it!=m_scalarSets.end() )
00201 return *it;
00202 else
00203 return NULL;
00204 }
00205
00206
00207 template <typename _ScalarT, typename _Vec3T>
00208 const MbScalarSetIj<_ScalarT>*
00209 MbMeshIj<_ScalarT,_Vec3T>::getScalarSet(std::string name) const
00210 {
00211 MbScalarSetIj<_ScalarT> tmp;
00212 tmp.setName(name);
00213 typename SetOfScalarSet::const_iterator it;
00214 it = m_scalarSets.find(&tmp);
00215 if ( it!=m_scalarSets.end() )
00216 return *it;
00217 else
00218 return NULL;
00219 }
00220
00221
00222 template <typename _ScalarT, typename _Vec3T>
00223 size_t
00224 MbMeshIj<_ScalarT,_Vec3T>::getNumVec3Sets() const
00225 {
00226 return m_vec3Sets.size();
00227 }
00228
00229
00230 template <typename _ScalarT, typename _Vec3T>
00231 size_t
00232 MbMeshIj<_ScalarT,_Vec3T>::getNumScalarSets() const
00233 {
00234 return m_scalarSets.size();
00235 }
00236
00237
00238 template <typename _ScalarT, typename _Vec3T>
00239 size_t
00240 MbMeshIj<_ScalarT,_Vec3T>::getNumMaterialSets() const
00241 {
00242 return 0;
00243 }
00244
00245
00246 template <typename _ScalarT, typename _Vec3T>
00247 inline std::ostream&
00248 MbMeshIj<_ScalarT,_Vec3T>::toStream(std::ostream& s) const
00249 {
00250 size_t i;
00251
00252 s << "# num scalar sets" << std::endl;
00253 s << getNumScalarSets() << std::endl;
00254 for ( i=0; i<getNumScalarSets(); ++i )
00255 {
00256 const MiScalardSetIj* dataSet = getScalarSet(i);
00257 s << "# scalar set : " << i << std::endl;
00258 s << *(dataSet);
00259 }
00260
00261 s << "# num vector sets" << std::endl;
00262 s << getNumVec3Sets() << std::endl;
00263 for ( i=0; i<getNumVec3Sets(); ++i )
00264 {
00265 const MiVec3dSetIj* dataSet = getVec3Set(i);
00266 s << "# vector set : " << i << std::endl;
00267 s << *(dataSet);
00268 }
00269
00270 return s;
00271 }
00272
00273 #ifdef _WIN32
00274 # pragma warning( pop )
00275 #endif
00276
00277 #endif
00278
00279
00280
00281
00282
00283
00284
00285