Helios++
Helios software for LiDAR simulations
SerialSceneWrapper.h
1 #pragma once
2 
3 #include <Asset.h>
4 #include <Scene.h>
5 #include <StaticScene.h>
6 #include <DynScene.h>
7 
8 #include <boost/serialization/export.hpp>
9 
10 
21 class SerialSceneWrapper : public Asset {
22 private:
23  // *** SERIALIZATION *** //
24  // *********************** //
25  friend class boost::serialization::access;
32  template <class Archive>
33  void serialize(Archive &ar, const unsigned int version){
34  boost::serialization::void_cast_register<SerialSceneWrapper, Asset>();
35  ar &boost::serialization::base_object<Asset>(*this);
36  ar &sceneType;
37  switch(sceneType){
38  case SCENE:
39  ar &scene;
40  break;
41  case STATIC_SCENE:{
42  StaticScene *_scene = (StaticScene *) scene;
43  ar &_scene;
44  scene = (Scene *) _scene;
45  break;
46  } case DYNAMIC_SCENE:{
47  DynScene *_scene = (DynScene *) scene;
48  ar &_scene;
49  scene = (Scene *) _scene;
50  break;
51  }
52  }
53  }
54 
55 public:
56  // *** SCENE TYPE ENUMERATION *** //
57  // ******************************** //
61  enum SceneType{SCENE, STATIC_SCENE, DYNAMIC_SCENE};
62 
63 protected:
64  // *** ATTRIBUTES *** //
65  // ******************** //
74 
75 public:
76  // *** CONSTRUCTION / DESTRUCTION *** //
77  // ************************************ //
81  SerialSceneWrapper() : Asset(), sceneType(SCENE), scene(nullptr) {}
83  Asset(),
85  scene(scene)
86  {}
87  virtual ~SerialSceneWrapper() = default;
88 
89  // *** READ / WRITE *** //
90  // ********************** //
95  void writeScene(std::string const &path);
100  static SerialSceneWrapper * readScene(std::string const &path);
101 
102 
103  // *** GETTERs and SETTERs *** //
104  // ***************************** //
111  SceneType getSceneType() const {return sceneType;}
119  {this->sceneType = sceneType;}
128  Scene * getScene() const {return scene;}
135  void setScene(Scene *scene) {this->scene = scene;}
151  DynScene *getDynScene() const {return (DynScene *) scene;}
152 };
Base class for all assets.
Definition: Asset.h:10
Dynamic scene base implementation.
Definition: DynScene.h:29
Class representing a scene asset.
Definition: Scene.h:28
Wrapper for scenes which assists read and write serialization operations depending on the type of sce...
Definition: SerialSceneWrapper.h:21
static SerialSceneWrapper * readScene(std::string const &path)
Read serialized scene from given file, automatically handling the scene type to be read.
Definition: SerialSceneWrapper.cpp:14
DynScene * getDynScene() const
Obtain the scene being wrapped as a DynScene.
Definition: SerialSceneWrapper.h:151
SceneType getSceneType() const
Obtain the type of scene being wrapped.
Definition: SerialSceneWrapper.h:111
void serialize(Archive &ar, const unsigned int version)
Serialize a SerialSceneWrapper to a stream of bytes.
Definition: SerialSceneWrapper.h:33
SceneType
Types of scene that can be handled by the SerialSceneWrapper.
Definition: SerialSceneWrapper.h:61
Scene * getScene() const
Obtain the scene being wrapped.
Definition: SerialSceneWrapper.h:128
void setSceneType(SceneType const &sceneType)
Set the type of scene being wrapped.
Definition: SerialSceneWrapper.h:118
SceneType sceneType
Type of the scene being wrapped.
Definition: SerialSceneWrapper.h:69
SerialSceneWrapper()
Default constructor for serial scene wrapper.
Definition: SerialSceneWrapper.h:81
void setScene(Scene *scene)
Set the scene being wrapped.
Definition: SerialSceneWrapper.h:135
StaticScene * getStaticScene() const
Obtain the scene being wrapped as a StaticScene.
Definition: SerialSceneWrapper.h:143
void writeScene(std::string const &path)
Serialize the scene writing it to given output file.
Definition: SerialSceneWrapper.cpp:7
Scene * scene
Pointer to the scene being wrapped.
Definition: SerialSceneWrapper.h:73
Static scene basic implementation.
Definition: StaticScene.h:24