Bridges-C++  3.4.4
Bridges(C++ API)
Scene.h
Go to the documentation of this file.
1 #ifndef SCENE_H
2 
3 #define SCENE_H
4 
5 #include <string>
6 #include <list>
7 #include <unordered_map>
8 
9 #include "Camera.h"
10 #include "TerrainMesh.h"
11 #include "DataStructure.h"
12 
13 namespace bridges {
14  class Scene: public DataStructure {
15 
16  private:
17  std::unordered_map<string, TerrainMesh> terrains;
18  Camera camera;
19 
20  public:
21  Scene() {
22  float pos[] = {0., 0., 0.};
23  Scene("fps", 90, pos);
24  }
25 
26  Scene(std::string type, int fov, float position[3]) {
27  camera.setType(type);
28  camera.setFov(fov);
29  camera.setPosition(position);
30  }
31 
35  virtual const string getDStype() const override {
36  return "Scene";
37  }
38 
42  void setCamera (Camera& c) {
43  camera = c;
44  }
45 
50  return camera;
51  }
52 
56  void add(TerrainMesh terrain) {
57  terrains[terrain.getName()] = terrain;
58  }
59 
63  TerrainMesh& get(string mesh_name) {
64  return terrains[mesh_name];
65  }
66 
70  // void remove(TerrainMesh scene_object) {
71  // terrains.remove(scene_object);
72  // }
73 
74  virtual const string getDataStructureRepresentation() const
75  override {
76 
77  std::string scene_json = OPEN_CURLY;
78  float pos[3];
79  // add camera
80  camera.getPosition(pos);
81  scene_json +=
82  QUOTE + "camera" + QUOTE + COLON +
83  OPEN_CURLY +
84  QUOTE + "name" + QUOTE + COLON +
85  QUOTE + camera.getType() + QUOTE + COMMA +
86  QUOTE + "fov" + QUOTE + COLON +
87  QUOTE + std::to_string(camera.getFov()) + QUOTE + COMMA +
88  QUOTE + "position" + QUOTE + COLON +
89  OPEN_BOX +
90  std::to_string(pos[0]) + COMMA +
91  std::to_string(pos[1]) + COMMA +
92  std::to_string(pos[2]) +
93  CLOSE_BOX +
95 
96  // add lights
97  scene_json += QUOTE + "lights" + QUOTE + COLON +
99 
100  // add terrain meshes
101  scene_json +=
102  QUOTE + "meshes" + QUOTE + COLON + OPEN_BOX;
103  for (auto t : terrains) {
104  // get vertices of this mesh
105  TerrainMesh tr = t.second;
106  vector<float> verts = tr.getVertices();
107  vector<float> colors = tr.getColors();
108  scene_json += OPEN_CURLY +
109  QUOTE + "name" + QUOTE + COLON + QUOTE + tr.getName() + QUOTE + COMMA +
110  QUOTE + "type" + QUOTE + COLON + QUOTE + tr.getType() + QUOTE + COMMA +
111  QUOTE + "rows" + QUOTE + COLON + QUOTE + std::to_string(tr.getRows()) + QUOTE + COMMA +
112  QUOTE + "cols" + QUOTE + COLON + QUOTE + std::to_string(tr.getCols()) + QUOTE + COMMA +
113 
114  // terrain vertices
115  QUOTE + "vertices" + QUOTE + COLON;
116 
117  scene_json += OPEN_BOX; //vertices start
118  // list vertices one row at a time
119  int k = 0;
120  for (int i = 0; i < tr.getRows(); i++) {
121  scene_json += OPEN_BOX; // row start
122  for (int j = 0; j < tr.getCols(); j++) {
123  scene_json += std::to_string(verts[k++]) + COMMA;
124  }
125  // remove the last comma
126  scene_json.erase(scene_json.size() - 1);
127  scene_json += CLOSE_BOX + COMMA; // row end
128  }
129  // remove the last comma
130  scene_json.erase(scene_json.size() - 1);
131  scene_json += CLOSE_BOX + COMMA; //end of vertices
132  // terrain colors
133  scene_json += QUOTE + "colors" + QUOTE + COLON;
134  scene_json += OPEN_BOX; //colors start
135 
136  // list colors one row at a time
137  k = 0;
138  for (int i = 0; i < tr.getRows(); i++) {
139  scene_json += OPEN_BOX; // row start
140  for (int j = 0; j < tr.getCols(); j++) {
141  string col_str = std::to_string(colors[k])
142  + COMMA + std::to_string(colors[k + 1])
143  + COMMA + std::to_string(colors[k + 2])
144  + COMMA + std::to_string(colors[k + 3]);
145  scene_json += OPEN_BOX + col_str + CLOSE_BOX +
146  COMMA;
147  k += 4;
148  }
149  // remove the last comma
150  scene_json.erase(scene_json.size() - 1);
151  scene_json += CLOSE_BOX + COMMA; // row (colors) end
152  }
153  // remove the last comma
154  scene_json.erase(scene_json.size() - 1);
155  scene_json += CLOSE_BOX + CLOSE_CURLY + CLOSE_BOX + CLOSE_CURLY;
156  }
157  return scene_json;
158  }
159  };
160 }
161 #endif
Definition: Camera.h:9
void setType(string t)
Definition: Camera.h:40
int getFov() const
Definition: Camera.h:44
string getType() const
Definition: Camera.h:36
void setPosition(float p[3])
Definition: Camera.h:52
void getPosition(float *p) const
Definition: Camera.h:55
void setFov(int f)
Definition: Camera.h:48
Definition: Scene.h:14
Scene()
Definition: Scene.h:21
Scene(std::string type, int fov, float position[3])
Definition: Scene.h:26
void setCamera(Camera &c)
add function for Camera objects
Definition: Scene.h:42
virtual const string getDataStructureRepresentation() const override
remove function for TerrainMesh objects
Definition: Scene.h:74
TerrainMesh & get(string mesh_name)
add function for TerrainMesh objects
Definition: Scene.h:63
void add(TerrainMesh terrain)
add function for TerrainMesh objects
Definition: Scene.h:56
Camera getCamera()
get the current camera
Definition: Scene.h:49
virtual const string getDStype() const override
Get data structure type.
Definition: Scene.h:35
Definition: TerrainMesh.h:10
vector< float > & getVertices()
Definition: TerrainMesh.h:75
vector< float > & getColors()
Definition: TerrainMesh.h:67
int getRows()
Definition: TerrainMesh.h:51
string getName()
Definition: TerrainMesh.h:39
int getCols()
Definition: TerrainMesh.h:59
string getType()
Definition: TerrainMesh.h:47
This is the superclass of all data structure types in BRIDGES.
Definition: DataStructure.h:73
these methods convert byte arrays in to base64 codes and are used in BRIDGES to represent the color a...
Definition: alltypes.h:4
const string COLON
Definition: DataStructure.h:51
const string OPEN_BOX
Definition: DataStructure.h:54
const string COMMA
Definition: DataStructure.h:50
const string OPEN_CURLY
Definition: DataStructure.h:52
const string CLOSE_BOX
Definition: DataStructure.h:55
const string CLOSE_CURLY
Definition: DataStructure.h:53
const string QUOTE
Definition: DataStructure.h:49