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 _MbDataSetStorageI_H
00025 #define _MbDataSetStorageI_H
00026
00027 #ifdef _WIN32
00028 # pragma warning( push )
00029 # pragma warning(disable:4250)
00030 #endif
00031
00032 #include <MeshVizXLM/mesh/data/MiDataSetI.h>
00033
00034 #include <MbMeshVizImpl.h>
00035 #include <data/MbVec3SetI.h>
00036 #include <data/MbScalarSetI.h>
00037 #include <data/MbStringSetI.h>
00038 #include <MbDataSetComparator.h>
00039
00040 #include <Inventor/STL/set>
00041 #include <Inventor/STL/algorithm>
00042 #include <Inventor/STL/functional>
00043 #include <Inventor/STL/iostream>
00044
00053 template <typename _ScalarT, typename _Vec3T>
00054 class MbDataSetStorageI
00055 {
00056 public:
00057 MbDataSetStorageI();
00058
00065 bool addScalarSet(const MbScalarSetI<_ScalarT>* scalarSet);
00066
00073 bool addVec3Set(const MbVec3SetI<_Vec3T>* vectorSet);
00074
00081 bool addStringSet(const MbStringSetI* stringSet);
00082
00088 virtual const MbVec3SetI<_Vec3T>* getVec3Set(size_t id) const;
00089
00094 virtual const MbVec3SetI<_Vec3T>* getVec3Set(std::string name) const;
00095
00101 virtual const MbScalarSetI<_ScalarT>* getScalarSet(size_t id) const;
00102
00107 virtual const MbScalarSetI<_ScalarT>* getScalarSet(std::string name) const;
00108
00113 virtual const MbStringSetI* getStringSet(size_t id) const;
00114
00119 virtual const MbStringSetI* getStringSet(std::string name) const;
00120
00122
00125 virtual size_t getNumVec3Sets() const;
00126 virtual size_t getNumScalarSets() const;
00127 virtual size_t getNumStringSets() const;
00129
00130 private:
00131 virtual std::ostream& toStream(std::ostream& s) const;
00132
00133 typedef std::set< const MbVec3SetI<_Vec3T>*, MbDataSetComparator<const MbVec3SetI<_Vec3T>* > > SetOfVec3Set;
00134 typedef std::set< const MbScalarSetI<_ScalarT>*, MbDataSetComparator<const MbScalarSetI<_ScalarT>* > > SetOfScalarSet;
00135 typedef std::set< const MbStringSetI*, MbDataSetComparator<const MbStringSetI* > > SetOfStringSet;
00136
00137 SetOfScalarSet m_scalarSets;
00138 SetOfVec3Set m_vec3Sets;
00139 SetOfStringSet m_stringSets;
00140 };
00141
00142
00143 template <typename _ScalarT, typename _Vec3T>
00144 bool
00145 MbDataSetStorageI<_ScalarT, _Vec3T>::addScalarSet(const MbScalarSetI<_ScalarT>* scalarSet)
00146 {
00147 std::pair<typename SetOfScalarSet::iterator,bool> ret = m_scalarSets.insert(scalarSet);
00148 return ret.second;
00149 }
00150
00151
00152 template <typename _ScalarT, typename _Vec3T>
00153 bool
00154 MbDataSetStorageI<_ScalarT, _Vec3T>::addVec3Set(const MbVec3SetI<_Vec3T>* vectorSet)
00155 {
00156 std::pair<typename SetOfVec3Set::iterator,bool> ret = m_vec3Sets.insert(vectorSet);
00157 return ret.second;
00158 }
00159
00160
00161 template <typename _ScalarT, typename _Vec3T>
00162 bool
00163 MbDataSetStorageI<_ScalarT, _Vec3T>::addStringSet(const MbStringSetI* stringSet)
00164 {
00165 std::pair<typename SetOfStringSet::iterator, bool> ret = m_stringSets.insert(stringSet);
00166 return ret.second;
00167 }
00168
00169
00170 template <typename _ScalarT, typename _Vec3T>
00171 MbDataSetStorageI<_ScalarT, _Vec3T>::MbDataSetStorageI()
00172 {
00173 }
00174
00175
00176 template <typename _ScalarT, typename _Vec3T>
00177 const MbVec3SetI<_Vec3T>*
00178 MbDataSetStorageI<_ScalarT, _Vec3T>::getVec3Set(size_t id) const
00179 {
00180 typename SetOfVec3Set::const_iterator it = m_vec3Sets.begin();
00181 for (size_t i=0; i<id && it!=m_vec3Sets.end(); ++i,++it);
00182 if ( it!=m_vec3Sets.end() )
00183 return *it;
00184 else
00185 return NULL;
00186 }
00187
00188
00189 template <typename _ScalarT, typename _Vec3T>
00190 const MbVec3SetI<_Vec3T>*
00191 MbDataSetStorageI<_ScalarT, _Vec3T>::getVec3Set(std::string name) const
00192 {
00193 MbVec3SetI<_Vec3T> tmp;
00194 tmp.setName(name);
00195 typename SetOfVec3Set::const_iterator it;
00196 it = m_vec3Sets.find(&tmp);
00197 if ( it!=m_vec3Sets.end() )
00198 return *it;
00199 else
00200 return NULL;
00201 }
00202
00203
00204 template <typename _ScalarT, typename _Vec3T>
00205 const MbScalarSetI<_ScalarT>*
00206 MbDataSetStorageI<_ScalarT, _Vec3T>::getScalarSet(size_t id) const
00207 {
00208 typename SetOfScalarSet::const_iterator it = m_scalarSets.begin();
00209 for (size_t i=0; i<id && it!=m_scalarSets.end(); ++i,++it);
00210 if ( it!=m_scalarSets.end() )
00211 return *it;
00212 else
00213 return NULL;
00214 }
00215
00216
00217 template <typename _ScalarT, typename _Vec3T>
00218 const MbScalarSetI<_ScalarT>*
00219 MbDataSetStorageI<_ScalarT, _Vec3T>::getScalarSet(std::string name) const
00220 {
00221 MbScalarSetI<_ScalarT> tmp;
00222 tmp.setName(name);
00223 typename SetOfScalarSet::const_iterator it;
00224 it = m_scalarSets.find(&tmp);
00225 if ( it!=m_scalarSets.end() )
00226 return *it;
00227 else
00228 return NULL;
00229 }
00230
00231
00232 template <typename _ScalarT, typename _Vec3T>
00233 const MbStringSetI*
00234 MbDataSetStorageI<_ScalarT, _Vec3T>::getStringSet(size_t id) const
00235 {
00236 typename SetOfStringSet::const_iterator it = m_stringSets.begin();
00237 for (size_t i = 0; i < id && it != m_stringSets.end(); ++i, ++it);
00238 if (it != m_stringSets.end())
00239 return *it;
00240 else
00241 return NULL;
00242 }
00243
00244
00245 template <typename _ScalarT, typename _Vec3T>
00246 const MbStringSetI*
00247 MbDataSetStorageI<_ScalarT, _Vec3T>::getStringSet(std::string name) const
00248 {
00249 MbStringSetI tmp(0);
00250 tmp.setName(name);
00251 typename SetOfStringSet::const_iterator it;
00252 it = m_stringSets.find(&tmp);
00253 if (it != m_stringSets.end())
00254 return *it;
00255 else
00256 return NULL;
00257 }
00258
00259
00260 template <typename _ScalarT, typename _Vec3T>
00261 size_t
00262 MbDataSetStorageI<_ScalarT, _Vec3T>::getNumVec3Sets() const
00263 {
00264 return m_vec3Sets.size();
00265 }
00266
00267
00268 template <typename _ScalarT, typename _Vec3T>
00269 size_t
00270 MbDataSetStorageI<_ScalarT, _Vec3T>::getNumScalarSets() const
00271 {
00272 return m_scalarSets.size();
00273 }
00274
00275
00276 template <typename _ScalarT, typename _Vec3T>
00277 size_t
00278 MbDataSetStorageI<_ScalarT, _Vec3T>::getNumStringSets() const
00279 {
00280 return m_stringSets.size();
00281 }
00282
00283
00284 template <typename _ScalarT, typename _Vec3T>
00285 inline std::ostream&
00286 MbDataSetStorageI<_ScalarT, _Vec3T>::toStream(std::ostream& s) const
00287 {
00288 size_t i;
00289
00290 s << "# num scalar sets" << std::endl;
00291 s << getNumScalarSets() << std::endl;
00292 for ( i=0; i<getNumScalarSets(); ++i )
00293 {
00294 const MiScalardSetI* dataSet = getScalarSet(i);
00295 s << "# scalar set : " << i << std::endl;
00296 s << *(dataSet);
00297 }
00298
00299 s << "# num vector sets" << std::endl;
00300 s << getNumVec3Sets() << std::endl;
00301 for ( i=0; i<getNumVec3Sets(); ++i )
00302 {
00303 const MiVec3dSetI* dataSet = getVec3Set(i);
00304 s << "# vector set : " << i << std::endl;
00305 s << *(dataSet);
00306 }
00307
00308 return s;
00309 }
00310
00311 #ifdef _WIN32
00312 # pragma warning( pop )
00313 #endif
00314
00315 #endif
00316
00317
00318
00319
00320
00321
00322
00323