ESyS-Particle  2.3.4
VtkDataType.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 
14 #ifndef ESYS_LSM_VTKDATATYPE_H
15 #define ESYS_LSM_VTKDATATYPE_H
16 
17 #include <vector>
18 #include <map>
19 #include <iostream>
20 #include <sstream>
21 
22 #include "Foundation/vec3.h"
23 #include "Foundation/Matrix3.h"
24 
25 namespace esys
26 {
27  namespace lsm
28  {
29  namespace vtk
30  {
31  typedef std::string ValueTypeName;
32  typedef std::string FormatTypeName;
33 
34  static const ValueTypeName UInt8 = "UInt8";
35  static const ValueTypeName Int16 = "Int16";
36  static const ValueTypeName UInt16 = "UInt16";
37  static const ValueTypeName Int32 = "Int32";
38  static const ValueTypeName UInt32 = "UInt32";
39  static const ValueTypeName Int64 = "Int64";
40  static const ValueTypeName UInt64 = "UInt64";
41  static const ValueTypeName Float32 = "Float32";
42  static const ValueTypeName Float64 = "Float64";
43 
44  static const FormatTypeName ascii = "ascii";
45  static const FormatTypeName binary = "binary";
46  static const FormatTypeName appended = "appended";
47 
48  template <typename TmplType>
49  std::string quote(const TmplType &thing)
50  {
51  std::stringstream sStream;
52  sStream << "\"" << thing << "\"";
53  return sStream.str();
54  }
55 
56  template <typename TmplValueType>
57  class DataType
58  {
59  public:
60  typedef TmplValueType value_type;
62  const ValueTypeName &valueTypeName,
63  const std::string &dataName,
64  unsigned int numComponents,
65  const FormatTypeName &format = ascii,
66  unsigned int offset = 0
67  ) :
68  m_valueTypeName(valueTypeName),
69  m_dataName(dataName),
70  m_numComponents(numComponents),
71  m_format(format),
72  m_offset(offset)
73  {
74  }
75 
76  std::string getXmlAttributeString() const
77  {
78  std::stringstream sStream;
79 
80  sStream
81  << "type=" << quote(m_valueTypeName) << " "
82  << "Name=" << quote(m_dataName) << " "
83  << "NumberOfComponents=" << quote(m_numComponents) << " "
84  << "format=" << quote(m_format);
85  if (m_format == appended) {
86  sStream << " offset=" << quote(m_offset);
87  }
88 
89  return sStream.str();
90  }
91 
92  private:
94  std::string m_dataName;
95  unsigned int m_numComponents;
97  unsigned int m_offset;
98  };
99 
100  class Float64Type : public DataType<double>
101  {
102  public:
105  const std::string &name,
106  const FormatTypeName &format=ascii,
107  int offset=0
108  )
109  : Inherited(Float64, name, 1, format, offset)
110  {
111  }
112  };
113 
114  class Float32Type : public DataType<float>
115  {
116  public:
119  const std::string &name,
120  const FormatTypeName &format=ascii,
121  int offset=0
122  )
123  : Inherited(Float32, name, 1, format, offset)
124  {
125  }
126  };
127 
128  class UInt8Type : public DataType<unsigned char>
129  {
130  public:
133  const std::string &name,
134  const FormatTypeName &format=ascii,
135  int offset=0
136  )
137  : Inherited(UInt8, name, 1, format, offset)
138  {
139  }
140  };
141 
142  class Int32Type : public DataType<int>
143  {
144  public:
147  const std::string &name,
148  const FormatTypeName &format=ascii,
149  int offset=0
150  )
151  : Inherited(Int32, name, 1, format, offset)
152  {
153  }
154  };
155 
156  class Vec3Type : public DataType<Vec3>
157  {
158  public:
161  const std::string &name,
162  const FormatTypeName &format=ascii,
163  int offset=0
164  )
165  : Inherited(Float64, name, 3, format, offset)
166  {
167  }
168  };
169 
170  class Matrix3Type : public DataType<Matrix3>
171  {
172  public:
175  const std::string &name,
176  const FormatTypeName &format=ascii,
177  int offset=0
178  )
179  : Inherited(Float64, name, 9, format, offset)
180  {
181  }
182  };
183  }
184  }
185 }
186 
187 #endif
esys::lsm::vtk::quote
std::string quote(const TmplType &thing)
Definition: VtkDataType.h:49
esys::lsm::vtk::Float64Type
Definition: VtkDataType.h:101
esys::lsm::vtk::Float32Type::Float32Type
Float32Type(const std::string &name, const FormatTypeName &format=ascii, int offset=0)
Definition: VtkDataType.h:118
esys::lsm::vtk::DataType::m_offset
unsigned int m_offset
Definition: VtkDataType.h:97
esys::lsm::vtk::ValueTypeName
std::string ValueTypeName
Definition: VtkDataType.h:31
esys::lsm::vtk::UInt32
static const ValueTypeName UInt32
Definition: VtkDataType.h:38
esys::lsm::vtk::Float32Type::Inherited
DataType< float > Inherited
Definition: VtkDataType.h:117
esys::lsm::vtk::Float32Type
Definition: VtkDataType.h:115
esys::lsm::vtk::Int32
static const ValueTypeName Int32
Definition: VtkDataType.h:37
esys::lsm::vtk::Int16
static const ValueTypeName Int16
Definition: VtkDataType.h:35
esys::lsm::vtk::DataType::m_numComponents
unsigned int m_numComponents
Definition: VtkDataType.h:95
esys::lsm::vtk::binary
static const FormatTypeName binary
Definition: VtkDataType.h:45
esys::lsm::vtk::UInt8Type::UInt8Type
UInt8Type(const std::string &name, const FormatTypeName &format=ascii, int offset=0)
Definition: VtkDataType.h:132
esys::lsm::vtk::Int64
static const ValueTypeName Int64
Definition: VtkDataType.h:39
esys::lsm::vtk::DataType::m_format
FormatTypeName m_format
Definition: VtkDataType.h:96
Matrix3.h
esys::lsm::vtk::Float64Type::Inherited
DataType< double > Inherited
Definition: VtkDataType.h:103
esys::lsm::vtk::DataType::DataType
DataType(const ValueTypeName &valueTypeName, const std::string &dataName, unsigned int numComponents, const FormatTypeName &format=ascii, unsigned int offset=0)
Definition: VtkDataType.h:61
esys::lsm::vtk::Vec3Type::Inherited
DataType< Vec3 > Inherited
Definition: VtkDataType.h:159
esys
Definition: CheckPointable.cpp:17
esys::lsm::vtk::DataType::value_type
TmplValueType value_type
Definition: VtkDataType.h:60
esys::lsm::vtk::UInt8
static const ValueTypeName UInt8
Definition: VtkDataType.h:34
esys::lsm::vtk::UInt8Type::Inherited
DataType< unsigned char > Inherited
Definition: VtkDataType.h:131
esys::lsm::vtk::Float64Type::Float64Type
Float64Type(const std::string &name, const FormatTypeName &format=ascii, int offset=0)
Definition: VtkDataType.h:104
esys::lsm::vtk::DataType::m_dataName
std::string m_dataName
Definition: VtkDataType.h:94
esys::lsm::vtk::DataType
Definition: VtkDataType.h:58
esys::lsm::vtk::Int32Type::Inherited
DataType< int > Inherited
Definition: VtkDataType.h:145
esys::lsm::vtk::DataType::getXmlAttributeString
std::string getXmlAttributeString() const
Definition: VtkDataType.h:76
esys::lsm::vtk::Int32Type
Definition: VtkDataType.h:143
esys::lsm::vtk::Matrix3Type::Matrix3Type
Matrix3Type(const std::string &name, const FormatTypeName &format=ascii, int offset=0)
Definition: VtkDataType.h:174
esys::lsm::vtk::Float32
static const ValueTypeName Float32
Definition: VtkDataType.h:41
esys::lsm::vtk::Matrix3Type
Definition: VtkDataType.h:171
esys::lsm::vtk::ascii
static const FormatTypeName ascii
Definition: VtkDataType.h:44
vec3.h
esys::lsm::vtk::UInt16
static const ValueTypeName UInt16
Definition: VtkDataType.h:36
esys::lsm::vtk::Matrix3Type::Inherited
DataType< Matrix3 > Inherited
Definition: VtkDataType.h:173
esys::lsm::vtk::Int32Type::Int32Type
Int32Type(const std::string &name, const FormatTypeName &format=ascii, int offset=0)
Definition: VtkDataType.h:146
esys::lsm::vtk::DataType::m_valueTypeName
ValueTypeName m_valueTypeName
Definition: VtkDataType.h:93
esys::lsm::vtk::FormatTypeName
std::string FormatTypeName
Definition: VtkDataType.h:32
esys::lsm::vtk::Vec3Type::Vec3Type
Vec3Type(const std::string &name, const FormatTypeName &format=ascii, int offset=0)
Definition: VtkDataType.h:160
esys::lsm::vtk::Vec3Type
Definition: VtkDataType.h:157
esys::lsm::vtk::UInt64
static const ValueTypeName UInt64
Definition: VtkDataType.h:40
esys::lsm::vtk::appended
static const FormatTypeName appended
Definition: VtkDataType.h:46
esys::lsm::vtk::Float64
static const ValueTypeName Float64
Definition: VtkDataType.h:42
esys::lsm::vtk::UInt8Type
Definition: VtkDataType.h:129