Helios++
Helios software for LiDAR simulations
XmlAssetsLoader Class Reference

Class for asset loading from XML file. More...

#include <XmlAssetsLoader.h>

Inheritance diagram for XmlAssetsLoader:
Collaboration diagram for XmlAssetsLoader:

Public Member Functions

 XmlAssetsLoader (std::string &filePath, std::string &assetsDir)
 Build a XmlAssetsLoader for given XML file and assets directory. More...
 
std::shared_ptr< AssetgetAssetById (std::string type, std::string id, void *extraOutput=nullptr)
 Get asset by its identifier. More...
 
std::shared_ptr< AssetgetAssetByLocation (std::string type, std::string location, void *extraOutput=nullptr)
 Get asset by location. More...
 
std::shared_ptr< AssetcreateAssetFromXml (std::string type, tinyxml2::XMLElement *assetNode, void *extraOutput=nullptr)
 Create an asset from given XML element (node) More...
 
std::shared_ptr< AssetcreateProceduralAssetFromXml (std::string const &type, std::string const &id, void *extraOutput=nullptr)
 Like XmlAssetsLoader::createAssetFromXml but creating the asset procedurally instead of simply loading it. More...
 
std::shared_ptr< PlatformcreatePlatformFromXml (tinyxml2::XMLElement *platformNode)
 Create a platform from given XML element (node) More...
 
std::shared_ptr< PlatformSettingscreatePlatformSettingsFromXml (tinyxml2::XMLElement *node, std::unordered_set< std::string > *fields=nullptr)
 Create platform settings from given XML element (node) More...
 
std::shared_ptr< PlatformprocedurallyCreatePlatformFromXml (string const &type, string const &id)
 Procedurally create the platform from given XML specification. More...
 
std::shared_ptr< PlatformcreateInterpolatedMovingPlatform ()
 Procedurally create an InterpolatedMovingPlatform. More...
 
std::shared_ptr< ScannercreateScannerFromXml (tinyxml2::XMLElement *scannerNode)
 Create scanner from given XML element (node) More...
 
std::shared_ptr< AbstractBeamDeflectorcreateBeamDeflectorFromXml (tinyxml2::XMLElement *scannerNode)
 Create a beam deflector from given XML element (node) More...
 
std::shared_ptr< AbstractDetectorcreateDetectorFromXml (tinyxml2::XMLElement *scannerNode, std::shared_ptr< Scanner > scanner)
 Create a pulse detector from given XML element (node) More...
 
std::shared_ptr< ScannerHeadcreateScannerHeadFromXml (tinyxml2::XMLElement *scannerNode)
 Create a scanner head from given XML element (node) More...
 
std::shared_ptr< ScannerSettingscreateScannerSettingsFromXml (tinyxml2::XMLElement *node, std::unordered_set< std::string > *fields=nullptr)
 Create scanner settings from given XML element (node) More...
 
std::shared_ptr< FWFSettingscreateFWFSettingsFromXml (tinyxml2::XMLElement *node, std::shared_ptr< FWFSettings > settings=nullptr)
 Create FWF settings from given XML element (node) More...
 
std::shared_ptr< TrajectorySettingscreateTrajectorySettingsFromXml (tinyxml2::XMLElement *legNode, std::shared_ptr< TrajectorySettings > settings=nullptr)
 Create TrajectorySettings from given XML element (node) More...
 
void fillScanningDevicesFromChannels (std::shared_ptr< Scanner > scanner, tinyxml2::XMLElement *scannerNode, tinyxml2::XMLElement *channels, std::shared_ptr< AbstractBeamDeflector > deflec, std::shared_ptr< AbstractDetector > detec, std::shared_ptr< ScannerHead > scanHead, std::shared_ptr< FWFSettings > fwfSettings)
 Fill vector of scanning devices with channel data. More...
 

Static Public Member Functions

static bool isProceduralAsset (std::string const &type, std::string const &id)
 Check whether the given asset is a procedural asset or not. More...
 

Public Attributes

XmlSceneLoader sceneLoader
 The scene loader. It is used to load scenes from XML files.
 
tinyxml2::XMLDocument doc
 XML file through tinyxml2 library.
 

Protected Member Functions

virtual void reinitLoader ()
 Reinitialize the loader so maps with scanner fields and scanner templates and their fields are empty.
 
void makeDefaultTemplates ()
 
