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 <MbDataSetComparator.h>
00038
00039 #include <Inventor/STL/set>
00040 #include <Inventor/STL/algorithm>
00041 #include <Inventor/STL/functional>
00042 #include <Inventor/STL/iostream>
00043
00052 template <typename _ScalarT, typename _Vec3T>
00053 class MbDataSetStorageI
00054 {
00055 public:
00056 MbDataSetStorageI();
00057
00064 bool addScalarSet(const MbScalarSetI<_ScalarT>* scalarSet);
00065
00072 bool addVec3Set(const MbVec3SetI<_Vec3T>* vectorSet);
00073
00079 virtual const MbVec3SetI<_Vec3T>* getVec3Set(size_t id) const;
00080
00085 virtual const MbVec3SetI<_Vec3T>* getVec3Set(std::string name) const;
00086
00092 virtual const MbScalarSetI<_ScalarT>* getScalarSet(size_t id) const;
00093
00098 virtual const MbScalarSetI<_ScalarT>* getScalarSet(std::string name) const;
00099
00101
00104 virtual size_t getNumVec3Sets() const;
00105 virtual size_t getNumScalarSets() const;
00107
00108 private:
00109 virtual std::ostream& toStream(std::ostream& s) const;
00110
00111 typedef std::set< const MbVec3SetI<_Vec3T>*, MbDataSetComparator<const MbVec3SetI<_Vec3T>* > > SetOfVec3Set;
00112 typedef std::set< const MbScalarSetI<_ScalarT>*, MbDataSetComparator<const MbScalarSetI<_ScalarT>* > > SetOfScalarSet;
00113
00114 SetOfScalarSet m_scalarSets;
00115 SetOfVec3Set m_vec3Sets;
00116 };
00117
00118
00119 template <typename _ScalarT, typename _Vec3T>
00120 bool
00121 MbDataSetStorageI<_ScalarT, _Vec3T>::addScalarSet(const MbScalarSetI<_ScalarT>* scalarSet)
00122 {
00123 std::pair<typename SetOfScalarSet::iterator,bool> ret = m_scalarSets.insert(scalarSet);
00124 return ret.second;
00125 }
00126
00127
00128 template <typename _ScalarT, typename _Vec3T>
00129 bool
00130 MbDataSetStorageI<_ScalarT, _Vec3T>::addVec3Set(const MbVec3SetI<_Vec3T>* vectorSet)
00131 {
00132 std::pair<typename SetOfVec3Set::iterator,bool> ret = m_vec3Sets.insert(vectorSet);
00133 return ret.second;
00134 }
00135
00136
00137 template <typename _ScalarT, typename _Vec3T>
00138 MbDataSetStorageI<_ScalarT, _Vec3T>::MbDataSetStorageI()
00139 {
00140 }
00141
00142
00143 template <typename _ScalarT, typename _Vec3T>
00144 const MbVec3SetI<_Vec3T>*
00145 MbDataSetStorageI<_ScalarT, _Vec3T>::getVec3Set(size_t id) const
00146 {
00147 typename SetOfVec3Set::const_iterator it = m_vec3Sets.begin();
00148 for (size_t i=0; i<id && it!=m_vec3Sets.end(); ++i,++it);
00149 if ( it!=m_vec3Sets.end() )
00150 return *it;
00151 else
00152 return NULL;
00153 }
00154
00155
00156 template <typename _ScalarT, typename _Vec3T>
00157 const MbVec3SetI<_Vec3T>*
00158 MbDataSetStorageI<_ScalarT, _Vec3T>::getVec3Set(std::string name) const
00159 {
00160 MbVec3SetI<_Vec3T> tmp;
00161 tmp.setName(name);
00162 typename SetOfVec3Set::const_iterator it;
00163 it = m_vec3Sets.find(&tmp);
00164 if ( it!=m_vec3Sets.end() )
00165 return *it;
00166 else
00167 return NULL;
00168 }
00169
00170
00171 template <typename _ScalarT, typename _Vec3T>
00172 const MbScalarSetI<_ScalarT>*
00173 MbDataSetStorageI<_ScalarT, _Vec3T>::getScalarSet(size_t id) const
00174 {
00175 typename SetOfScalarSet::const_iterator it = m_scalarSets.begin();
00176 for (size_t i=0; i<id && it!=m_scalarSets.end(); ++i,++it);
00177 if ( it!=m_scalarSets.end() )
00178 return *it;
00179 else
00180 return NULL;
00181 }
00182
00183
00184 template <typename _ScalarT, typename _Vec3T>
00185 const MbScalarSetI<_ScalarT>*
00186 MbDataSetStorageI<_ScalarT, _Vec3T>::getScalarSet(std::string name) const
00187 {
00188 MbScalarSetI<_ScalarT> tmp;
00189 tmp.setName(name);
00190 typename SetOfScalarSet::const_iterator it;
00191 it = m_scalarSets.find(&tmp);
00192 if ( it!=m_scalarSets.end() )
00193 return *it;
00194 else
00195 return NULL;
00196 }
00197
00198
00199 template <typename _ScalarT, typename _Vec3T>
00200 size_t
00201 MbDataSetStorageI<_ScalarT, _Vec3T>::getNumVec3Sets() const
00202 {
00203 return m_vec3Sets.size();
00204 }
00205
00206
00207 template <typename _ScalarT, typename _Vec3T>
00208 size_t
00209 MbDataSetStorageI<_ScalarT, _Vec3T>::getNumScalarSets() const
00210 {
00211 return m_scalarSets.size();
00212 }
00213
00214
00215 template <typename _ScalarT, typename _Vec3T>
00216 inline std::ostream&
00217 MbDataSetStorageI<_ScalarT, _Vec3T>::toStream(std::ostream& s) const
00218 {
00219 size_t i;
00220
00221 s << "# num scalar sets" << std::endl;
00222 s << getNumScalarSets() << std::endl;
00223 for ( i=0; i<getNumScalarSets(); ++i )
00224 {
00225 const MiScalardSetI* dataSet = getScalarSet(i);
00226 s << "# scalar set : " << i << std::endl;
00227 s << *(dataSet);
00228 }
00229
00230 s << "# num vector sets" << std::endl;
00231 s << getNumVec3Sets() << std::endl;
00232 for ( i=0; i<getNumVec3Sets(); ++i )
00233 {
00234 const MiVec3dSetI* dataSet = getVec3Set(i);
00235 s << "# vector set : " << i << std::endl;
00236 s << *(dataSet);
00237 }
00238
00239 return s;
00240 }
00241
00242 #ifdef _WIN32
00243 # pragma warning( pop )
00244 #endif
00245
00246 #endif
00247
00248
00249
00250
00251
00252
00253
00254