ESyS-Particle  2.3.4
VtkPiece.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_VTKPIECE_H
15 #define ESYS_LSM_VTKPIECE_H
16 
17 #include <vector>
18 #include <map>
19 #include <iostream>
20 #include <sstream>
21 
25 
26 namespace esys
27 {
28  namespace lsm
29  {
30  namespace vtk
31  {
32  class XmlPiece
33  {
34  public:
35  virtual void writeXml(std::ostream &oStream) = 0;
36  };
37 
38  template <typename TmplPointType, typename TmplPointDataTypeTuple>
39  class Piece : public XmlPiece
40  {
41  public:
42  typedef TmplPointType PointType;
43  typedef typename PointType::value_type PointValue;
44  typedef TmplPointDataTypeTuple PointDataTypeTuple;
45  typedef typename PointDataTypeTuple::DataValueTuple PointData;
46 
47  Piece(const PointType &pointType, const PointDataTypeTuple &pointDataType)
48  : m_pointData(pointDataType),
49  m_pointValueArray(pointType),
51  {
52  }
53 
54  virtual ~Piece()
55  {
56  }
57 
58  int getIndex(const PointValue &point) const
59  {
60  typename PointIndexMap::const_iterator it = m_pointIndexMap.find(point);
61  return ((it != m_pointIndexMap.end()) ? it->second : -1);
62  }
63 
64  void setPoint(const PointValue &point, const PointData &data)
65  {
66  int index = getIndex(point);
67  if (index < 0) {
68  index = m_pointValueArray.size();
69  m_pointIndexMap.insert(
70  typename PointIndexMap::value_type(point, index)
71  );
72  m_pointValueArray.setData(index, point);
73  }
74  m_pointData.setData(index, data);
75  }
76 
77  int getNumPoints() const
78  {
79  return m_pointValueArray.size();
80  }
81 
82  int getNumCells() const
83  {
84  return 0;
85  }
86 
87  virtual void writeXml(std::ostream &oStream) = 0;
88 
89  virtual void writePointsXml(std::ostream &oStream)
90  {
91  oStream << "<Points>" << "\n";
92  m_pointValueArray.writeXml(oStream);
93  oStream << "\n</Points>" << "\n";
94  }
95 
96  virtual void writePointDataXml(std::ostream &oStream)
97  {
98  oStream << "<PointData>" << "\n";
99  m_pointData.writeXml(oStream);
100  oStream << "\n</PointData>" << "\n";
101  }
102 
103  virtual void writeCellsXml(std::ostream &oStream)
104  {
105  oStream << "<Cells>" << "\n";
106  DataArray<Int32Type> connectivity(Int32Type("connectivity"));
107  connectivity.writeXml(oStream);
108  oStream << "\n";
109  DataArray<Int32Type> offsets(Int32Type("offsets"));
110  offsets.writeXml(oStream);
111  oStream << "\n";
112  DataArray<UInt8Type> types(UInt8Type("types"));
113  types.writeXml(oStream);
114  oStream << "\n</Cells>" << "\n";
115  }
116 
117  virtual void writeCellDataXml(std::ostream &oStream)
118  {
119  oStream << "<CellData>" << "\n";
120  oStream << "</CellData>" << "\n";
121  }
122 
123  private:
125  typedef std::map<PointValue, int> PointIndexMap;
126 
130  };
131  }
132  }
133 }
134 
135 #endif
esys::lsm::vtk::Piece::m_pointValueArray
PointValueArray m_pointValueArray
Definition: VtkPiece.h:128
esys::lsm::vtk::Piece::m_pointData
PointDataTypeTuple m_pointData
Definition: VtkPiece.h:127
esys::lsm::vtk::Piece::writeCellsXml
virtual void writeCellsXml(std::ostream &oStream)
Definition: VtkPiece.h:103
esys::lsm::vtk::DataArray::writeXml
void writeXml(std::ostream &oStream)
Definition: VtkDataArray.h:62
esys::lsm::vtk::Piece::PointDataTypeTuple
TmplPointDataTypeTuple PointDataTypeTuple
Definition: VtkPiece.h:44
esys::lsm::vtk::DataArray
Definition: VtkDataArray.h:32
esys::lsm::vtk::Piece::Piece
Piece(const PointType &pointType, const PointDataTypeTuple &pointDataType)
Definition: VtkPiece.h:47
esys::lsm::vtk::XmlPiece::writeXml
virtual void writeXml(std::ostream &oStream)=0
esys::lsm::vtk::Piece::getNumPoints
int getNumPoints() const
Definition: VtkPiece.h:77
esys::lsm::vtk::Piece::setPoint
void setPoint(const PointValue &point, const PointData &data)
Definition: VtkPiece.h:64
VtkPiece.h
esys
Definition: CheckPointable.cpp:17
VtkDataType.h
esys::lsm::vtk::Piece
Definition: VtkPiece.h:40
esys::lsm::vtk::Piece::writePointsXml
virtual void writePointsXml(std::ostream &oStream)
Definition: VtkPiece.h:89
esys::lsm::vtk::DataArray::setData
void setData(int index, const value_type &val)
Definition: VtkDataArray.h:44
esys::lsm::vtk::Int32Type
Definition: VtkDataType.h:143
esys::lsm::vtk::Piece::PointType
TmplPointType PointType
Definition: VtkPiece.h:42
esys::lsm::vtk::Piece::m_pointIndexMap
PointIndexMap m_pointIndexMap
Definition: VtkPiece.h:129
Vec3
Definition: vec3.h:47
esys::lsm::vtk::Piece::PointData
PointDataTypeTuple::DataValueTuple PointData
Definition: VtkPiece.h:45
esys::lsm::vtk::Piece::getIndex
int getIndex(const PointValue &point) const
Definition: VtkPiece.h:58
esys::lsm::vtk::Piece::writePointDataXml
virtual void writePointDataXml(std::ostream &oStream)
Definition: VtkPiece.h:96
esys::lsm::vtk::Piece::writeXml
virtual void writeXml(std::ostream &oStream)=0
esys::lsm::vtk::Piece::~Piece
virtual ~Piece()
Definition: VtkPiece.h:54
esys::lsm::vtk::Piece::PointValue
PointType::value_type PointValue
Definition: VtkPiece.h:43
VtkDataTypeTuple.h
esys::lsm::vtk::DataArray::size
int size() const
Definition: VtkDataArray.h:52
esys::lsm::vtk::Piece::writeCellDataXml
virtual void writeCellDataXml(std::ostream &oStream)
Definition: VtkPiece.h:117
esys::lsm::vtk::Piece::getNumCells
int getNumCells() const
Definition: VtkPiece.h:82
esys::lsm::vtk::Piece::PointValueArray
DataArray< PointType > PointValueArray
Definition: VtkPiece.h:124
VtkDataArray.h
esys::lsm::vtk::Piece::PointIndexMap
std::map< PointValue, int > PointIndexMap
Definition: VtkPiece.h:125
esys::lsm::vtk::XmlPiece
Definition: VtkPiece.h:33
esys::lsm::vtk::UInt8Type
Definition: VtkDataType.h:129