Helios++
Helios software for LiDAR simulations
VoxelFileParser.h
1 #pragma once
2 
3 #include <string>
4 #include <vector>
5 #include <DetailedVoxel.h>
6 #include <iostream>
7 #include <fstream>
8 #include <logging.hpp>
9 #include <HeliosException.h>
10 
20 protected:
21  // *** CONSTANTS *** //
22  // ******************* //
26  static size_t constexpr N_BLANK_CHARACTERS = 4;
34  static char constexpr SPEC_CHARACTER = '#';
35 
36 public:
37  // *** CONSTRUCTOR *** //
38  // ********************* //
43 
44  // *** P A R S E *** //
45  // ******************* //
68  std::vector<std::shared_ptr<DetailedVoxel>> parseDetailed(
69  std::string const & path,
70  size_t numHeaderLines=2,
71  bool const exactFormat = true,
72  bool const discardNullPad = false,
73  std::string const separator = " "
74  );
75 
82  std::vector<DetailedVoxel *> bruteParseDetailed(
83  std::string const & path,
84  size_t numHeaderLines=2,
85  bool const exactFormat = true,
86  bool const discardNullPad = false,
87  std::string const separator = " "
88  );
89 
90 protected:
91  // *** PARSING FUNCTIONS *** //
92  // *************************** //
98  void loadFile(std::vector<std::string> &lines, std::string const & path);
111  void cleanLines(
112  std::vector<std::string> &lines,
113  size_t const numHeaderLines,
114  bool &minCornerXFound,
115  double &minCornerX,
116  bool &minCornerYFound,
117  double &minCornerY,
118  bool &minCornerZFound,
119  double &minCornerZ,
120  bool &maxCornerXFound,
121  double &maxCornerX,
122  bool &maxCornerYFound,
123  double &maxCornerY,
124  bool &maxCornerZFound,
125  double &maxCornerZ,
126  bool &splitXFound,
127  size_t &splitX,
128  bool &splitYFound,
129  size_t &splitY,
130  bool &splitZFound,
131  size_t &splitZ,
132  double &voxelSize,
133  double &maxPad
134  );
135 
146  bool isBlankLine(std::string const &line);
157  bool handleSpecLine(
158  std::string const &line,
159  bool &minCornerXFound,
160  double &minCornerX,
161  bool &minCornerYFound,
162  double &minCornerY,
163  bool &minCornerZFound,
164  double &minCornerZ,
165  bool &maxCornerXFound,
166  double &maxCornerX,
167  bool &maxCornerYFound,
168  double &maxCornerY,
169  bool &maxCornerZFound,
170  double &maxCornerZ,
171  bool &splitXFound,
172  size_t &splitX,
173  bool &splitYFound,
174  size_t &splitY,
175  bool &splitZFound,
176  size_t &splitZ,
177  double &voxelSize,
178  double &maxPad
179  );
180 
235  void handleSpec(
236  std::string const &line,
237  bool &minCornerXFound,
238  double &minCornerX,
239  bool &minCornerYFound,
240  double &minCornerY,
241  bool &minCornerZFound,
242  double &minCornerZ,
243  bool &maxCornerXFound,
244  double &maxCornerX,
245  bool &maxCornerYFound,
246  double &maxCornerY,
247  bool &maxCornerZFound,
248  double &maxCornerZ,
249  bool &splitXFound,
250  size_t &splitX,
251  bool &splitYFound,
252  size_t &splitY,
253  bool &splitZFound,
254  size_t &splitZ,
255  double &voxelSize,
256  double &maxPad
257  );
258 
266  void cleanLine(std::string &line);
267 
273  void removeHeaderLines(
274  std::vector<std::string> &lines,
275  size_t numHeaderLines
276  );
277 
282  void validateDetailed(
283  bool minCornerXFound,
284  bool minCornerYFound,
285  bool minCornerZFound,
286  bool maxCornerXFound,
287  bool maxCornerYFound,
288  bool maxCornerZFound,
289  bool splitXFound,
290  bool splitYFound,
291  bool splitZFound
292  );
293 
306  std::string &line,
307  std::string const separator,
308  bool const exactFormat,
309  bool const discardNullPad,
310  char const *format1,
311  char const *format2,
312  char const *format3,
313  double minCornerX,
314  double minCornerY,
315  double minCornerZ,
316  double maxCornerX,
317  double maxCornerY,
318  double maxCornerZ,
319  double voxelSize,
320  double voxelHalfSize,
321  double maxPad
322  );
323 
324 };
Class which extends Voxel to support AMAPVox format with extra features.
Definition: DetailedVoxel.h:15
Class for parsing voxel files.
Definition: VoxelFileParser.h:19
static char const BLANK_CHARACTERS[N_BLANK_CHARACTERS]
Characters considered "blank".
Definition: VoxelFileParser.h:30
void cleanLines(std::vector< std::string > &lines, size_t const numHeaderLines, bool &minCornerXFound, double &minCornerX, bool &minCornerYFound, double &minCornerY, bool &minCornerZFound, double &minCornerZ, bool &maxCornerXFound, double &maxCornerX, bool &maxCornerYFound, double &maxCornerY, bool &maxCornerZFound, double &maxCornerZ, bool &splitXFound, size_t &splitX, bool &splitYFound, size_t &splitY, bool &splitZFound, size_t &splitZ, double &voxelSize, double &maxPad)
Clean unnecessary lines.
Definition: VoxelFileParser.cpp:120
void loadFile(std::vector< std::string > &lines, std::string const &path)
Loads the file at given path.
Definition: VoxelFileParser.cpp:99
static constexpr size_t N_BLANK_CHARACTERS
Nummber of blank characters.
Definition: VoxelFileParser.h:26
DetailedVoxel * parseDetailedVoxelLine(std::string &line, std::string const separator, bool const exactFormat, bool const discardNullPad, char const *format1, char const *format2, char const *format3, double minCornerX, double minCornerY, double minCornerZ, double maxCornerX, double maxCornerY, double maxCornerZ, double voxelSize, double voxelHalfSize, double maxPad)
Parse the DetailedVoxel specified in given line.
Definition: VoxelFileParser.cpp:456
bool handleSpecLine(std::string const &line, bool &minCornerXFound, double &minCornerX, bool &minCornerYFound, double &minCornerY, bool &minCornerZFound, double &minCornerZ, bool &maxCornerXFound, double &maxCornerX, bool &maxCornerYFound, double &maxCornerY, bool &maxCornerZFound, double &maxCornerZ, bool &splitXFound, size_t &splitX, bool &splitYFound, size_t &splitY, bool &splitZFound, size_t &splitZ, double &voxelSize, double &maxPad)
Handle line if it is an spec line. Do nothing otherwise.
Definition: VoxelFileParser.cpp:194
void validateDetailed(bool minCornerXFound, bool minCornerYFound, bool minCornerZFound, bool maxCornerXFound, bool maxCornerYFound, bool maxCornerZFound, bool splitXFound, bool splitYFound, bool splitZFound)
Check if flags are valid.
Definition: VoxelFileParser.cpp:398
void cleanLine(std::string &line)
Remove unnecessary stuff from received line.
Definition: VoxelFileParser.cpp:349
std::vector< std::shared_ptr< DetailedVoxel > > parseDetailed(std::string const &path, size_t numHeaderLines=2, bool const exactFormat=true, bool const discardNullPad=false, std::string const separator=" ")
Parse detailed voxels specified at file located at given path.
Definition: VoxelFileParser.cpp:7
void handleSpec(std::string const &line, bool &minCornerXFound, double &minCornerX, bool &minCornerYFound, double &minCornerY, bool &minCornerZFound, double &minCornerZ, bool &maxCornerXFound, double &maxCornerX, bool &maxCornerYFound, double &maxCornerY, bool &maxCornerZFound, double &maxCornerZ, bool &splitXFound, size_t &splitX, bool &splitYFound, size_t &splitY, bool &splitZFound, size_t &splitZ, double &voxelSize, double &maxPad)
Assuming received line is a spec line, handle it.
Definition: VoxelFileParser.cpp:251
VoxelFileParser()
Build a VoxelFileParser.
Definition: VoxelFileParser.h:42
std::vector< DetailedVoxel * > bruteParseDetailed(std::string const &path, size_t numHeaderLines=2, bool const exactFormat=true, bool const discardNullPad=false, std::string const separator=" ")
Like parseDetailed but returns a vector a normla pointers instead of shared pointers.
Definition: VoxelFileParser.cpp:24
static constexpr char SPEC_CHARACTER
Character which starts spec lines.
Definition: VoxelFileParser.h:34
void removeHeaderLines(std::vector< std::string > &lines, size_t numHeaderLines)
Remove header lines.
Definition: VoxelFileParser.cpp:391
bool isBlankLine(std::string const &line)
Check if the line is a blank line.
Definition: VoxelFileParser.cpp:178