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 _MBSCALARSETI_H
00025 #define _MBSCALARSETI_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 #include <MeshVizXLM/extrmesh/data/MeXDataSetI.h>
00034
00035 #include <data/MbDataSet.h>
00036 #include <MbMeshVizImpl.h>
00037
00038
00039 #include <Inventor/STL/vector>
00040 #include <Inventor/STL/iostream>
00041 #include <Inventor/STL/sstream>
00042 #include <Inventor/STL/algorithm>
00043
00053 template <typename _T=double>
00054 class MbScalarSetI : virtual public MiScalardSetI, public MbScalardSet
00055 {
00056 public:
00062 MbScalarSetI();
00063
00071 template <typename _TIter>
00072 MbScalarSetI(_TIter begin, _TIter end);
00073
00082 template <typename _TIter>
00083 MbScalarSetI(_TIter begin, _TIter end, const std::string& name, DataBinding binding=PER_NODE);
00084
00090 MbScalarSetI(const MiScalardSetI& scalarset, size_t numData);
00091
00096 MbScalarSetI(const MeXScalardSetI& scalarset);
00097
00105 template <typename _TIter>
00106 void assign(_TIter begin, _TIter end);
00107
00111 virtual double get(size_t i) const;
00112
00116 virtual size_t getSize() const;
00117
00121 virtual double getMin() const;
00125 virtual double getMax() const;
00126
00127 private:
00131 virtual std::ostream& toStream(std::ostream& s) const;
00132
00133 std::vector<_T> m_scalars;
00134
00135 static size_t s_numInstance;
00136 };
00137
00138 typedef MbScalarSetI<double> MbScalardSetI;
00139
00140 template <typename _T>
00141 size_t MbScalarSetI<_T>::s_numInstance = 0;
00142
00143
00144
00145 template <typename _T>
00146 inline
00147 MbScalarSetI<_T>::MbScalarSetI()
00148 {
00149 std::ostringstream defName;
00150 defName << "MbScalarSet_#" << s_numInstance++;
00151 m_name = defName.str();
00152 }
00153
00154
00155 template <typename _T>
00156 template <typename _TIter>
00157 inline
00158 MbScalarSetI<_T>::MbScalarSetI(_TIter beginCoord, _TIter endCoord)
00159 : m_scalars(beginCoord,endCoord)
00160 {
00161 std::ostringstream defName;
00162 defName << "MbScalarSet_#" << s_numInstance++;
00163 m_name = defName.str();
00164 }
00165
00166
00167 template <typename _T>
00168 template <typename _TIter>
00169 inline
00170 MbScalarSetI<_T>::MbScalarSetI(_TIter beginCoord, _TIter endCoord,
00171 const std::string& name,
00172 DataBinding binding)
00173 : MbScalardSet(name,binding), m_scalars(beginCoord,endCoord)
00174 {
00175 s_numInstance++;
00176 }
00177
00178
00179 template <typename _T>
00180 inline
00181 MbScalarSetI<_T>::MbScalarSetI(const MiScalardSetI& scalarset, size_t numData)
00182 : MbScalardSet(scalarset.getName(), scalarset.getBinding())
00183 {
00184 s_numInstance++;
00185 m_scalars.resize(numData);
00186 for (size_t n = 0; n < numData; ++n)
00187 m_scalars[n] = scalarset.get(n);
00188 }
00189
00190
00191 template <typename _T>
00192 inline
00193 MbScalarSetI<_T>::MbScalarSetI(const MeXScalardSetI& scalarset)
00194 : MbScalardSet(scalarset.getName(), scalarset.getBinding())
00195 {
00196 s_numInstance++;
00197 m_scalars.resize(scalarset.getSize());
00198 for (size_t n = 0; n < m_scalars.size(); ++n)
00199 m_scalars[n] = scalarset.get(n);
00200 }
00201
00202
00203 template <typename _T>
00204 template <typename _TIter>
00205 void
00206 MbScalarSetI<_T>::assign(_TIter beginCoord, _TIter endCoord)
00207 {
00208 m_scalars.assign(beginCoord,endCoord);
00209 m_timeStamp = MxTimeStamp::getTimeStamp();
00210 }
00211
00212
00213
00214 template <typename _T>
00215 double
00216 MbScalarSetI<_T>::get(size_t i) const
00217 {
00218 return (double)m_scalars[i];
00219 }
00220
00221
00222 template <typename _T>
00223 size_t
00224 MbScalarSetI<_T>::getSize() const
00225 {
00226 return m_scalars.size();
00227 }
00228
00229
00230
00231 template <typename _T>
00232 double
00233 MbScalarSetI<_T>::getMin() const
00234 {
00235 typename std::vector<_T>::const_iterator itmin = std::min_element(m_scalars.begin(),m_scalars.end());
00236 return (double)(*itmin);
00237 }
00238
00239
00240
00241 template <typename _T>
00242 double
00243 MbScalarSetI<_T>::getMax() const
00244 {
00245 typename std::vector<_T>::const_iterator itmax = std::max_element(m_scalars.begin(),m_scalars.end());
00246 return (double)(*itmax);
00247 }
00248
00249
00250
00251 template <typename _T>
00252 std::ostream&
00253 MbScalarSetI<_T>::toStream(std::ostream& s) const
00254 {
00255 s << "# scalarset name" << std::endl;
00256 s << getName() << std::endl;
00257 s << "# scalarset size" << std::endl;
00258 s << getSize() << std::endl;
00259 for (size_t i=0; i< m_scalars.size(); ++i)
00260 s << m_scalars[i] << std::endl;
00261
00262 return s;
00263 }
00264
00265 #ifdef _WIN32
00266 # pragma warning( pop )
00267 #endif
00268
00269 #endif
00270
00271
00272
00273
00274
00275
00276
00277
00278