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 <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, MiMeshIjk::StorageLayout _Layout = MiMeshIjk::LAYOUT_KJI>
00055 class MbMeshIjk : virtual public MiMeshIjk
00056 {
00057 public:
00058 virtual ~MbMeshIjk(){};
00059
00066 bool addScalarSetIjk(const MbScalarSetIjk<_ScalarT,_Layout>* scalarSet);
00067
00074 bool addVec3SetIjk(const MbVec3SetIjk<_Vec3T,_Layout>* vectorSet);
00075
00081 virtual const MbVec3SetIjk<_Vec3T,_Layout>* getVec3SetIjk(size_t id) const;
00082
00087 virtual const MbVec3SetIjk<_Vec3T,_Layout>* getVec3SetIjk(std::string name) const;
00088
00094 virtual const MbScalarSetIjk<_ScalarT,_Layout>* getScalarSetIjk(size_t id) const;
00095
00100 virtual const MbScalarSetIjk<_ScalarT,_Layout>* getScalarSetIjk(std::string name) const;
00101
00103
00104 virtual size_t getNumVec3SetsIjk() const;
00105 virtual size_t getNumScalarSetsIjk() const;
00107
00108 private:
00109 virtual std::ostream& toStream(std::ostream& s) const;
00110
00111 typedef std::set< const MbVec3SetIjk<_Vec3T,_Layout>*, MbDataSetComparator<const MbVec3SetIjk<_Vec3T,_Layout>* > > SetOfVec3Set;
00112 typedef std::set< const MbScalarSetIjk<_ScalarT,_Layout>*, MbDataSetComparator<const MbScalarSetIjk<_ScalarT,_Layout>* > > SetOfScalarSet;
00113
00114
00115 MbMeshIjk();
00116
00117 SetOfScalarSet m_scalarSets;
00118 SetOfVec3Set m_vec3Sets;
00119 };
00120
00121
00122 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00123 bool
00124 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::addScalarSetIjk(const MbScalarSetIjk<_ScalarT,_Layout>* scalarSet)
00125 {
00126 std::pair<typename SetOfScalarSet::iterator,bool> ret = m_scalarSets.insert(scalarSet);
00127 return ret.second;
00128 }
00129
00130
00131 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00132 bool
00133 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::addVec3SetIjk(const MbVec3SetIjk<_Vec3T,_Layout>* vectorSet)
00134 {
00135 std::pair<typename SetOfVec3Set::iterator,bool> ret = m_vec3Sets.insert(vectorSet);
00136 return ret.second;
00137 }
00138
00139
00140 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00141 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::MbMeshIjk()
00142 {
00143 }
00144
00145
00146 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00147 const MbVec3SetIjk<_Vec3T,_Layout>*
00148 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getVec3SetIjk(size_t id) const
00149 {
00150 typename SetOfVec3Set::const_iterator it=m_vec3Sets.begin();
00151 for (size_t i=0; i<id && it!=m_vec3Sets.end(); ++i,++it);
00152 if ( it!=m_vec3Sets.end() )
00153 return *it;
00154 else
00155 return NULL;
00156 }
00157
00158
00159 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00160 const MbVec3SetIjk<_Vec3T,_Layout>*
00161 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getVec3SetIjk(std::string name) const
00162 {
00163 MbVec3SetIjk<_Vec3T,_Layout> tmp;
00164 tmp.setName(name);
00165 typename SetOfVec3Set::const_iterator it;
00166 it = m_vec3Sets.find(&tmp);
00167 if ( it!=m_vec3Sets.end() )
00168 return *it;
00169 else
00170 return NULL;
00171 }
00172
00173
00174 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00175 const MbScalarSetIjk<_ScalarT,_Layout>*
00176 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getScalarSetIjk(size_t id) const
00177 {
00178 typename SetOfScalarSet::const_iterator it=m_scalarSets.begin();
00179 for (size_t i=0; i<id && it!=m_scalarSets.end(); ++i,++it);
00180 if ( it!=m_scalarSets.end() )
00181 return *it;
00182 else
00183 return NULL;
00184 }
00185
00186
00187 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00188 const MbScalarSetIjk<_ScalarT,_Layout>*
00189 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getScalarSetIjk(std::string name) const
00190 {
00191 MbScalarSetIjk<_ScalarT,_Layout> tmp;
00192 tmp.setName(name);
00193 typename SetOfScalarSet::const_iterator it;
00194 it = m_scalarSets.find(&tmp);
00195 if ( it!=m_scalarSets.end() )
00196 return *it;
00197 else
00198 return NULL;
00199 }
00200
00201
00202 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00203 size_t
00204 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getNumVec3SetsIjk() const
00205 {
00206 return m_vec3Sets.size();
00207 }
00208
00209
00210 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00211 size_t
00212 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::getNumScalarSetsIjk() const
00213 {
00214 return m_scalarSets.size();
00215 }
00216
00217
00218 template <typename _ScalarT, typename _Vec3T, MiMeshIjk::StorageLayout _Layout>
00219 inline std::ostream&
00220 MbMeshIjk<_ScalarT,_Vec3T,_Layout>::toStream(std::ostream& s) const
00221 {
00222 size_t i;
00223
00224 s << "# num scalar sets" << std::endl;
00225 s << getNumScalarSetsIjk() << std::endl;
00226 for ( i=0; i<getNumScalarSetsIjk(); ++i )
00227 {
00228 const MiScalardSetIjk* dataSet = getScalarSetIjk(i);
00229 s << "# scalar set : " << i << std::endl;
00230 s << *(dataSet);
00231 }
00232
00233 s << "# num vector sets" << std::endl;
00234 s << getNumVec3SetsIjk() << std::endl;
00235 for ( i=0; i<getNumVec3SetsIjk(); ++i )
00236 {
00237 const MiVec3dSetIjk* dataSet = getVec3SetIjk(i);
00238 s << "# vector set : " << i << std::endl;
00239 s << *(dataSet);
00240 }
00241
00242 return s;
00243 }
00244
00245 #ifdef _WIN32
00246 # pragma warning( pop )
00247 #endif
00248
00249 #endif
00250
00251
00252
00253
00254
00255
00256
00257