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  // ******************* //
66  std::vector<std::shared_ptr<DetailedVoxel>> parseDetailed(
67  std::string const & path,
68  size_t numHeaderLines=2,
69  bool const exactFormat = true,
70  std::string const separator = " "
71  );
72 
79  std::vector<DetailedVoxel *> bruteParseDetailed(
80  std::string const & path,
81  size_t numHeaderLines=2,
82  bool const exactFormat = true,
83  std::string const separator = " "
84  );
85 
86 protected:
87  // *** PARSING FUNCTIONS *** //
88  // *************************** //
94  void loadFile(std::vector<std::string> &lines, std::string const & path);
107  void cleanLines(
108  std::vector<std::string> &lines,
109  size_t const numHeaderLines,
110  bool &minCornerXFound,
111  double &minCornerX,
112  bool &minCornerYFound,
113  double &minCornerY,
114  bool &minCornerZFound,
115  double &minCornerZ,
116  bool &maxCornerXFound,
117  double &maxCornerX,
118  bool &maxCornerYFound,
119  double &maxCornerY,
120  bool &maxCornerZFound,
121  double &maxCornerZ,
122  bool &splitXFound,
123  size_t &splitX,
124  bool &splitYFound,
125  size_t &splitY,
126  bool &splitZFound,
127  size_t &splitZ,
128  double &voxelSize,
129  double &maxPad
130  );
131 
142  bool isBlankLine(std::string const &line);
153  bool handleSpecLine(
154  std::string const &line,
155  bool &minCornerXFound,
156  double &minCornerX,
157  bool &minCornerYFound,
158  double &minCornerY,
159  bool &minCornerZFound,
160  double &minCornerZ,
161  bool &maxCornerXFound,
162  double &maxCornerX,
163  bool &maxCornerYFound,
164  double &maxCornerY,
165  bool &maxCornerZFound,
166  double &maxCornerZ,
167  bool &splitXFound,
168  size_t &splitX,
169  bool &splitYFound,
170  size_t &splitY,
171  bool &splitZFound,
172  size_t &splitZ,
173  double &voxelSize,
174  double &maxPad
175  );
176 
231  void handleSpec(
232  std::string const &line,
233  bool &minCornerXFound,
234  double &minCornerX,
235  bool &minCornerYFound,
236  double &minCornerY,
237  bool &minCornerZFound,
238  double &minCornerZ,
239  bool &maxCornerXFound,
240  double &maxCornerX,
241  bool &maxCornerYFound,
242  double &maxCornerY,
243  bool &maxCornerZFound,
244  double &maxCornerZ,
245  bool &splitXFound,
246  size_t &splitX,
247  bool &splitYFound,
248  size_t &splitY,
249  bool &splitZFound,
250  size_t &splitZ,
251  double &voxelSize,
252  double &maxPad
253  );
254 
262  void cleanLine(std::string &line);
263 
269  void removeHeaderLines(
270  std::vector<std::string> &lines,
271  size_t numHeaderLines
272  );
273 
278  void validateDetailed(
279  bool minCornerXFound,
280  bool minCornerYFound,
281  bool minCornerZFound,
282  bool maxCornerXFound,
283  bool maxCornerYFound,
284  bool maxCornerZFound,
285  bool splitXFound,
286  bool splitYFound,
287  bool splitZFound
288  );
289 
301  std::string &line,
302  std::string const separator,
303  bool const exactFormat,
304  char const *format1,
305  char const *format2,
306  char const *format3,
307  double minCornerX,
308  double minCornerY,
309  double minCornerZ,
310  double maxCornerX,
311  double maxCornerY,
312  double maxCornerZ,
313  double voxelSize,
314  double voxelHalfSize,
315  double maxPad
316  );
317 
318 };
void cleanLine(std::string &line)
Remove unnecessary stuff from received line.
Definition: VoxelFileParser.cpp:343
void removeHeaderLines(std::vector< std::string > &lines, size_t numHeaderLines)
Remove header lines.
Definition: VoxelFileParser.cpp:385
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:114
Class for parsing voxel files.
Definition: VoxelFileParser.h:19
static char const BLANK_CHARACTERS[N_BLANK_CHARACTERS]
Characters considered "blank".
Definition: VoxelFileParser.h:30
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:188
Class which extends Voxel to support AMAPVox format with extra features.
Definition: DetailedVoxel.h:12
DetailedVoxel * parseDetailedVoxelLine(std::string &line, std::string const separator, bool const exactFormat, 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:450
static size_t constexpr N_BLANK_CHARACTERS
Nummber of blank characters.
Definition: VoxelFileParser.h:26
static char constexpr SPEC_CHARACTER
Character which starts spec lines.
Definition: VoxelFileParser.h:34
void loadFile(std::vector< std::string > &lines, std::string const &path)
Loads the file at given path.
Definition: VoxelFileParser.cpp:93
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:245
bool isBlankLine(std::string const &line)
Check if the line is a blank line.
Definition: VoxelFileParser.cpp:172
std::vector< DetailedVoxel * > bruteParseDetailed(std::string const &path, size_t numHeaderLines=2, bool const exactFormat=true, std::string const separator=" ")
Like parseDetailed but returns a vector a normla pointers instead of shared pointers.
Definition: VoxelFileParser.cpp:22
std::vector< std::shared_ptr< DetailedVoxel > > parseDetailed(std::string const &path, size_t numHeaderLines=2, bool const exactFormat=true, std::string const separator=" ")
Parse detailed voxels specified at file located at given path.
Definition: VoxelFileParser.cpp:7
VoxelFileParser()
Build a VoxelFileParser.
Definition: VoxelFileParser.h:42
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:392