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 MbDataSet
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
00139 template <typename _T>
00140 size_t MbScalarSetI<_T>::s_numInstance = 0;
00141
00142
00143
00144 template <typename _T>
00145 inline
00146 MbScalarSetI<_T>::MbScalarSetI()
00147 {
00148 std::ostringstream defName;
00149 defName << "MbScalarSet_#" << s_numInstance++;
00150 m_name = defName.str();
00151 }
00152
00153
00154 template <typename _T>
00155 template <typename _TIter>
00156 inline
00157 MbScalarSetI<_T>::MbScalarSetI(_TIter beginCoord, _TIter endCoord)
00158 : m_scalars(beginCoord,endCoord)
00159 {
00160 std::ostringstream defName;
00161 defName << "MbScalarSet_#" << s_numInstance++;
00162 m_name = defName.str();
00163 }
00164
00165
00166 template <typename _T>
00167 template <typename _TIter>
00168 inline
00169 MbScalarSetI<_T>::MbScalarSetI(_TIter beginCoord, _TIter endCoord,
00170 const std::string& name,
00171 DataBinding binding)
00172 : MbDataSet(name,binding), m_scalars(beginCoord,endCoord)
00173 {
00174 s_numInstance++;
00175 }
00176
00177
00178 template <typename _T>
00179 inline
00180 MbScalarSetI<_T>::MbScalarSetI(const MiScalardSetI& scalarset, size_t numData)
00181 : MbDataSet(scalarset.getName(), scalarset.getBinding())
00182 {
00183 s_numInstance++;
00184 m_scalars.resize(numData);
00185 for (size_t n = 0; n < numData; ++n)
00186 m_scalars[n] = scalarset.get(n);
00187 }
00188
00189
00190 template <typename _T>
00191 inline
00192 MbScalarSetI<_T>::MbScalarSetI(const MeXScalardSetI& scalarset)
00193 : MbDataSet(scalarset.getName(), scalarset.getBinding())
00194 {
00195 s_numInstance++;
00196 m_scalars.resize(scalarset.getSize());
00197 for (size_t n = 0; n < m_scalars.size(); ++n)
00198 m_scalars[n] = scalarset.get(n);
00199 }
00200
00201
00202 template <typename _T>
00203 template <typename _TIter>
00204 void
00205 MbScalarSetI<_T>::assign(_TIter beginCoord, _TIter endCoord)
00206 {
00207 m_scalars.assign(beginCoord,endCoord);
00208 m_timeStamp = MxTimeStamp::getTimeStamp();
00209 }
00210
00211
00212
00213 template <typename _T>
00214 double
00215 MbScalarSetI<_T>::get(size_t i) const
00216 {
00217 return (double)m_scalars[i];
00218 }
00219
00220
00221 template <typename _T>
00222 size_t
00223 MbScalarSetI<_T>::getSize() const
00224 {
00225 return m_scalars.size();
00226 }
00227
00228
00229
00230 template <typename _T>
00231 double
00232 MbScalarSetI<_T>::getMin() const
00233 {
00234 typename std::vector<_T>::const_iterator itmin = std::min_element(m_scalars.begin(),m_scalars.end());
00235 return (double)(*itmin);
00236 }
00237
00238
00239
00240 template <typename _T>
00241 double
00242 MbScalarSetI<_T>::getMax() const
00243 {
00244 typename std::vector<_T>::const_iterator itmax = std::max_element(m_scalars.begin(),m_scalars.end());
00245 return (double)(*itmax);
00246 }
00247
00248
00249
00250 template <typename _T>
00251 std::ostream&
00252 MbScalarSetI<_T>::toStream(std::ostream& s) const
00253 {
00254 s << "# scalarset name" << std::endl;
00255 s << getName() << std::endl;
00256 s << "# scalarset size" << std::endl;
00257 s << getSize() << std::endl;
00258 for (size_t i=0; i< m_scalars.size(); ++i)
00259 s << m_scalars[i] << std::endl;
00260
00261 return s;
00262 }
00263
00264 #ifdef _WIN32
00265 # pragma warning( pop )
00266 #endif
00267
00268 #endif
00269
00270
00271
00272
00273
00274
00275
00276
00277