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 _MBStringSetIjk_H
00025 #define _MBStringSetIjk_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
00034 #include <data/MbDataSet.h>
00035 #include <MbMeshVizImpl.h>
00036
00037
00038 #include <Inventor/STL/vector>
00039 #include <Inventor/STL/iostream>
00040 #include <Inventor/STL/sstream>
00041 #include <Inventor/STL/algorithm>
00042
00051 template <typename MiMeshIjk::StorageLayout _Layout = MiMeshIjk::LAYOUT_KJI>
00052 class MbStringSetIjk : virtual public MiStringSetIjk, public MbStringSet, private MbIjkToI<_Layout>
00053 {
00054 public:
00055
00061 MbStringSetIjk(size_t sizeI, size_t sizeJ, size_t sizeK);
00062
00067 MbStringSetIjk(size_t sizeI, size_t sizeJ, size_t sizeK, const std::string& name, DataBinding binding);
00068
00072 virtual std::string get(size_t i, size_t j, size_t k) const;
00073
00074 virtual MiMeshIjk::StorageLayout getStorageLayout() const;
00075
00079 void getSize(size_t& sizeI, size_t& sizeJ, size_t& sizeK) const;
00080
00081
00082 private:
00086 virtual std::ostream& toStream(std::ostream& s) const;
00087
00088 static size_t s_numInstance;
00089
00090 std::vector<std::string> m_strings;
00091
00092 };
00093
00094 template <MiMeshIjk::StorageLayout _Layout>
00095 size_t MbStringSetIjk<_Layout>::s_numInstance = 0;
00096
00097 template <MiMeshIjk::StorageLayout _Layout>
00098 inline
00099 MbStringSetIjk<_Layout>::MbStringSetIjk(size_t sizeI, size_t sizeJ, size_t sizeK)
00100 : MbIjkToI<_Layout>(sizeI,sizeJ,sizeK)
00101 {
00102 std::ostringstream defName;
00103 defName << "MbStringSet_#" << s_numInstance++;
00104 m_name = defName.str();
00105
00106 m_strings.resize(this->m_numI*this->m_numJ*this->m_numK);
00107 for (size_t i=0; i< this->m_numI; ++i)
00108 for (size_t j=0; j< this->m_numJ; ++j)
00109 for (size_t k=0; k< this->m_numK; ++k)
00110 {
00111 std::ostringstream istring;
00112 istring << "id:" << i << ", " << j << ", " << k;
00113 m_strings[this->getI(i,j,k)] = istring.str();
00114 }
00115 }
00116
00117 template <MiMeshIjk::StorageLayout _Layout>
00118 inline
00119 MbStringSetIjk<_Layout>::MbStringSetIjk(size_t sizeI, size_t sizeJ, size_t sizeK, const std::string& name, MiDataSet::DataBinding binding)
00120 : MbStringSet(name, binding)
00121 , MbIjkToI<_Layout>(sizeI,sizeJ,sizeK)
00122 {
00123 s_numInstance++;
00124
00125 m_strings.resize(this->m_numI*this->m_numJ*this->m_numK);
00126 for (size_t i=0; i< this->m_numI; ++i)
00127 for (size_t j=0; j< this->m_numJ; ++j)
00128 for (size_t k=0; k< this->m_numK; ++k)
00129 {
00130 std::ostringstream istring;
00131 istring << "id:" << i << ", " << j << ", " << k;
00132 m_strings[this->getI(i,j,k)] = istring.str();
00133 }
00134 }
00135
00136 template <MiMeshIjk::StorageLayout _Layout>
00137 std::string MbStringSetIjk<_Layout>::get(size_t i, size_t j, size_t k) const
00138 {
00139 return m_strings[this->getI(i,j,k)];
00140 }
00141
00142 template <MiMeshIjk::StorageLayout _Layout>
00143 MiMeshIjk::StorageLayout MbStringSetIjk<_Layout>::getStorageLayout() const
00144 {
00145 return _Layout;
00146 }
00147
00148 template <MiMeshIjk::StorageLayout _Layout>
00149 void MbStringSetIjk<_Layout>::getSize(size_t& sizeI, size_t& sizeJ, size_t& sizeK) const
00150 {
00151 sizeI = this->m_numI;
00152 sizeJ = this->m_numJ;
00153 sizeK = this->m_numK;
00154 }
00155
00156 template <MiMeshIjk::StorageLayout _Layout>
00157 std::ostream& MbStringSetIjk<_Layout>::toStream(std::ostream& s) const
00158 {
00159 s << "# stringset name" << std::endl;
00160 s << getName() << std::endl;
00161 s << "# stringset size" << std::endl;
00162 s << this->m_numI << "," << this->m_numJ << "," << this->m_numK << std::endl;
00163 for (size_t i=0; i< this->m_numI; ++i)
00164 for (size_t j=0; j< this->m_numJ; ++j)
00165 for (size_t k=0; k< this->m_numK; ++k)
00166 s << "value(" << i << "," << j << "," << k << ")=" << get(i,j,k) << std::endl;
00167
00168 return s;
00169 }
00170
00171 #ifdef _WIN32
00172 # pragma warning( pop )
00173 #endif
00174
00175 #endif
00176
00177