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 _MBMESHIJK_H
00025 #define _MBMESHIJK_H
00026
00027 #ifdef _WIN32
00028 # pragma warning( push )
00029 # pragma warning(disable:4250)
00030 #endif
00031
00032 #include <MeshVizXLM/mesh/data/MiDataSetIjk.h>
00033 #include <MeshVizXLM/mesh/MiMeshIjk.h>
00034
00035 #include <MbMeshVizImpl.h>
00036 #include <topology/MbTopologyIjk.h>
00037 #include <data/MbVec3SetIjk.h>
00038 #include <data/MbScalarSetIjk.h>
00039 #include <data/MbStringSetIjk.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, MiMeshIjk::StorageLayout _Layout = MiMeshIjk::LAYOUT_KJI>
00056 class MbMeshIjk : virtual public MiMeshIjk
00057 {
00058 public:
00059 virtual ~MbMeshIjk(){};
00060
00067 bool addScalarSetIjk(const MbScalarSetIjk<_ScalarT,_Layout>* scalarSet);
00068
00075 bool addVec3SetIjk(const MbVec3SetIjk<_Vec3T,_Layout>* vectorSet);
00076
00083 bool addStringSetIjk(const MbStringSetIjk<_Layout>* stringSet);
00084
00090 virtual const MbVec3SetIjk<_Vec3T,_Layout>* getVec3SetIjk(size_t id) const;
00091
00096 virtual const MbVec3SetIjk<_Vec3T,_Layout>* getVec3SetIjk(std::string name) const;
00097
00103 virtual const MbScalarSetIjk<_ScalarT,_Layout>* getScalarSetIjk(size_t id) const;
00104
00109 virtual const MbScalarSetIjk<_ScalarT,_Layout>* getScalarSetIjk(std::string name) const;
00110
00116 virtual const MbStringSetIjk<_Layout>* getStringSetIjk(size_t id) const;
00117
00122 virtual const MbStringSetIjk<_Layout>* getStringSetIjk(std::string name) const;
00123
00125
00126 virtual size_t getNumVec3SetsIjk() const;
00127 virtual size_t getNumScalarSetsIjk() const;
00128 virtual size_t getNumStringSetsIjk() const;
00130
00131 private:
00132 virtual std::ostream& toStream(std::ostream& s) const;
00133
00134 typedef std::set< const MbVec3SetIjk<_Vec3T,_Layout>*, MbDataSetComparator<const MbVec3SetIjk<_Vec3T,_Layout>* > > SetOfVec3Set;
00135 typedef std::set< const MbScalarSetIjk<_ScalarT,_Layout>*, MbDataSetComparator<const MbScalarSetIjk<_ScalarT,_Layout>* > > SetOfScalarSet;
00136 typedef std::set< const MbStringSetIjk<_Layout>*, MbDataSetComparator<const MbStringSetIjk<_Layout>* > > SetOfStringSet;
00137
00138
00139 MbMeshIjk();
00140
00141 SetOfScalarSet m_scalarSets;
00142 SetOfVec3Set m_vec3Sets;
00143 SetOfStringSet m_stringSets;
00144 };
00145
00146
00147 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00148 bool
00149 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::addScalarSetIjk(const MbScalarSetIjk<_ScalarT,_Layout>* scalarSet)
00150 {
00151 std::pair<typename SetOfScalarSet::iterator,bool> ret = m_scalarSets.insert(scalarSet);
00152 return ret.second;
00153 }
00154
00155
00156 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00157 bool
00158 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::addVec3SetIjk(const MbVec3SetIjk<_Vec3T,_Layout>* vectorSet)
00159 {
00160 std::pair<typename SetOfVec3Set::iterator,bool> ret = m_vec3Sets.insert(vectorSet);
00161 return ret.second;
00162 }
00163
00164
00165 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00166 bool
00167 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::addStringSetIjk(const MbStringSetIjk<_Layout>* stringSet)
00168 {
00169 std::pair<typename SetOfStringSet::iterator,bool> ret = m_stringSets.insert(stringSet);
00170 return ret.second;
00171 }
00172
00173
00174 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00175 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::MbMeshIjk()
00176 {
00177 }
00178
00179
00180 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00181 const MbVec3SetIjk<_Vec3T,_Layout>*
00182 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getVec3SetIjk(size_t id) const
00183 {
00184 typename SetOfVec3Set::const_iterator it=m_vec3Sets.begin();
00185 for (size_t i=0; i<id && it!=m_vec3Sets.end(); ++i,++it);
00186 if ( it!=m_vec3Sets.end() )
00187 return *it;
00188 else
00189 return NULL;
00190 }
00191
00192
00193 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00194 const MbVec3SetIjk<_Vec3T,_Layout>*
00195 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getVec3SetIjk(std::string name) const
00196 {
00197 MbVec3SetIjk<_Vec3T,_Layout> tmp;
00198 tmp.setName(name);
00199 typename SetOfVec3Set::const_iterator it;
00200 it = m_vec3Sets.find(&tmp);
00201 if ( it!=m_vec3Sets.end() )
00202 return *it;
00203 else
00204 return NULL;
00205 }
00206
00207
00208 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00209 const MbScalarSetIjk<_ScalarT,_Layout>*
00210 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getScalarSetIjk(size_t id) const
00211 {
00212 typename SetOfScalarSet::const_iterator it=m_scalarSets.begin();
00213 for (size_t i=0; i<id && it!=m_scalarSets.end(); ++i,++it);
00214 if ( it!=m_scalarSets.end() )
00215 return *it;
00216 else
00217 return NULL;
00218 }
00219
00220
00221 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00222 const MbScalarSetIjk<_ScalarT,_Layout>*
00223 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getScalarSetIjk(std::string name) const
00224 {
00225 MbScalarSetIjk<_ScalarT,_Layout> tmp;
00226 tmp.setName(name);
00227 typename SetOfScalarSet::const_iterator it;
00228 it = m_scalarSets.find(&tmp);
00229 if ( it!=m_scalarSets.end() )
00230 return *it;
00231 else
00232 return NULL;
00233 }
00234
00235
00236 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00237 const MbStringSetIjk<_Layout>*
00238 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getStringSetIjk(size_t id) const
00239 {
00240 typename SetOfStringSet::const_iterator it=m_stringSets.begin();
00241 for (size_t i=0; i<id && it!=m_stringSets.end(); ++i,++it);
00242 if ( it!=m_stringSets.end() )
00243 return *it;
00244 else
00245 return NULL;
00246 }
00247
00248
00249 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00250 const MbStringSetIjk<_Layout>*
00251 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getStringSetIjk(std::string name) const
00252 {
00253 MbStringSetIjk<_Layout> tmp(0, 0, 0);
00254 tmp.setName(name);
00255 typename SetOfStringSet::const_iterator it;
00256 it = m_stringSets.find(&tmp);
00257 if ( it!=m_stringSets.end() )
00258 return *it;
00259 else
00260 return NULL;
00261 }
00262
00263
00264 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00265 size_t
00266 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getNumVec3SetsIjk() const
00267 {
00268 return m_vec3Sets.size();
00269 }
00270
00271
00272 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00273 size_t
00274 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getNumScalarSetsIjk() const
00275 {
00276 return m_scalarSets.size();
00277 }
00278
00279
00280 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00281 size_t
00282 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getNumStringSetsIjk() const
00283 {
00284 return m_stringSets.size();
00285 }
00286
00287
00288 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00289 inline std::ostream&
00290 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::toStream(std::ostream& s) const
00291 {
00292 size_t i;
00293
00294 s << "# num scalar sets" << std::endl;
00295 s << getNumScalarSetsIjk() << std::endl;
00296 for ( i=0; i<getNumScalarSetsIjk(); ++i )
00297 {
00298 const MiScalardSetIjk* dataSet = getScalarSetIjk(i);
00299 s << "# scalar set : " << i << std::endl;
00300 s << *(dataSet);
00301 }
00302
00303 s << "# num vector sets" << std::endl;
00304 s << getNumVec3SetsIjk() << std::endl;
00305 for ( i=0; i<getNumVec3SetsIjk(); ++i )
00306 {
00307 const MiVec3dSetIjk* dataSet = getVec3SetIjk(i);
00308 s << "# vector set : " << i << std::endl;
00309 s << *(dataSet);
00310 }
00311
00312 return s;
00313 }
00314
00315 #ifdef _WIN32
00316 # pragma warning( pop )
00317 #endif
00318
00319 #endif
00320
00321
00322
00323
00324
00325
00326
00327