Helios++
Helios software for LiDAR simulations
XmlSurveyLoader.h
1 #pragma once
2 
3 #include <XmlAssetsLoader.h>
4 #include <SpectralLibrary.h>
5 #include <Survey.h>
6 #include <Leg.h>
7 #include <ScanningStrip.h>
8 
9 #include <string>
10 #include <unordered_set>
11 #include <unordered_map>
12 #include <memory>
13 
22 protected:
23  // *** ATTRIBUTES *** //
24  // ******************** //
29  std::unordered_map<std::string, std::shared_ptr<ScanningStrip>> strips;
34  int lastLegSerialId = -1;
35 
36 public:
37  // *** CONSTRUCTION / DESTRUCTION *** //
38  // ************************************ //
44  XmlSurveyLoader(std::string& filePath, std::string& assetsDir)
45  : XmlAssetsLoader(filePath, assetsDir) {}
46 
47  // *** M E T H O D S *** //
48  // *********************** //
59  std::shared_ptr<Leg> createLegFromXML(
60  tinyxml2::XMLElement* legNode,
61  std::unordered_set<std::string> *scannerFields,
62  std::unordered_set<std::string> *platformFields
63  );
78  std::shared_ptr<Survey> createSurveyFromXml(
79  tinyxml2::XMLElement* surveyNode,
80  bool legNoiseDisabled=false,
81  bool rebuildScene=false
82  );
91  std::shared_ptr<Survey> load(
92  bool legNoiseDisabled=false,
93  bool rebuildScene=false
94  );
95 
96 protected:
97  // *** UTIL METHODS *** //
98  // ********************** //
106  void reinitLoader() override;
116  std::shared_ptr<Scene> loadScene(
117  std::string sceneString,
118  bool rebuildScene=false
119  );
127  void loadSurveyCore(
128  tinyxml2::XMLElement *surveyNode,
129  std::shared_ptr<Survey> survey
130  );
138  tinyxml2::XMLElement *surveyNode,
139  std::shared_ptr<Survey> survey
140  );
148  void loadLegs(
149  tinyxml2::XMLElement *legNodes,
150  std::shared_ptr<ScannerSettings> scannerSettings,
151  std::shared_ptr<Platform> platform,
152  std::vector<std::shared_ptr<Leg>> &legs
153  );
160  void applySceneShift(
161  tinyxml2::XMLElement *surveyNode,
162  bool const legNoiseDisabled,
163  std::shared_ptr<Survey> survey
164  );
172  tinyxml2::XMLElement *surveyNode
173  );
180  void loadPlatformNoise(
181  tinyxml2::XMLElement *surveyNode,
182  std::shared_ptr<Platform> platform
183  );
194  static void integrateSurveyAndLegs(std::shared_ptr<Survey> survey);
195 
201  static void validateSurvey(std::shared_ptr<Survey> survey);
202 };
Class for asset loading from XML file.
Definition: XmlAssetsLoader.h:28
std::string assetsDir
Assets directory.
Definition: XmlAssetsLoader.h:48
Survey loader from XML.
Definition: XmlSurveyLoader.h:21
void loadLegs(tinyxml2::XMLElement *legNodes, std::shared_ptr< ScannerSettings > scannerSettings, std::shared_ptr< Platform > platform, std::vector< std::shared_ptr< Leg >> &legs)
Load all legs defining the survey.
Definition: XmlSurveyLoader.cpp:326
int lastLegSerialId
Serial identifier for last created leg. It is initialized as -1, so the first leg has 0 as serial id.
Definition: XmlSurveyLoader.h:34
static void integrateSurveyAndLegs(std::shared_ptr< Survey > survey)
Integrating survey and legs means fitting survey attributes from legs and leg attributes from survey ...
Definition: XmlSurveyLoader.cpp:574
XmlSurveyLoader(std::string &filePath, std::string &assetsDir)
XML survey loader constructor.
Definition: XmlSurveyLoader.h:44
void applySceneShift(tinyxml2::XMLElement *surveyNode, bool const legNoiseDisabled, std::shared_ptr< Survey > survey)
Apply scene geometry shift to platform waypoints.
Definition: XmlSurveyLoader.cpp:458
void loadSurveyCore(tinyxml2::XMLElement *surveyNode, std::shared_ptr< Survey > survey)
Load the core components of the survey. It is, its name, the source file path, the scanner and the pl...
Definition: XmlSurveyLoader.cpp:242
std::shared_ptr< Survey > load(bool legNoiseDisabled=false, bool rebuildScene=false)
Load a full survey from XML.
Definition: XmlSurveyLoader.cpp:29
std::shared_ptr< Scene > loadScene(std::string sceneString, bool rebuildScene=false)
Load scene from XML.
Definition: XmlSurveyLoader.cpp:180
static void validateSurvey(std::shared_ptr< Survey > survey)
Validate given survey is free from inconsistencies. Otherwise, proper logging and forced exit (if nee...
Definition: XmlSurveyLoader.cpp:608
void handleCoreOverloading(tinyxml2::XMLElement *surveyNode, std::shared_ptr< Survey > survey)
Handle overloading of survey's core components.
Definition: XmlSurveyLoader.cpp:289
std::shared_ptr< Leg > createLegFromXML(tinyxml2::XMLElement *legNode, std::unordered_set< std::string > *scannerFields, std::unordered_set< std::string > *platformFields)
Create a leg from a XML element/node.
Definition: XmlSurveyLoader.cpp:111
void reinitLoader() override
Call the reinitLoader from XmlAssetsLoader and then also assure that the map of scanning strips is em...
Definition: XmlSurveyLoader.cpp:175
static void configureDefaultRandomnessGenerator(tinyxml2::XMLElement *surveyNode)
Configure the default randomness generador. If a seed was specified through XML survey node,...
Definition: XmlSurveyLoader.cpp:524
std::shared_ptr< Survey > createSurveyFromXml(tinyxml2::XMLElement *surveyNode, bool legNoiseDisabled=false, bool rebuildScene=false)
Create a survey form a XML element/node.
Definition: XmlSurveyLoader.cpp:52
std::unordered_map< std::string, std::shared_ptr< ScanningStrip > > strips
Map of scanning strips.
Definition: XmlSurveyLoader.h:29
void loadPlatformNoise(tinyxml2::XMLElement *surveyNode, std::shared_ptr< Platform > platform)
Load plataform noise, overriding what is specified in platform.xml if necessary.
Definition: XmlSurveyLoader.cpp:541