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 <data/MbStringSetIj.h>
00040 #include <MbDataSetComparator.h>
00041
00042 #include <Inventor/STL/set>
00043 #include <Inventor/STL/algorithm>
00044 #include <Inventor/STL/functional>
00045 #include <Inventor/STL/iostream>
00046
00055 template <typename _ScalarT, typename _Vec3T>
00056 class MbMeshIj: virtual public MiMeshIj
00057 {
00058 public:
00059
00060 virtual const MiTopologyIj& getTopology() const;
00061
00065 void setDeadCell(size_t i, size_t j, bool isDead=true)
00066 {
00067 m_topology.setDeadFlag(i,j,isDead);
00068 }
00069
00076 bool addScalarSet(const MbScalarSetIj<_ScalarT>* scalarSet);
00077
00084 bool addVec3Set(const MbVec3SetIj<_Vec3T>* vectorSet);
00085
00092 bool addStringSet(const MbStringSetIj* stringSet);
00093
00099 virtual const MbVec3SetIj<_Vec3T>* getVec3Set(size_t id) const;
00100
00105 virtual const MbVec3SetIj<_Vec3T>* getVec3Set(std::string name) const;
00106
00112 virtual const MbScalarSetIj<_ScalarT>* getScalarSet(size_t id) const;
00113
00118 virtual const MbScalarSetIj<_ScalarT>* getScalarSet(std::string name) const;
00119
00125 virtual const MbStringSetIj* getStringSet(size_t id) const;
00126
00131 virtual const MbStringSetIj* getStringSet(std::string name) const;
00132
00134
00135 virtual size_t getNumVec3Sets() const;
00136 virtual size_t getNumScalarSets() const;
00137 virtual size_t getNumStringSets() const;
00138 virtual size_t getNumMaterialSets() const;
00140
00141 private:
00142 virtual std::ostream& toStream(std::ostream& s) const;
00143
00144 typedef std::set< const MbVec3SetIj<_Vec3T>*, MbDataSetComparator<const MbVec3SetIj<_Vec3T>* > > SetOfVec3Set;
00145 typedef std::set< const MbScalarSetIj<_ScalarT>*, MbDataSetComparator<const MbScalarSetIj<_ScalarT>* > > SetOfScalarSet;
00146 typedef std::set< const MbStringSetIj*, MbDataSetComparator<const MbStringSetIj* > > SetOfStringSet;
00147
00148
00149 MbMeshIj(size_t numCellI, size_t numCellJ);
00150
00151 MbTopologyIj m_topology;
00152 SetOfScalarSet m_scalarSets;
00153 SetOfVec3Set m_vec3Sets;
00154 SetOfStringSet m_stringSets;
00155 };
00156
00157
00158 template <typename _ScalarT, typename _Vec3T>
00159 inline const MiTopologyIj&
00160 MbMeshIj<_ScalarT,_Vec3T>::getTopology() const
00161 {
00162 return m_topology;
00163 }
00164
00165
00166 template <typename _ScalarT, typename _Vec3T>
00167 bool
00168 MbMeshIj<_ScalarT,_Vec3T>::addScalarSet(const MbScalarSetIj<_ScalarT>* scalarSet)
00169 {
00170 std::pair<typename SetOfScalarSet::iterator,bool> ret = m_scalarSets.insert(scalarSet);
00171 return ret.second;
00172 }
00173
00174
00175 template <typename _ScalarT, typename _Vec3T>
00176 bool
00177 MbMeshIj<_ScalarT,_Vec3T>::addVec3Set(const MbVec3SetIj<_Vec3T>* vectorSet)
00178 {
00179 m_vec3Sets.insert(vectorSet);
00180 return true;
00181 }
00182
00183
00184 template <typename _ScalarT, typename _Vec3T>
00185 bool
00186 MbMeshIj<_ScalarT, _Vec3T>::addStringSet(const MbStringSetIj* stringSet)
00187 {
00188 m_stringSets.insert(stringSet);
00189 return true;
00190 }
00191
00192
00193 template <typename _ScalarT, typename _Vec3T>
00194 MbMeshIj<_ScalarT,_Vec3T>::MbMeshIj(size_t numCellI, size_t numCellJ):
00195 m_topology(numCellI,numCellJ)
00196 {
00197 }
00198
00199
00200 template <typename _ScalarT, typename _Vec3T>
00201 const MbVec3SetIj<_Vec3T>*
00202 MbMeshIj<_ScalarT,_Vec3T>::getVec3Set(size_t id) const
00203 {
00204 typename SetOfVec3Set::const_iterator it=m_vec3Sets.begin();
00205 for (size_t i=0; i<id && it!=m_vec3Sets.end(); ++i,++it);
00206 if ( it!=m_vec3Sets.end() )
00207 return *it;
00208 else
00209 return NULL;
00210 }
00211
00212
00213 template <typename _ScalarT, typename _Vec3T>
00214 const MbVec3SetIj<_Vec3T>*
00215 MbMeshIj<_ScalarT,_Vec3T>::getVec3Set(std::string name) const
00216 {
00217 MbVec3SetIj<_Vec3T> tmp;
00218 tmp.setName(name);
00219 typename SetOfVec3Set::const_iterator it;
00220 it = m_vec3Sets.find(&tmp);
00221 if ( it!=m_vec3Sets.end() )
00222 return *it;
00223 else
00224 return NULL;
00225 }
00226
00227
00228 template <typename _ScalarT, typename _Vec3T>
00229 const MbScalarSetIj<_ScalarT>*
00230 MbMeshIj<_ScalarT,_Vec3T>::getScalarSet(size_t id) const
00231 {
00232 typename SetOfScalarSet::const_iterator it=m_scalarSets.begin();
00233 for (size_t i=0; i<id && it!=m_scalarSets.end(); ++i,++it);
00234 if ( it!=m_scalarSets.end() )
00235 return *it;
00236 else
00237 return NULL;
00238 }
00239
00240
00241 template <typename _ScalarT, typename _Vec3T>
00242 const MbScalarSetIj<_ScalarT>*
00243 MbMeshIj<_ScalarT,_Vec3T>::getScalarSet(std::string name) const
00244 {
00245 MbScalarSetIj<_ScalarT> tmp;
00246 tmp.setName(name);
00247 typename SetOfScalarSet::const_iterator it;
00248 it = m_scalarSets.find(&tmp);
00249 if ( it!=m_scalarSets.end() )
00250 return *it;
00251 else
00252 return NULL;
00253 }
00254
00255
00256 template <typename _ScalarT, typename _Vec3T>
00257 const MbStringSetIj*
00258 MbMeshIj<_ScalarT, _Vec3T>::getStringSet(size_t id) const
00259 {
00260 typename SetOfStringSet::const_iterator it = m_stringSets.begin();
00261 for (size_t i = 0; i < id && it != m_stringSets.end(); ++i, ++it);
00262 if (it != m_stringSets.end())
00263 return *it;
00264 else
00265 return NULL;
00266 }
00267
00268
00269 template <typename _ScalarT, typename _Vec3T>
00270 const MbStringSetIj*
00271 MbMeshIj<_ScalarT, _Vec3T>::getStringSet(std::string name) const
00272 {
00273 MbStringSetIj tmp(0, 0);
00274 tmp.setName(name);
00275 typename SetOfStringSet::const_iterator it;
00276 it = m_stringSets.find(&tmp);
00277 if (it != m_stringSets.end())
00278 return *it;
00279 else
00280 return NULL;
00281 }
00282
00283
00284 template <typename _ScalarT, typename _Vec3T>
00285 size_t
00286 MbMeshIj<_ScalarT,_Vec3T>::getNumVec3Sets() const
00287 {
00288 return m_vec3Sets.size();
00289 }
00290
00291
00292 template <typename _ScalarT, typename _Vec3T>
00293 size_t
00294 MbMeshIj<_ScalarT,_Vec3T>::getNumScalarSets() const
00295 {
00296 return m_scalarSets.size();
00297 }
00298
00299
00300 template <typename _ScalarT, typename _Vec3T>
00301 size_t
00302 MbMeshIj<_ScalarT, _Vec3T>::getNumStringSets() const
00303 {
00304 return m_stringSets.size();
00305 }
00306
00307
00308 template <typename _ScalarT, typename _Vec3T>
00309 size_t
00310 MbMeshIj<_ScalarT,_Vec3T>::getNumMaterialSets() const
00311 {
00312 return 0;
00313 }
00314
00315
00316 template <typename _ScalarT, typename _Vec3T>
00317 inline std::ostream&
00318 MbMeshIj<_ScalarT,_Vec3T>::toStream(std::ostream& s) const
00319 {
00320 size_t i;
00321
00322 s << "# num scalar sets" << std::endl;
00323 s << getNumScalarSets() << std::endl;
00324 for ( i=0; i<getNumScalarSets(); ++i )
00325 {
00326 const MiScalardSetIj* dataSet = getScalarSet(i);
00327 s << "# scalar set : " << i << std::endl;
00328 s << *(dataSet);
00329 }
00330
00331 s << "# num vector sets" << std::endl;
00332 s << getNumVec3Sets() << std::endl;
00333 for ( i=0; i<getNumVec3Sets(); ++i )
00334 {
00335 const MiVec3dSetIj* dataSet = getVec3Set(i);
00336 s << "# vector set : " << i << std::endl;
00337 s << *(dataSet);
00338 }
00339
00340 return s;
00341 }
00342
00343 #ifdef _WIN32
00344 # pragma warning( pop )
00345 #endif
00346
00347 #endif
00348
00349
00350
00351
00352
00353
00354
00355