void trackNonDefaultScannerSettings (std::shared_ptr< ScannerSettings > base, std::shared_ptr< ScannerSettings > ref, std::string const defaultTemplateId, std::unordered_set< std::string > &fields)
 Track non default values at base. It is, those values which are in base distinct than the reference (ref) More...
 
void trackNonDefaultPlatformSettings (std::shared_ptr< PlatformSettings > base, std::shared_ptr< PlatformSettings > ref, std::string const defaultTemplateId, std::unordered_set< std::string > &fields)
 Track non default values at base. It is, those values which are in base distinct than the reference (ref) More...
 

Protected Attributes

std::string assetsDir
 Assets directory.
 
std::string xmlDocFilename = "unknown.xml"
 Name of the XML file.
 
std::string xmlDocFilePath = ""
 Path to the XML file.
 
std::shared_ptr< ScannerSettingsdefaultScannerTemplate
 The default scanner settings template.
 
std::shared_ptr< PlatformSettingsdefaultPlatformTemplate
 The default platform settings template.
 
std::unordered_map< std::string, std::shared_ptr< ScannerSettings > > scannerTemplates
 Map containing all scanner templates that were loading while building from XML file. No repetitions, each template appears only one time. More...
 
std::unordered_map< std::string, std::shared_ptr< PlatformSettings > > platformTemplates
 Map containing all platform templates that were loading while building from XML file. No repetitions, each template appears only one time. More...
 
std::unordered_map< std::string, std::unordered_set< std::string > > scannerTemplatesFields
 Map containing the set of fields that have been overloaded by each scanner template. More...
 
std::unordered_map< std::string, std::unordered_set< std::string > > platformTemplatesFields
 Map containing the set of fields that have been overloaded by each platform template. More...
 

Static Protected Attributes

static std::string const defaultScannerSettingsMsg
 The message to be shown when default value is loaded for scanner settings. More...
 
static std::string const defaultPlatformSettingsMsg
 The message to be shown when default value is loaded for platform settings. More...
 

Detailed Description

Class for asset loading from XML file.

It is the main class for XML loading. It uses both XmlSceneLoader and XmlUtils

See also
XmlSceneLoader
XmlUtils

Constructor & Destructor Documentation

◆ XmlAssetsLoader()

XmlAssetsLoader::XmlAssetsLoader ( std::string &  filePath,
std::string &  assetsDir 
)

Build a XmlAssetsLoader for given XML file and assets directory.

Parameters
filePathPath to XML File
assetsDirPath to assets directory

Member Function Documentation

◆ createAssetFromXml()

std::shared_ptr< Asset > XmlAssetsLoader::createAssetFromXml ( std::string  type,
tinyxml2::XMLElement *  assetNode,
void *  extraOutput = nullptr 
)

Create an asset from given XML element (node)

Parameters
typeAsset type
assetNodeXML element (node) containing asset data
extraOutput[out]Pointer to where extra output must be stored. If it is null, it means no extra output is required. Notice this only will be used when requested asset supports extra output
Returns
Shared pointer to created asset
See also
Asset

◆ createBeamDeflectorFromXml()

std::shared_ptr< AbstractBeamDeflector > XmlAssetsLoader::createBeamDeflectorFromXml ( tinyxml2::XMLElement *  scannerNode)

Create a beam deflector from given XML element (node)

Parameters
scannerNodeXML element (node) containing deflector data
Returns
Shared pointer to created beam deflector
See also
AbstractBeamDeflector

◆ createDetectorFromXml()

std::shared_ptr< AbstractDetector > XmlAssetsLoader::createDetectorFromXml ( tinyxml2::XMLElement *  scannerNode,
std::shared_ptr< Scanner scanner 
)

Create a pulse detector from given XML element (node)

Parameters
scannerNodeXML element (node) containing deflector data
scannerThe shared pointer to the scanner associated to the detector
Returns
Shared pointer to created detector
See also
AbstractDetector

◆ createFWFSettingsFromXml()

std::shared_ptr< FWFSettings > XmlAssetsLoader::createFWFSettingsFromXml ( tinyxml2::XMLElement *  node,
std::shared_ptr< FWFSettings settings = nullptr 
)

Create FWF settings from given XML element (node)

Parameters
nodeXML element (node) containing FWF settings data
settingsSpecify the FWFSettings instance to use as output. If nullptr is specified, then a new instance of FWFSettings is used
Returns
Shared pointer to created FWF settings
See also
FWFSettings

◆ createInterpolatedMovingPlatform()

std::shared_ptr< Platform > XmlAssetsLoader::createInterpolatedMovingPlatform ( )

