Helios++
Helios software for LiDAR simulations
MultiVectorialMeasurementWriter.h
1 #pragma once
2 
3 #include <filems/write/core/VectorialMeasurementWriter.h>
4 #include <filems/util/FileUtils.h>
5 
6 
7 namespace helios { namespace filems{
8 
9 using std::shared_ptr;
10 using std::vector;
11 
19 public:
20  // *** CONSTRUCTION / DESTRUCTION *** //
21  // ************************************ //
27  {}
28  virtual ~MultiVectorialMeasurementWriter() = default;
29 
30  // *** M E T H O D S *** //
31  // ************************* //
36  shared_ptr<
37  SyncFileWriter<vector<Measurement> const &, glm::dvec3 const &>
39  WriterType const &type,
40  string const &path,
41  bool const zipOutput,
42  double const lasScale,
43  glm::dvec3 shift,
44  double const minIntensity,
45  double const deltaIntensity
46  ) const override{
47  // Extract path without extension, and the extension itself
48  std::string ext;
49  std::string pathNonExt;
51  path, ext, pathNonExt
52  );
53  // Build vectors of data to build multi vectorial writer
54  vector<string> paths;
55  vector<double> scaleFactors;
56  vector<glm::dvec3> shifts;
57  vector<double> minIntensities;
58  vector<double> deltaIntensities;
59  size_t const nDevs = scanner->getNumDevices();
60  for(size_t i = 0 ; i < nDevs ; ++i){
61  paths.push_back(FileUtils::craftPathWithSuffix(
62  pathNonExt, "_dev"+scanner->getDeviceId(i), ext
63  ));
64  scaleFactors.push_back(lasScale);
65  shifts.push_back(shift);
66  minIntensities.push_back(0.0);
67  deltaIntensities.push_back(1000000.0);
68  }
69  // Build and return the multi vectorial writer
71  type, // Writer type
72  paths, // Output path
73  zipOutput, // Zip flag
74  scaleFactors, // Scale factor
75  shifts, // Offset
76  minIntensities, // Min intensity
77  deltaIntensities // Delta intensity
78  );
79  }
80 
81 
82 };
83 
84 }}
static void extractExtensionAndPathWithoutExtension(std::string const &path, std::string &ext, std::string &pathNonExt)
Extract the extension and the path without extension from given path with extension.
Definition: FileUtils.cpp:118
static std::string craftPathWithSuffix(std::string const &pathNonExt, std::string const &suffix, std::string const &ext)
Build a string such that: builtString = pathNonExt + suffix + ext.
Definition: FileUtils.cpp:128
glm::dvec3 shift
The pointer to the shift vector to be applied to measurements.
Definition: BaseMeasurementWriter.h:54
shared_ptr< Scanner > scanner
The scanner that generates the measurements to be written.
Definition: BaseMeasurementWriter.h:49
double lasScale
Scale factor specification to be used when LAS output format specified.
Definition: HeliosWriter.h:56
bool zipOutput
Flag specifying if detector output must be zipped (true) or not (false)
Definition: HeliosWriter.h:50
Common implementation for any vectorial measurement writer that supports concurrent multiple output s...
Definition: MultiVectorialMeasurementWriter.h:18
MultiVectorialMeasurementWriter()
Default constructor for multi vectorial measurement writer.
Definition: MultiVectorialMeasurementWriter.h:25
shared_ptr< SyncFileWriter< vector< Measurement > const &, glm::dvec3 const & > > makeWriter(WriterType const &type, string const &path, bool const zipOutput, double const lasScale, glm::dvec3 shift, double const minIntensity, double const deltaIntensity) const override
Make a multi vectorial measurement SyncFileWriter.
Definition: MultiVectorialMeasurementWriter.h:38
static shared_ptr< SyncFileWriter< vector< Measurement > const &, glm::dvec3 const & >> makeMultiVectorialWriter(WriterType const type, vector< string > const &path, bool const compress, vector< double > const &scaleFactor, vector< glm::dvec3 > const &offset, vector< double > const &minIntensity, vector< double > const &deltaIntensity)
Synchronous multi-stream vectorial file writer factory.
Definition: SyncFileMeasurementWriterFactory.h:189
Abstract class defining common behavior for all synchronous file writers.
Definition: SyncFileWriter.h:18
Common implementation for any vectorial measurement writer.
Definition: VectorialMeasurementWriter.h:23