Helios++
Helios software for LiDAR simulations
DirectMeasurementWriteStrategy.h
1 #pragma once
2 
3 #include <filems/write/strategies/WriteStrategy.h>
4 #include <scanner/Measurement.h>
5 
6 #include <glm/glm.hpp>
7 
8 #include <fstream>
9 #include <sstream>
10 
11 namespace helios { namespace filems{
12 
23  public WriteStrategy<Measurement const &, glm::dvec3 const &>
24 {
25 protected:
26  // *** ATTRIBUTES *** //
27  // ******************** //
31  std::ofstream &ofs;
32 
33 public:
34  // *** CONSTRUCTION / DESTRUCTION *** //
35  // ************************************ //
40  DirectMeasurementWriteStrategy(std::ofstream &ofs) : ofs(ofs) {}
41  virtual ~DirectMeasurementWriteStrategy() {}
42 
43  // *** WRITE STRATEGY INTERFACE *** //
44  // ********************************* //
51  void write(Measurement const &m, glm::dvec3 const & shift) override{
52  ofs << measurementToString(m, shift);
53  }
54 
55 protected:
56  // *** UTILS *** //
57  // *************** //
64  virtual std::string measurementToString(
65  Measurement const &m,
66  glm::dvec3 const & shift
67  ){
68  glm::dvec3 const shifted = m.position + shift;
69  std::stringstream ss;
70  ss << std::setprecision(4) << std::fixed;
71  ss << shifted.x << " "
72  << shifted.y << " "
73  << shifted.z << " "
74  << m.intensity << " "
75  << m.echo_width << " "
76  << m.returnNumber << " "
77  << m.pulseReturnNumber << " "
78  << m.fullwaveIndex << " "
79  << m.hitObjectId << " "
80  << m.classification << " "
81  << std::setprecision(9) << std::fixed
82  << m.gpsTime / 1000000000.0 << std::endl;
83  return ss.str();
84  }
85 };
86 
87 }}
Class representing a measurement.
Definition: Measurement.h:13
int pulseReturnNumber
Pulse return number.
Definition: Measurement.h:61
std::string hitObjectId
ID of hit object.
Definition: Measurement.h:29
int fullwaveIndex
Full wave index.
Definition: Measurement.h:65
double gpsTime
Measurement GPS time.
Definition: Measurement.h:73
double intensity
Point intensity.
Definition: Measurement.h:49
double echo_width
Echo width.
Definition: Measurement.h:53
int returnNumber
Measurement return number.
Definition: Measurement.h:57
int classification
Point class.
Definition: Measurement.h:69
glm::dvec3 position
Definition: Measurement.h:33
Concrete class specializing WriteStrategy to directly write measurements to a file.
Definition: DirectMeasurementWriteStrategy.h:24
void write(Measurement const &m, glm::dvec3 const &shift) override
Write measurement to file.
Definition: DirectMeasurementWriteStrategy.h:51
virtual std::string measurementToString(Measurement const &m, glm::dvec3 const &shift)
Build a string from measurement data.
Definition: DirectMeasurementWriteStrategy.h:64
std::ofstream & ofs
The output file stream to do the writing.
Definition: DirectMeasurementWriteStrategy.h:31
DirectMeasurementWriteStrategy(std::ofstream &ofs)
Default constructor for direct measurement write strategy.
Definition: DirectMeasurementWriteStrategy.h:40
Interface that must be implemented by any class which supports write implementations for file writers...
Definition: WriteStrategy.h:14