◆ createPlatformFromXml()

std::shared_ptr< Platform > XmlAssetsLoader::createPlatformFromXml ( tinyxml2::XMLElement *  platformNode)

Create a platform from given XML element (node)

Parameters
platformNodeXML element (node) containing platform data
Returns
Shared pointer to created platform
See also
Platform

◆ createPlatformSettingsFromXml()

std::shared_ptr< PlatformSettings > XmlAssetsLoader::createPlatformSettingsFromXml ( tinyxml2::XMLElement *  node,
std::unordered_set< std::string > *  fields = nullptr 
)

Create platform settings from given XML element (node)

Parameters
nodeXML element (node) containing platform settings data
Returns
Shared pointer to created platform settings
See also
PlatformSettings

◆ createProceduralAssetFromXml()

std::shared_ptr< Asset > XmlAssetsLoader::createProceduralAssetFromXml ( std::string const &  type,
std::string const &  id,
void *  extraOutput = nullptr 
)

Like XmlAssetsLoader::createAssetFromXml but creating the asset procedurally instead of simply loading it.

See also
XmlAssetsLoader::createAssetFromXml
XmlAssetsLoader::isProceduralAsset

◆ createScannerFromXml()

std::shared_ptr< Scanner > XmlAssetsLoader::createScannerFromXml ( tinyxml2::XMLElement *  scannerNode)

Create scanner from given XML element (node)

Parameters
scannerNodeXML element (node) containing scanner data
Returns
Shared pointer to created scanner
See also
Scanner

◆ createScannerHeadFromXml()

std::shared_ptr< ScannerHead > XmlAssetsLoader::createScannerHeadFromXml ( tinyxml2::XMLElement *  scannerNode)

Create a scanner head from given XML element (node)

Parameters
scannerNodeXML element (node) containing scanner head data
Returns
Shared pointer to created scanner head
See also
ScannerHead

◆ createScannerSettingsFromXml()

std::shared_ptr< ScannerSettings > XmlAssetsLoader::createScannerSettingsFromXml ( tinyxml2::XMLElement *  node,
std::unordered_set< std::string > *  fields = nullptr 
)

Create scanner settings from given XML element (node)

Parameters
nodeXML element (node) containing scanner settings data
[out]fieldsWhen it is not a nullptr, names of read values will be stored here
Returns
Shared pointer to created scanner settings
See also
ScannerSettings

◆ createTrajectorySettingsFromXml()

std::shared_ptr< TrajectorySettings > XmlAssetsLoader::createTrajectorySettingsFromXml ( tinyxml2::XMLElement *  legNode,
std::shared_ptr< TrajectorySettings settings = nullptr 
)

Create TrajectorySettings from given XML element (node)

Parameters
legNodeXML element (node) containing the Leg specification to build TrajectorySettings from
settingsSpecify the TrajectorySettings instance to use as output. If nullptr is specified, then a new instance of TrajectorySettings is used
Returns
Shared pointer to created TrajectorySettings
See also
TrajectorySettings

◆ fillScanningDevicesFromChannels()

void XmlAssetsLoader::fillScanningDevicesFromChannels ( std::shared_ptr< Scanner scanner,
tinyxml2::XMLElement *  scannerNode,
tinyxml2::XMLElement *  channels,
std::shared_ptr< AbstractBeamDeflector deflec,
std::shared_ptr< AbstractDetector detec,
std::shared_ptr< ScannerHead scanHead,
std::shared_ptr< FWFSettings fwfSettings 
)

Fill vector of scanning devices with channel data.

Parameters
scannerThe multi-channel scanner to be filled
scannerNodeThe XML element representing the scanner
channelsThe channels to fill each scanning device
deflecThe base deflector for each scanning device
detecThe base detector for each scanning device
scanHeadThe base scanner head for each scanning device
fwfSettingsThe base fullwave settings for each scanning device
See also
MultiScanner

◆ getAssetById()

std::shared_ptr< Asset > XmlAssetsLoader::getAssetById ( std::string  type,
std::string  id,
void *  extraOutput = nullptr 
)

Get asset by its identifier.

Parameters
typeType of the asset
idIdentifier of the asset
extraOutput[out]Pointer to where extra output must be stored. If it is null, it means no extra output is required. Notice this only will be used when requested asset supports extra output
Returns
Shared pointer to requested asset

◆ getAssetByLocation()

