Helios++
Helios software for LiDAR simulations
SimpleSyncFileWriter.h
1 #pragma once
2 
3 #include <SyncFileWriter.h>
4 #include <fstream>
5 #include "MathConverter.h"
6 
13 protected:
14  // *** ATTRIBUTES *** //
15  // ******************** //
20  std::ofstream ofs;
21 public:
22  // *** CONSTRUCTION / DESTRUCTION *** //
23  // ************************************ //
30  const std::string& path,
31  std::ios_base::openmode om = std::ios_base::app
32  ) :
33  SyncFileWriter(path)
34  {
35  // Open file for writing ...
36  ofs.open(path, om);
37  }
38 
39  // *** W R I T E *** //
40  // ******************* //
45  void _write(Measurement const &m, glm::dvec3 const & shift) override{
46  ofs << measurementToString(m, shift);
47  }
48 
56  void _write(
57  std::vector<double> const &fullwave,
58  int fullwaveIndex,
59  double minTime,
60  double maxTime,
61  glm::dvec3 const & beamOrigin,
62  glm::dvec3 const & beamDir,
63  long gpsTime
64  ) override {
65  ofs << fullwaveToString(
66  fullwave,
67  fullwaveIndex,
68  minTime,
69  maxTime,
70  beamOrigin,
71  beamDir,
72  gpsTime
73  );
74  }
75 
84  void _write(Trajectory const &t) override {
85  ofs << trajectoryToString(t);
86  }
87 
88  // *** F I N I S H *** //
89  // ********************* //
95  void finish() override {};
96 
97 protected:
104  virtual std::string measurementToString(
105  Measurement const &m,
106  glm::dvec3 const & shift
107  ){
108  glm::dvec3 shifted = m.position + shift;
109  std::stringstream ss;
110  ss << std::setprecision(4) << std::fixed;
111  ss << shifted.x << " "
112  << shifted.y << " "
113  << shifted.z << " "
114  << m.intensity << " "
115  << m.echo_width << " "
116  << m.returnNumber << " "
117  << m.pulseReturnNumber << " "
118  << m.fullwaveIndex << " "
119  << m.hitObjectId << " "
120  << m.classification << " "
121  << std::setprecision(4) << std::fixed
122  << ((double)m.gpsTime) / 1000.0 << std::endl;
123  return ss.str();
124  }
125 
130  virtual std::string trajectoryToString(Trajectory const &t){
131  std::stringstream ss;
132  ss << std::setprecision(4) << std::fixed;
133  ss << t.position.x << " "
134  << t.position.y << " "
135  << t.position.z << " "
136  << ((double)t.gpsTime) / 1000.0 << " "
139  << MathConverter::radiansToDegrees(t.yaw) << std::endl;
140  return ss.str();
141  }
142 
147  virtual std::string fullwaveToString(
148  std::vector<double> const &fullwave,
149  int fullwaveIndex,
150  double minTime,
151  double maxTime,
152  glm::dvec3 const & beamOrigin,
153  glm::dvec3 const & beamDir,
154  long gpsTime
155  ){
156  std::stringstream ss;
157  ss << std::setprecision(4) << std::fixed;
158  ss << fullwaveIndex << " "
159  << beamOrigin.x << " "
160  << beamOrigin.y << " "
161  << beamOrigin.z << " "
162  << beamDir.x << " "
163  << beamDir.y << " "
164  << beamDir.z << " "
165  << minTime << " "
166  << maxTime << " "
167  << ((double)gpsTime)/1000.0 << " ";
168 
169  std::copy(
170  fullwave.begin(),
171  fullwave.end()-1,
172  std::ostream_iterator<double>(ss, " ")
173  );
174  ss << fullwave.back();
175  ss << "\n";
176  return ss.str();
177  }
178 };
void finish() override
SimpleSyncFileWriter finish method does not do nothing. The writing operations are guaranteed to be d...
Definition: SimpleSyncFileWriter.h:95
std::string hitObjectId
ID of hit object.
Definition: Measurement.h:20
long gpsTime
Measurement GPS time.
Definition: Measurement.h:64
int fullwaveIndex
Full wave index.
Definition: Measurement.h:56
glm::dvec3 position
Trajectory position/coordinates.
Definition: Trajectory.h:20
static double radiansToDegrees(double radians)
Receive radians, return degrees.
Definition: MathConverter.h:12
Class representing a concrete trajectory definition.
Definition: Trajectory.h:8
Class representing a measurement.
Definition: Measurement.h:12
SyncFileWriter implementation for simple text format.
Definition: SimpleSyncFileWriter.h:12
std::string path
Path to file to be written.
Definition: SyncFileWriter.h:19
int pulseReturnNumber
Pulse return number.
Definition: Measurement.h:52
SimpleSyncFileWriter(const std::string &path, std::ios_base::openmode om=std::ios_base::app)
Simple synchronous file writer constructor.
Definition: SimpleSyncFileWriter.h:29
void _write(Trajectory const &t) override
Write trajectory to compressed file.
Definition: SimpleSyncFileWriter.h:84
double roll
Roll angle in radians.
Definition: Trajectory.h:24
double pitch
Pitch angle in radians.
Definition: Trajectory.h:28
glm::dvec3 position
Definition: Measurement.h:24
int classification
Point class.
Definition: Measurement.h:60
double intensity
Point intensity.
Definition: Measurement.h:40
double echo_width
Echo width.
Definition: Measurement.h:44
long gpsTime
GPS time in milliseconds identifying the moment at which trajectory is registered.
Definition: Trajectory.h:16
void _write(Measurement const &m, glm::dvec3 const &shift) override
Write measurement to text file.
Definition: SimpleSyncFileWriter.h:45
int returnNumber
Measurement return number.
Definition: Measurement.h:48
void _write(std::vector< double > const &fullwave, int fullwaveIndex, double minTime, double maxTime, glm::dvec3 const &beamOrigin, glm::dvec3 const &beamDir, long gpsTime) override
Write fullwave to text file.
Definition: SimpleSyncFileWriter.h:56
std::ofstream ofs
Output file stream to be used by the simple synchronous file writer.
Definition: SimpleSyncFileWriter.h:20
virtual std::string fullwaveToString(std::vector< double > const &fullwave, int fullwaveIndex, double minTime, double maxTime, glm::dvec3 const &beamOrigin, glm::dvec3 const &beamDir, long gpsTime)
Build a string from fullwave data.
Definition: SimpleSyncFileWriter.h:147
Abstract class defining common behavior for all synchronous file writers.
Definition: SyncFileWriter.h:14
virtual std::string trajectoryToString(Trajectory const &t)
Build a string from trajectory data.
Definition: SimpleSyncFileWriter.h:130
virtual std::string measurementToString(Measurement const &m, glm::dvec3 const &shift)
Build a string from measurement data.
Definition: SimpleSyncFileWriter.h:104
double yaw
Yaw angle in radians.
Definition: Trajectory.h:32