File: GeometryInfo.h

package info (click to toggle)
esys-particle 2.3.5%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 13,132 kB
  • sloc: cpp: 81,480; python: 5,872; makefile: 1,259; sh: 313; perl: 225
file content (130 lines) | stat: -rw-r--r-- 3,471 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/////////////////////////////////////////////////////////////
//                                                         //
// Copyright (c) 2003-2017 by The University of Queensland //
// Centre for Geoscience Computing                         //
// http://earth.uq.edu.au/centre-geoscience-computing      //
//                                                         //
// Primary Business: Brisbane, Queensland, Australia       //
// Licensed under the Open Software License version 3.0    //
// http://www.apache.org/licenses/LICENSE-2.0              //
//                                                         //
/////////////////////////////////////////////////////////////


#ifndef ESYS_LSMGEOMETRYINFO_H
#define ESYS_LSMGEOMETRYINFO_H

#include "Foundation/vec3.h"

#include <vector>
#include <iostream>

namespace esys
{
  namespace lsm
  {
    typedef std::vector<bool> BoolVector;
    typedef std::vector<Vec3> Vec3Vector;
    typedef std::vector<int>  IntVector;

    /**
     * Container class for geometry meta-info.
     */
    class GeometryInfo
    {
    public:
      /**
       *
       */
      GeometryInfo();

      /**
       *
       */
      GeometryInfo(
        float            version,
        const Vec3       &bBoxMin,
        const Vec3       &bBoxMax,
        const BoolVector &periodicDimensions,
        bool             is2d = false
      );

      GeometryInfo(const GeometryInfo &geoInfo);

      GeometryInfo &operator=(const GeometryInfo &geoInfo);

      ~GeometryInfo();

      bool operator==(const GeometryInfo &geoInfo) const;

      /**
       * Sets the bounding box for geometry data.
       */
      void setBBox(const Vec3 &min, const Vec3 &max);

      /**
       * Returns true if any of the x, y or z dimensions
       * have been specified as periodic.
       */
      bool hasAnyPeriodicDimensions() const;

      /**
       * Returns true info indicates two-dimensional particle data.
       */
      bool is2d() const;

      /**
       * Set 2-D information to true if the particle data are two-dimensional; 
       * otherwise set to false.
       */
      void set_is2d(bool do2d);
      
      /**
       * Returns two corner points of bounding box.
       */
      Vec3Vector getBBoxCorners() const;
      Vec3 getMinBBoxCorner() const;
      Vec3 getMaxBBoxCorner() const;

      /**
       * Returns the periodic dimensions.
       */
      IntVector getPeriodicDimensions() const;

      /**
       * Set the periodicity of the x, y and z dimensions.
       */
      void setPeriodicDimensions(BoolVector periodicDimensions);

      /**
       * Set the LSMGeometry version for use in geometry files.
       */
      void setLsmGeoVersion(float version);
      float getLsmGeoVersion() const;
      /**
       * Parses specified istream and assigns to this object.
       */
      void read(std::istream &iStream);

      /**
       * Writes to specified istream in form parsable by the
       * GeometryInfo::read method.
       */
      void write(std::ostream &oStream) const;
      void writeWithoutVersion(std::ostream &oStream) const;

      bool isCompatible(const GeometryInfo&) const;
      bool isIdenticalGeometry(const GeometryInfo&) const;
      
    private:
      class Impl;
      
      Impl *m_pImpl;
    };
    
    std::ostream &operator<<(std::ostream &oStream, const GeometryInfo &geoInfo);
    std::istream &operator<<(std::istream &iStream, GeometryInfo &geoInfo);
  }
}

#endif