std::shared_ptr< Asset > XmlAssetsLoader::getAssetByLocation ( std::string  type,
std::string  location,
void *  extraOutput = nullptr 
)

Get asset by location.

Parameters
typeType of the asset
locationLocation of the asset
extraOutput[out]Pointer to where extra output must be stored. If it is null, it means no extra output is required. Notice this only will be used when requested asset supports extra output
Returns
Shared pointer to requested asset

◆ isProceduralAsset()

bool XmlAssetsLoader::isProceduralAsset ( std::string const &  type,
std::string const &  id 
)
static

Check whether the given asset is a procedural asset or not.

A procedural asset is said to be an asset which is generated during execution. While it can be based in input data, it is not fully defined by that data. An example of procedural asset would be the InterpolatedMovingPlatform which is specified through the type "platform" and the id "interpolated"

Parameters
typeType of the asset
idIdentifier of the asset
Returns
True if the asset is a procedural one, false otherwise
See also
InterpolatedMovingPlatform

◆ makeDefaultTemplates()

void XmlAssetsLoader::makeDefaultTemplates ( )
protected

◆ procedurallyCreatePlatformFromXml()

std::shared_ptr< Platform > XmlAssetsLoader::procedurallyCreatePlatformFromXml ( string const &  type,
string const &  id 
)

Procedurally create the platform from given XML specification.

Parameters
typeAsset type
idIdentifier of the asset
Returns
Shared pointer to created platform
See also
Platform
InterpolatedMovingPlatform
XmlAssetsLoader::createInterpolatedMovingPlatform

◆ trackNonDefaultPlatformSettings()

void XmlAssetsLoader::trackNonDefaultPlatformSettings ( std::shared_ptr< PlatformSettings base,
std::shared_ptr< PlatformSettings ref,
std::string const  defaultTemplateId,
std::unordered_set< std::string > &  fields 
)
protected

Track non default values at base. It is, those values which are in base distinct than the reference (ref)

Parameters
basePlatform settings to be tracked
refReference platform settings defining default values
defaultTemplateIdThe identifier of reference/default template
fieldsWhere tracked non default values must be stored

◆ trackNonDefaultScannerSettings()

void XmlAssetsLoader::trackNonDefaultScannerSettings ( std::shared_ptr< ScannerSettings base,
std::shared_ptr< ScannerSettings ref,
std::string const  defaultTemplateId,
std::unordered_set< std::string > &  fields 
)
protected

Track non default values at base. It is, those values which are in base distinct than the reference (ref)

Parameters
baseScanner settings to be tracked
refReference scanner settings defining default values
defaultTemplateIdThe identifier of reference/default template
fieldsWhere tracked non default values must be stored

Member Data Documentation

◆ defaultPlatformSettingsMsg

std::string const XmlAssetsLoader::defaultPlatformSettingsMsg
staticprotected
Initial value:
=
"Using platform default value for attribute"

The message to be shown when default value is loaded for platform settings.

◆ defaultScannerSettingsMsg

std::string const XmlAssetsLoader::defaultScannerSettingsMsg
staticprotected
Initial value:
=
"Using scanner default value for attribute"

The message to be shown when default value is loaded for scanner settings.

◆ platformTemplates

std::unordered_map<std::string, std::shared_ptr<PlatformSettings> > XmlAssetsLoader::platformTemplates
protected

Map containing all platform templates that were loading while building from XML file. No repetitions, each template appears only one time.

The id of the template is used as the key, while the template itself is the value (PlatformSettings object)

◆ platformTemplatesFields

std::unordered_map<std::string, std::unordered_set<std::string> > XmlAssetsLoader::platformTemplatesFields
protected

Map containing the set of fields that have been overloaded by each platform template.

The id of the template is used as the key, while the set of fields itself is the value

See also
XmlAssetsLoader::platformTemplates

◆ scannerTemplates

std::unordered_map<std::string, std::shared_ptr<ScannerSettings> > XmlAssetsLoader::scannerTemplates
protected

Map containing all scanner templates that were loading while building from XML file. No repetitions, each template appears only one time.

The id of the template is used as the key, while the template itself is the value (ScannerSettings object)

◆ scannerTemplatesFields

std::unordered_map<std::string, std::unordered_set<std::string> > XmlAssetsLoader::scannerTemplatesFields
protected

Map containing the set of fields that have been overloaded by each scanner template.

The id of the template is used as the key, while the set of fields itself is the value

See also
XmlAssetsLoader::scannerTemplates

The documentation for this class was generated from the following files: