Helios++
Helios software for LiDAR simulations
LasMultiVectorialSyncFileMeasurementWriter.h
1 #pragma once
2 
3 #include <filems/write/comps/LasVectorialSyncFileMeasurementWriter.h>
4 #include <filems/write/comps/MultiLasSyncFileWriter.h>
5 
6 #include <vector>
7 #include <memory>
8 
9 namespace helios { namespace filems{
10 
11 using std::vector;
12 using std::shared_ptr;
13 using std::make_shared;
14 
28  vector<Measurement> const &,
29  glm::dvec3 const &
30  >
31 {
32 protected:
33  // *** ATTRIBUTES *** //
34  // ******************** //
41  vector<LasMeasurementWriteStrategy> lmws;
42 
43 public:
44  // *** CONSTRUCTION / DESTRUCTION *** //
45  // ************************************ //
52  vector<std::string> const &path,
53  bool const compress,
54  vector<double> const &scaleFactor,
55  vector<glm::dvec3> const &offset,
56  vector<double> const &minIntensity,
57  vector<double> const &deltaIntensity,
58  bool const createWriter = true
59  ) :
61  vector<Measurement> const &,
62  glm::dvec3 const &
63  >(
64  path,
65  compress,
66  scaleFactor,
67  offset,
68  minIntensity,
69  deltaIntensity,
70  createWriter
71  )
72  {
73  if(createWriter){
74  // Build measurement write strategies
76  // Build vectorial write strategies
77  // WARNING : It must be done after building the measurement write
78  // strategies to be wrapped by the vectorial strategy. If the
79  // vector of measurement strategies is modified, then the
80  // references in the vectorial strategy objects will be
81  // inconsistent.
83  }
84  }
85 
86  // *** B U I L D *** //
87  // ********************* //
93  // Build measurement write strategies
94  size_t const nStreams = path.size();
95  for(size_t i = 0 ; i < nStreams ; ++i){
96  lmws.emplace_back(LasMeasurementWriteStrategy(
97  *lw[i],
98  lws[i].lp,
99  lws[i].scaleFactorInverse,
100  lws[i].offset,
101  lws[i].minIntensity,
102  lws[i].maxIntensity,
103  lws[i].intensityCoefficient,
104  lws[i].ewAttrStart,
105  lws[i].fwiAttrStart,
106  lws[i].hoiAttrStart,
107  lws[i].ampAttrStart
108  ));
109  }
110  }
119  // Build vectorial write strategies
120  size_t const nStreams = path.size();
121  for(size_t i = 0 ; i < nStreams ; ++i){
122  writeStrategy.push_back(make_shared<VectorialWriteStrategy<
123  Measurement,
124  glm::dvec3 const &
125  >>(lmws[i]));
126  }
127  }
128 
129  // *** W R I T E *** //
130  // ******************* //
135  vector<Measurement> const &measurements,
136  glm::dvec3 const &offset
137  ) override {return measurements[0].devIdx;}
138 };
139 
140 }}
Class representing a measurement.
Definition: Measurement.h:13
Concrete class specializing WriteStrategy to directly write measurements to a file with LAS format.
Definition: LasMeasurementWriteStrategy.h:23
Concrete class specializing MultiLasSyncFileWriter to write vectors of measurements to LAS files supp...
Definition: LasMultiVectorialSyncFileMeasurementWriter.h:31
void buildVectorialWriteStrategies()
Build the vectorial write strategies for the LAS multi vectorial synchronous file measurement writer.
Definition: LasMultiVectorialSyncFileMeasurementWriter.h:118
vector< LasMeasurementWriteStrategy > lmws
The measurement write strategies that are wrapped by the main write strategies in a vectorial fashion...
Definition: LasMultiVectorialSyncFileMeasurementWriter.h:41
LasMultiVectorialSyncFileMeasurementWriter(vector< std::string > const &path, bool const compress, vector< double > const &scaleFactor, vector< glm::dvec3 > const &offset, vector< double > const &minIntensity, vector< double > const &deltaIntensity, bool const createWriter=true)
LAS multi-vectorial synchronous file measurement vector writer constructor.
Definition: LasMultiVectorialSyncFileMeasurementWriter.h:51
void buildMeasurementWriteStrategies()
Build the measurement write strategies for the LAS multi vectorial synchronous file measurement write...
Definition: LasMultiVectorialSyncFileMeasurementWriter.h:92
size_t indexFromWriteArgs(vector< Measurement > const &measurements, glm::dvec3 const &offset) override
Definition: LasMultiVectorialSyncFileMeasurementWriter.h:134
Abstract specialization of MultiSyncFileWriter to write output in LAS format.
Definition: MultiLasSyncFileWriter.h:24
vector< shared_ptr< LASwriter > > lw
The LASwriter used to write to each LAS file.
Definition: MultiLasSyncFileWriter.h:35
vector< LasWriterSpec > lws
The specifications defining each LAS writer.
Definition: MultiLasSyncFileWriter.h:31
std::vector< std::string > path
Paths to the files to be written.
Definition: MultiSyncFileWriter.h:28
std::vector< std::shared_ptr< WriteStrategy< WriteArgs ... > > > writeStrategy
The write strategies specifying how to write data, one per file.
Definition: MultiSyncFileWriter.h:37
Concrete class specializing WriteStrategy to make any other write strategy operate over a vector.
Definition: VectorialWriteStrategy.h:23