00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBVEC3SETI_H
00024 #define _MBVEC3SETI_H
00025
00026 #ifdef _WIN32
00027 # pragma warning( push )
00028 # pragma warning(disable:4250)
00029 #endif
00030
00031 #include <MeshVizXLM/mesh/data/MiDataSetI.h>
00032 #include <MeshVizXLM/extrmesh/data/MeXDataSetI.h>
00033 #include <MeshVizXLM/MbVec3.h>
00034
00035 #include <data/MbDataSet.h>
00036 #include <MbMeshVizImpl.h>
00037
00038 #include <Inventor/STL/vector>
00039 #include <Inventor/STL/iostream>
00040 #include <Inventor/STL/sstream>
00041
00051 template <typename _Vec3T=MbVec3d>
00052 class MbVec3SetI : virtual public MiVec3dSetI, public MbDataSet
00053 {
00054 public:
00060 MbVec3SetI();
00061
00069 template <typename _Vec3Iter>
00070 MbVec3SetI(_Vec3Iter begin, _Vec3Iter end);
00071
00080 template <typename _Vec3Iter>
00081 MbVec3SetI(_Vec3Iter begin, _Vec3Iter end, const std::string& name, DataBinding binding=PER_NODE);
00082
00087 MbVec3SetI(const MeXVec3dSetI& vec3set);
00088
00096 template <typename _Vec3Iter>
00097 void assign(_Vec3Iter begin, _Vec3Iter end);
00098
00102 virtual MbVec3d get(size_t i) const;
00103
00107 virtual size_t getSize() const;
00108
00112 virtual MbVec3d getMin() const;
00116 virtual MbVec3d getMax() const;
00117
00118 private:
00122 virtual std::ostream& toStream(std::ostream& s) const;
00123
00124 std::vector<_Vec3T> m_coords;
00125
00126 static size_t s_numInstance;
00127
00128 };
00129
00130
00131 template <typename _T>
00132 size_t MbVec3SetI<_T>::s_numInstance = 0;
00133
00134
00135
00136 template <typename _Vec3T>
00137 inline
00138 MbVec3SetI<_Vec3T>::MbVec3SetI()
00139 {
00140 std::ostringstream defName;
00141 defName << "MbVec3Set_#" << s_numInstance++;
00142 m_name = defName.str();
00143 }
00144
00145
00146 template <typename _Vec3T>
00147 template <typename _Vec3Iter>
00148 inline
00149 MbVec3SetI<_Vec3T>::MbVec3SetI(
00150 _Vec3Iter beginCoord, _Vec3Iter endCoord
00151 )
00152 : m_coords(beginCoord,endCoord)
00153 {
00154 std::ostringstream defName;
00155 defName << "MbVec3Set_#" << s_numInstance++;
00156 m_name = defName.str();
00157 }
00158
00159
00160 template <typename _Vec3T>
00161 template <typename _Vec3Iter>
00162 inline
00163 MbVec3SetI<_Vec3T>::MbVec3SetI(_Vec3Iter beginCoord, _Vec3Iter endCoord,
00164 const std::string& name,
00165 DataBinding binding)
00166 : MbDataSet(name,binding), m_coords(beginCoord,endCoord)
00167 {
00168 s_numInstance++;
00169 }
00170
00171
00172 template <typename _Vec3T>
00173 inline
00174 MbVec3SetI<_Vec3T>::MbVec3SetI(const MeXVec3dSetI& vec3set)
00175 : MbDataSet(vec3set.getName(), vec3set.getBinding())
00176 {
00177 s_numInstance++;
00178 m_coords.resize(vec3set.getSize());
00179 for (size_t n = 0; n < m_coords.size(); ++n)
00180 m_coords[n] = vec3set.get(n);
00181 }
00182
00183
00184 template <typename _Vec3T>
00185 template <typename _Vec3Iter>
00186 inline void
00187 MbVec3SetI<_Vec3T>::assign(_Vec3Iter beginCoord, _Vec3Iter endCoord)
00188 {
00189 m_coords.assign(beginCoord,endCoord);
00190 m_timeStamp = MxTimeStamp::getTimeStamp();
00191 }
00192
00193
00194
00195 template <typename _Vec3T>
00196 inline MbVec3d
00197 MbVec3SetI<_Vec3T>::get(size_t i) const
00198 {
00199 return (MbVec3d)m_coords[i];
00200 }
00201
00202
00203 template <typename _Vec3T>
00204 inline size_t
00205 MbVec3SetI<_Vec3T>::getSize() const
00206 {
00207 return m_coords.size();
00208 }
00209
00210
00211
00212 template <typename _Vec3T>
00213 inline MbVec3d
00214 MbVec3SetI<_Vec3T>::getMin() const
00215 {
00216 size_t minvecId = 0;
00217 double minvecLn = m_coords[0].length();
00218
00219 for (size_t i=1; i<m_coords.size(); ++i)
00220 {
00221 double vecLn = m_coords[i].length();
00222 if (vecLn < minvecLn)
00223 {
00224 minvecLn = vecLn;
00225 minvecId = i;
00226 }
00227 }
00228 return (MbVec3d)m_coords[minvecId];
00229 }
00230
00231
00232
00233 template <typename _Vec3T>
00234 inline MbVec3d
00235 MbVec3SetI<_Vec3T>::getMax() const
00236 {
00237 size_t maxvecId = 0;
00238 double maxvecLn = m_coords[0].length();
00239
00240 for (size_t i=1; i<m_coords.size(); ++i)
00241 {
00242 double vecLn = m_coords[i].length();
00243 if (vecLn > maxvecLn)
00244 {
00245 maxvecLn = vecLn;
00246 maxvecId = i;
00247 }
00248 }
00249 return (MbVec3d)m_coords[maxvecId];
00250 }
00251
00252
00253 template <typename _Vec3T>
00254 inline std::ostream&
00255 MbVec3SetI<_Vec3T>::toStream(std::ostream& s) const
00256 {
00257 s << "# vec3set name" << std::endl;
00258 s << getName() << std::endl;
00259 s << "# vec3set size" << std::endl;
00260 s << getSize() << std::endl;
00261 for (size_t i=0; i< m_coords.size(); ++i)
00262 s << m_coords[i] << std::endl;
00263
00264 return s;
00265 }
00266
00267 #ifdef _WIN32
00268 # pragma warning( pop )
00269 #endif
00270
00271 #endif
00272
00273
00274
00275
00276
00277
00278
00279
00280