9 #include <unordered_set>
26 std::string
id =
"#nullid#";
108 if (other ==
nullptr)
return;
110 this->
id = other->
id;
112 this->active = other->
active;
140 std::shared_ptr<ScannerSettings> cherries,
141 std::unordered_set<std::string>
const &fields,
142 std::unordered_set<std::string>
const *templateFields=
nullptr
145 std::shared_ptr<ScannerSettings> settings = \
146 std::make_shared<ScannerSettings>(
this);
147 std::function<bool(std::string
const&)> hasCherry = [&] (
148 std::string
const &fieldName
150 return fields.find(fieldName) != fields.end();
153 if(hasCherry(
"baseTemplate") && cherries->baseTemplate !=
nullptr){
154 std::shared_ptr<ScannerSettings> tmpTemplate = \
155 cherries->baseTemplate->baseTemplate;
156 cherries->baseTemplate->baseTemplate =
nullptr;
157 settings =
cherryPick(cherries->baseTemplate, *templateFields);
158 cherries->baseTemplate->baseTemplate = tmpTemplate;
159 settings->baseTemplate = cherries->baseTemplate;
161 if(hasCherry(
"active")) settings->active = cherries->active;
162 if(hasCherry(
"headRotatePerSec_rad"))
163 settings->headRotatePerSec_rad = cherries->headRotatePerSec_rad;
164 if(hasCherry(
"headRotateStart_rad"))
165 settings->headRotateStart_rad = cherries->headRotateStart_rad;
166 if(hasCherry(
"headRotateStop_rad"))
167 settings->headRotateStop_rad = cherries->headRotateStop_rad;
168 if(hasCherry(
"pulseFreq_Hz"))
169 settings->pulseFreq_Hz = cherries->pulseFreq_Hz;
170 if(hasCherry(
"scanAngle_rad"))
171 settings->scanAngle_rad = cherries->scanAngle_rad;
172 if(hasCherry(
"verticalAngleMin_rad"))
173 settings->verticalAngleMin_rad = cherries->verticalAngleMin_rad;
174 if(hasCherry(
"verticalAngleMax_rad"))
175 settings->verticalAngleMax_rad = cherries->verticalAngleMax_rad;
176 if(hasCherry(
"scanFreq_Hz"))
177 settings->scanFreq_Hz = cherries->scanFreq_Hz;
178 if(hasCherry(
"beamDivAngle"))
179 settings->beamDivAngle = cherries->beamDivAngle;
180 if(hasCherry(
"trajectoryTimeInterval"))
181 settings->trajectoryTimeInterval=cherries->trajectoryTimeInterval;
182 if(hasCherry(
"verticalResolution_rad"))
183 settings->verticalResolution_rad=cherries->verticalResolution_rad;
184 if(hasCherry(
"horizontalResolution_rad")) {
185 settings->horizontalResolution_rad =
186 cherries->horizontalResolution_rad;
248 return verticalResolution_rad == 0 &&
259 std::stringstream ss;
260 ss <<
"ScannerSettings \"" <<
id <<
"\":\n";
262 ss <<
"\ttemplate.id = \"" <<
baseTemplate->id <<
"\"\n"
263 <<
"\ttemplate.active = " <<
baseTemplate->active <<
"\n"
264 <<
"\ttemplate.headRotatePerSec_rad = "
266 <<
"\ttemplate.headRotateStart_rad = "
268 <<
"\ttemplate.headRotateStop_rad = "
270 <<
"\ttemplate.pulseFreq_Hz = "
272 <<
"\ttemplate.scanAngle_rad = "
274 <<
"\ttemplate.verticalAngleMin_rad = "
276 <<
"\ttemplate.verticalAngleMax_rad = "
278 <<
"\ttemplate.scanFreq_Hz = "
280 <<
"\ttemplate.beamDivAngle = "
282 <<
"\ttemplate.trajectoryTimeInterval = "
286 ss <<
"active = " <<
active <<
"\n"
Base class for all assets.
Definition: Asset.h:10
Scanner settings class.
Definition: ScannerSettings.h:16
double scanAngle_rad
Scan angle (radians)
Definition: ScannerSettings.h:58
std::string id
The ID for this scanner settings. It does not make sense for all scanner settings,...
Definition: ScannerSettings.h:26
ScannerSettings & getTemplate()
Obtain template by reference.
Definition: ScannerSettings.h:239
double headRotateStop_rad
Ending angle (radians) for the scanner head.
Definition: ScannerSettings.h:50
double horizontalResolution_rad
Specify the horizontal resolution to be used.
Definition: ScannerSettings.h:94
virtual std::string toString() const
Obtain the string representation of the scanner settings.
Definition: ScannerSettings.h:258
int pulseFreq_Hz
Pulse frequency (hertz)
Definition: ScannerSettings.h:54
ScannerSettings(ScannerSettings *other)
Copy from pointer constructor.
Definition: ScannerSettings.h:107
void fitToResolution(double const scanAngleMax_rad)
Update the settings to fit the specified resolution.
Definition: ScannerSettings.h:216
double verticalAngleMax_rad
Maximum vertical angle (radians)
Definition: ScannerSettings.h:66
double headRotateStart_rad
Starting angle (radians) for the scanner head.
Definition: ScannerSettings.h:46
double beamDivAngle
Beam divergence angle (radians)
Definition: ScannerSettings.h:74
bool hasDefaultResolution()
Check whether the scanner settings' vertical and horizontal resolutions have the default values (disa...
Definition: ScannerSettings.h:247
double verticalAngleMin_rad
Minimum vertical angle (radians)
Definition: ScannerSettings.h:62
std::shared_ptr< ScannerSettings > cherryPick(std::shared_ptr< ScannerSettings > cherries, std::unordered_set< std::string > const &fields, std::unordered_set< std::string > const *templateFields=nullptr)
Build a new scanner settings which by default has the same values than caller scanner settings (this)...
Definition: ScannerSettings.h:139
bool active
Flag to specify if scanner is active (true) or not (false)
Definition: ScannerSettings.h:38
double headRotatePerSec_rad
Amount of rotation (radians) per second for the scanner head.
Definition: ScannerSettings.h:42
ScannerSettings()=default
Scanner settings default constructor.
friend std::ostream & operator<<(std::ostream &out, const ScannerSettings &settings)
Overload of << operator for output streams.
Definition: ScannerSettings.h:305
double verticalResolution_rad
Specify the vertical resolution to be used. By default, vertical and horizontal resolutions are whic...
Definition: ScannerSettings.h:89
std::shared_ptr< ScannerSettings > baseTemplate
Template defining default values which were used to build the ScannerSettings object.
Definition: ScannerSettings.h:31
double scanFreq_Hz
Scanning frequency (hertz)
Definition: ScannerSettings.h:70
double trajectoryTimeInterval
Time interval between trajectory recollections (seconds)
Definition: ScannerSettings.h:78
bool hasTemplate()
Check if this ScannerSettings has an associated template (true) or not (false)
Definition: ScannerSettings.h:232