All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PolyChartModel.h
1 // Copyright (c) 2015 eeGeo. All rights reserved.
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "LatLongAltitude.h"
7 #include "Colors.h"
8 #include <string>
9 #include <vector>
10 
11 namespace Eegeo
12 {
13  namespace Data
14  {
15  namespace PolyChart
16  {
17  typedef std::string TPolyChartId;
18 
20  {
21  public:
23  {
24  public:
25  PolyChartStackSegment(const float topHeight, const float bottomHeight, const v4& color)
26  : m_color(color)
27  , m_topHeight(topHeight)
28  , m_bottomHeight(bottomHeight)
29  {
30  }
31 
32  const v4& GetColor() const { return m_color; }
33  const float GetTopHeight() const { return m_topHeight; }
34  const float GetBottomHeight() const { return m_bottomHeight; }
35  private:
36  v4 m_color;
37  float m_topHeight;
38  float m_bottomHeight;
39  };
40 
42  {
43  public:
45  const TPolyChartId& id,
46  const std::vector<Space::LatLongAltitude>& exteriorRingVertices,
47  const v4& polygonColor)
48  : m_id(id)
49  , m_exteriorRingVertices(exteriorRingVertices)
50  , m_color(polygonColor)
51  , m_altitudeOffset(0.0f)
52  , m_finished(false)
53  {
54  }
55 
56  PolyChartBuilder(const TPolyChartId& id,
57  const Space::LatLongAltitude& cylinderCentre,
58  float radiusInMetres,
59  const v4& polygonColor);
60 
61  PolyChartBuilder& AltitudeOffset(float altitudeOffset);
62  PolyChartBuilder& AddChartStack(const float heightInMetres, const v4& color);
63  PolyChartModel* Build();
64 
65  private:
66  const std::string m_id;
67  std::vector<Space::LatLongAltitude> m_exteriorRingVertices;
68  const v4 m_color;
69  std::vector<PolyChartStackSegment> m_stackParts;
70  float m_altitudeOffset;
71  bool m_finished;
72  };
73 
75  {
76  public:
78  const TPolyChartId& id,
79  const dv3& ecefCellCenter,
80  const std::vector<v3>& exteriorRingVerticesLocalEcef,
81  const std::vector<u16>& triangulationIndices,
82  const v4& polygonColor)
83  : m_id(id)
84  , m_ecefCellCenter(ecefCellCenter)
85  , m_exteriorRingVerticesLocalEcef(exteriorRingVerticesLocalEcef)
86  , m_triangulationIndices(triangulationIndices)
87  , m_color(polygonColor)
88  {
89  }
90 
91  LocalEcefPolyChartBuilder& AddChartStack(const float heightInMetres, const v4& color);
92  PolyChartModel* Build();
93 
94  private:
95  const std::string m_id;
96  dv3 m_ecefCellCenter;
97  std::vector<v3> m_exteriorRingVerticesLocalEcef;
98  std::vector<u16> m_triangulationIndices;
99  const v4 m_color;
100  std::vector<PolyChartStackSegment> m_stackParts;
101  };
102 
103  const float GetScale() const { return m_scale; }
104  void SetScale(float scale) { m_scale = scale; }
105 
106  const TPolyChartId& GetId() const { return m_id; }
107  const dv3& GetEcefCellCenter() const { return m_ecefCellCenter; }
108 
109  const v4& GetColor() const { return m_color; }
110 
111  const std::vector<dv3>& GetEcefTriangleVertices() const { return m_ecefTriangleVerts; }
112  const std::vector<dv3>& GetExteriorEcefVertices() const { return m_exteriorEcefVerts; }
113 
114  const float GetHeight() const;
115  const size_t GetNumberOfStacks() const { return m_stacks.size(); }
116  const PolyChartStackSegment& GetStackByIndex(int index) const { return m_stacks.at(index); }
117 
118  private:
119  PolyChartModel() { };
120 
121  float m_scale;
122  TPolyChartId m_id;
123  std::vector<dv3> m_ecefTriangleVerts;
124  std::vector<dv3> m_exteriorEcefVerts;
125  std::vector<PolyChartStackSegment> m_stacks;
126  v4 m_color;
127  dv3 m_ecefCellCenter;
128  };
129  }
130  }
131 }