lasreader.cpp
Go to the documentation of this file.
1 /*
2 ===============================================================================
3 
4  FILE: lasreader.cpp
5 
6  CONTENTS:
7 
8  see corresponding header file
9 
10  PROGRAMMERS:
11 
12  martin.isenburg@gmail.com
13 
14  COPYRIGHT:
15 
16  (c) 2007-2011, Martin Isenburg, LASSO - tools to catch reality
17 
18  This is free software; you can redistribute and/or modify it under the
19  terms of the GNU Lesser General Licence as published by the Free Software
20  Foundation. See the COPYING file for more information.
21 
22  This software is distributed WITHOUT ANY WARRANTY and without even the
23  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
24 
25  CHANGE HISTORY:
26 
27  see corresponding header file
28 
29 ===============================================================================
30 */
31 #include "lasreader.hpp"
32 
33 #include "lasindex.hpp"
34 #include "lasfilter.hpp"
35 #include "lastransform.hpp"
36 
37 #include "lasreader_las.hpp"
38 #include "lasreader_bin.hpp"
39 #include "lasreader_shp.hpp"
40 #include "lasreader_qfit.hpp"
41 #include "lasreader_txt.hpp"
42 #include "lasreadermerged.hpp"
43 
44 #include <stdlib.h>
45 #include <string.h>
46 
48 {
49  npoints = 0;
50  p_count = 0;
52  read_complex = 0;
53  index = 0;
54  filter = 0;
55  transform = 0;
56  r_min_x = 0;
57  r_min_y = 0;
58  r_max_x = 0;
59  r_max_y = 0;
60  t_ll_x = 0;
61  t_ll_y = 0;
62  t_size = 0;
63  t_ur_x = 0;
64  t_ur_y = 0;
65  c_center_x = 0;
66  c_center_y = 0;
67  c_radius = 0;
68  c_radius_squared = 0;
69 }
70 
72 {
73  if (index) delete index;
74 }
75 
77 {
78  if (this->index) delete this->index;
79  this->index = index;
80 }
81 
83 {
84  return index;
85 }
86 
88 {
89  this->filter = filter;
90  if (filter && transform)
91  {
93  }
94  else if (filter)
95  {
97  }
98  else if (transform)
99  {
101  }
103 }
104 
106 {
107  this->transform = transform;
108  if (filter && transform)
109  {
111  }
112  else if (filter)
113  {
115  }
116  else if (transform)
117  {
119  }
121 }
122 
124 {
125  if (filter) filter->reset();
126 }
127 
128 BOOL LASreader::inside_tile(const F32 ll_x, const F32 ll_y, const F32 size)
129 {
130  t_ll_x = ll_x;
131  t_ll_y = ll_y;
132  t_size = size;
133  t_ur_x = ll_x + size;
134  t_ur_y = ll_y + size;
135  header.min_x = ll_x;
136  header.min_y = ll_y;
137  header.max_x = ll_x + size - 0.001f * header.x_scale_factor;
138  header.max_y = ll_y + size - 0.001f * header.y_scale_factor;
139  if (index) index->intersect_tile(ll_x, ll_y, size);
140  if (filter || transform)
141  {
142  if (index)
144  else
146  }
147  else
148  {
149  if (index)
151  else
153  }
154  return TRUE;
155 }
156 
157 BOOL LASreader::inside_circle(const F64 center_x, const F64 center_y, const F64 radius)
158 {
159  c_center_x = center_x;
160  c_center_y = center_y;
161  c_radius = radius;
162  c_radius_squared = radius*radius;
163  header.min_x = center_x - radius;
164  header.min_y = center_y - radius;
165  header.max_x = center_x + radius;
166  header.max_y = center_y + radius;
167  if (index) index->intersect_circle(center_x, center_y, radius);
168  if (filter || transform)
169  {
170  if (index)
172  else
174  }
175  else
176  {
177  if (index)
179  else
181  }
182  return TRUE;
183 }
184 
185 BOOL LASreader::inside_rectangle(const F64 min_x, const F64 min_y, const F64 max_x, const F64 max_y)
186 {
187  r_min_x = min_x;
188  r_min_y = min_y;
189  r_max_x = max_x;
190  r_max_y = max_y;
191  header.min_x = min_x;
192  header.min_y = min_y;
193  header.max_x = max_x;
194  header.max_y = max_y;
195  if (index) index->intersect_rectangle(min_x, min_y, max_x, max_y);
196  if (filter || transform)
197  {
198  if (index)
200  else
202  }
203  else
204  {
205  if (index)
207  else
209  }
210  return TRUE;
211 }
212 
214 {
215  while (read_point_default())
216  {
217  if (point.inside_tile(t_ll_x, t_ll_y, t_ur_x, t_ur_y)) return TRUE;
218  }
219  return FALSE;
220 }
221 
223 {
224  while (index->seek_next((LASreader*)this))
225  {
227  }
228  return FALSE;
229 }
230 
232 {
233  while (read_point_default())
234  {
236  }
237  return FALSE;
238 }
239 
241 {
242  while (index->seek_next((LASreader*)this))
243  {
245  }
246  return FALSE;
247 }
248 
250 {
251  while (read_point_default())
252  {
254  }
255  return FALSE;
256 }
257 
259 {
260  while (index->seek_next((LASreader*)this))
261  {
263  }
264  return FALSE;
265 }
266 
268 {
269  while ((this->*read_complex)())
270  {
271  if (!filter->filter(&point)) return TRUE;
272  }
273  return FALSE;
274 }
275 
277 {
278  if ((this->*read_complex)())
279  {
280  transform->transform(&point);
281  return TRUE;
282  }
283  return FALSE;
284 }
285 
287 {
288  if (read_point_filtered())
289  {
290  transform->transform(&point);
291  return TRUE;
292  }
293  return FALSE;
294 }
295 
297 {
298  return (!file_names && use_stdin);
299 }
300 
302 {
303  return (populate_header || (file_name && (strstr(file_name, ".las") || strstr(file_name, ".laz") || strstr(file_name, ".LAS") || strstr(file_name, ".LAZ"))));
304 }
305 
307 {
308  file_name_current = 0;
309  file_name = 0;
310 }
311 
313 {
314  if (file_names)
315  {
316  use_stdin = FALSE;
317  if (file_name_current == file_name_number) return 0;
318  if ((file_name_number > 1) && merged)
319  {
320  LASreaderMerged* lasreadermerged = new LASreaderMerged();
321  if (use_alternate) lasreadermerged->use_alternate_reader();
322  lasreadermerged->set_scale_factor(scale_factor);
323  lasreadermerged->set_offset(offset);
324  lasreadermerged->set_parse_string(parse_string);
325  lasreadermerged->set_skip_lines(skip_lines);
326  lasreadermerged->set_populate_header(populate_header);
328  lasreadermerged->set_scale_intensity(scale_intensity);
330  lasreadermerged->set_scale_scan_angle(scale_scan_angle);
332  if (!lasreadermerged->open())
333  {
334  fprintf(stderr,"ERROR: cannot open lasreadermerged with %d file names\n", file_name_number);
335  delete lasreadermerged;
336  return 0;
337  }
338  if (filter) lasreadermerged->set_filter(filter);
339  if (transform) lasreadermerged->set_transform(transform);
340  if (inside_tile) lasreadermerged->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
341  if (inside_circle) lasreadermerged->inside_circle(inside_circle[0], inside_circle[1], inside_circle[2]);
343  return lasreadermerged;
344  }
345  else
346  {
349  if (strstr(file_name, ".las") || strstr(file_name, ".laz") || strstr(file_name, ".LAS") || strstr(file_name, ".LAZ"))
350  {
351  LASreaderLAS* lasreaderlas;
352  if (scale_factor == 0 && offset == 0)
353  lasreaderlas = new LASreaderLAS();
354  else if (scale_factor != 0 && offset == 0)
355  lasreaderlas = new LASreaderLASrescale(scale_factor[0], scale_factor[1], scale_factor[2]);
356  else if (scale_factor == 0 && offset != 0)
357  lasreaderlas = new LASreaderLASreoffset(offset[0], offset[1], offset[2]);
358  else
359  lasreaderlas = new LASreaderLASrescalereoffset(scale_factor[0], scale_factor[1], scale_factor[2], offset[0], offset[1], offset[2]);
360  if (!lasreaderlas->open(file_name))
361  {
362  fprintf(stderr,"ERROR: cannot open lasreaderlas with file name '%s'\n", file_name);
363  delete lasreaderlas;
364  return 0;
365  }
366  LASindex* index = new LASindex();
367  if (index->read(file_name))
368  lasreaderlas->set_index(index);
369  else
370  delete index;
371  if (filter) lasreaderlas->set_filter(filter);
372  if (transform) lasreaderlas->set_transform(transform);
373  if (inside_tile) lasreaderlas->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
376  return lasreaderlas;
377  }
378  else if (strstr(file_name, ".bin") || strstr(file_name, ".BIN"))
379  {
380  LASreaderBIN* lasreaderbin;
381  if (scale_factor == 0 && offset == 0)
382  lasreaderbin = new LASreaderBIN();
383  else if (scale_factor != 0 && offset == 0)
384  lasreaderbin = new LASreaderBINrescale(scale_factor[0], scale_factor[1], scale_factor[2]);
385  else if (scale_factor == 0 && offset != 0)
386  lasreaderbin = new LASreaderBINreoffset(offset[0], offset[1], offset[2]);
387  else
388  lasreaderbin = new LASreaderBINrescalereoffset(scale_factor[0], scale_factor[1], scale_factor[2], offset[0], offset[1], offset[2]);
389  if (!lasreaderbin->open(file_name))
390  {
391  fprintf(stderr,"ERROR: cannot open lasreaderbin with file name '%s'\n", file_name);
392  delete lasreaderbin;
393  return 0;
394  }
395  LASindex* index = new LASindex();
396  if (index->read(file_name))
397  lasreaderbin->set_index(index);
398  else
399  delete index;
400  if (filter) lasreaderbin->set_filter(filter);
401  if (transform) lasreaderbin->set_transform(transform);
402  if (inside_tile) lasreaderbin->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
405  return lasreaderbin;
406  }
407  else if (strstr(file_name, ".shp") || strstr(file_name, ".SHP"))
408  {
409  LASreaderSHP* lasreadershp;
410  if (scale_factor == 0 && offset == 0)
411  lasreadershp = new LASreaderSHP();
412  else if (scale_factor != 0 && offset == 0)
413  lasreadershp = new LASreaderSHPrescale(scale_factor[0], scale_factor[1], scale_factor[2]);
414  else if (scale_factor == 0 && offset != 0)
415  lasreadershp = new LASreaderSHPreoffset(offset[0], offset[1], offset[2]);
416  else
417  lasreadershp = new LASreaderSHPrescalereoffset(scale_factor[0], scale_factor[1], scale_factor[2], offset[0], offset[1], offset[2]);
418  if (!lasreadershp->open(file_name))
419  {
420  fprintf(stderr,"ERROR: cannot open lasreadershp with file name '%s'\n", file_name);
421  delete lasreadershp;
422  return 0;
423  }
424  if (filter) lasreadershp->set_filter(filter);
425  if (transform) lasreadershp->set_transform(transform);
426  if (inside_tile) lasreadershp->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
429  return lasreadershp;
430  }
431  else if (strstr(file_name, ".qi") || strstr(file_name, ".QI"))
432  {
433  LASreaderQFIT* lasreaderqfit;
434  if (scale_factor == 0 && offset == 0)
435  lasreaderqfit = new LASreaderQFIT();
436  else if (scale_factor != 0 && offset == 0)
437  lasreaderqfit = new LASreaderQFITrescale(scale_factor[0], scale_factor[1], scale_factor[2]);
438  else if (scale_factor == 0 && offset != 0)
439  lasreaderqfit = new LASreaderQFITreoffset(offset[0], offset[1], offset[2]);
440  else
441  lasreaderqfit = new LASreaderQFITrescalereoffset(scale_factor[0], scale_factor[1], scale_factor[2], offset[0], offset[1], offset[2]);
442  if (!lasreaderqfit->open(file_name))
443  {
444  fprintf(stderr,"ERROR: cannot open lasreaderqfit with file name '%s'\n", file_name);
445  delete lasreaderqfit;
446  return 0;
447  }
448  LASindex* index = new LASindex();
449  if (index->read(file_name))
450  lasreaderqfit->set_index(index);
451  else
452  delete index;
453  if (filter) lasreaderqfit->set_filter(filter);
454  if (transform) lasreaderqfit->set_transform(transform);
455  if (inside_tile) lasreaderqfit->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
456  if (inside_circle) lasreaderqfit->inside_circle(inside_circle[0], inside_circle[1], inside_circle[2]);
458  return lasreaderqfit;
459  }
460  else
461  {
462  LASreaderTXT* lasreadertxt = new LASreaderTXT();
464  lasreadertxt->set_scale_intensity(scale_intensity);
466  lasreadertxt->set_scale_scan_angle(scale_scan_angle);
467  lasreadertxt->set_scale_factor(scale_factor);
468  lasreadertxt->set_offset(offset);
470  {
471  for (I32 i = 0; i < number_extra_attributes; i++)
472  {
474  }
475  }
476  if (!lasreadertxt->open(file_name, parse_string, skip_lines, populate_header))
477  {
478  fprintf(stderr,"ERROR: cannot open lasreadertxt with file name '%s'\n", file_name);
479  delete lasreadertxt;
480  return 0;
481  }
482  if (filter) lasreadertxt->set_filter(filter);
483  if (transform) lasreadertxt->set_transform(transform);
484  if (inside_tile) lasreadertxt->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
487  return lasreadertxt;
488  }
489  }
490  }
491  else if (use_stdin)
492  {
494  LASreaderLAS* lasreaderlas;
495  if (scale_factor == 0 && offset == 0)
496  lasreaderlas = new LASreaderLAS();
497  else if (scale_factor != 0 && offset == 0)
498  lasreaderlas = new LASreaderLASrescale(scale_factor[0], scale_factor[1], scale_factor[2]);
499  else if (scale_factor == 0 && offset != 0)
500  lasreaderlas = new LASreaderLASreoffset(offset[0], offset[1], offset[2]);
501  else
502  lasreaderlas = new LASreaderLASrescalereoffset(scale_factor[0], scale_factor[1], scale_factor[2], offset[0], offset[1], offset[2]);
503  if (!lasreaderlas->open(stdin))
504  {
505  fprintf(stderr,"ERROR: cannot open lasreaderlas from stdin \n");
506  delete lasreaderlas;
507  return 0;
508  }
509  if (filter) lasreaderlas->set_filter(filter);
510  if (transform) lasreaderlas->set_transform(transform);
511  if (inside_tile) lasreaderlas->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
514  return lasreaderlas;
515  }
516  else
517  {
518  return 0;
519  }
520 }
521 
523 {
524  if (file_names)
525  {
526  if ((file_name_number > 1) && merged)
527  {
528  LASreaderMerged* lasreadermerged = (LASreaderMerged*)lasreader;
529  if (!lasreadermerged->reopen())
530  {
531  fprintf(stderr,"ERROR: cannot reopen lasreadermerged\n");
532  return FALSE;
533  }
534  if (filter) lasreadermerged->reset_filter();
535  if (inside_tile) lasreadermerged->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
536  if (inside_circle) lasreadermerged->inside_circle(inside_circle[0], inside_circle[1], inside_circle[2]);
538  return TRUE;
539  }
540  else
541  {
542  if (!file_name) return FALSE;
543  if (strstr(file_name, ".las") || strstr(file_name, ".laz") || strstr(file_name, ".LAS") || strstr(file_name, ".LAZ"))
544  {
545  LASreaderLAS* lasreaderlas = (LASreaderLAS*)lasreader;
546  if (!lasreaderlas->open(file_name))
547  {
548  fprintf(stderr,"ERROR: cannot reopen lasreaderlas with file name '%s'\n", file_name);
549  return FALSE;
550  }
551  if (filter) lasreaderlas->reset_filter();
552  if (inside_tile) lasreaderlas->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
555  return TRUE;
556  }
557  else if (strstr(file_name, ".bin") || strstr(file_name, ".BIN"))
558  {
559  LASreaderBIN* lasreaderbin = (LASreaderBIN*)lasreader;
560  if (!lasreaderbin->open(file_name))
561  {
562  fprintf(stderr,"ERROR: cannot reopen lasreaderbin with file name '%s'\n", file_name);
563  return FALSE;
564  }
565  if (filter) lasreaderbin->reset_filter();
566  if (inside_tile) lasreaderbin->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
569  return TRUE;
570  }
571  else if (strstr(file_name, ".shp") || strstr(file_name, ".SHP"))
572  {
573  LASreaderSHP* lasreadershp = (LASreaderSHP*)lasreader;
574  if (!lasreadershp->reopen(file_name))
575  {
576  fprintf(stderr,"ERROR: cannot reopen lasreadershp with file name '%s'\n", file_name);
577  return FALSE;
578  }
579  if (filter) lasreadershp->reset_filter();
580  if (inside_tile) lasreadershp->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
583  return TRUE;
584  }
585  else if (strstr(file_name, ".qi") || strstr(file_name, ".QI"))
586  {
587  LASreaderQFIT* lasreaderqfit = (LASreaderQFIT*)lasreader;
588  if (!lasreaderqfit->reopen(file_name))
589  {
590  fprintf(stderr,"ERROR: cannot reopen lasreaderqfit with file name '%s'\n", file_name);
591  return FALSE;
592  }
593  if (filter) lasreaderqfit->reset_filter();
594  if (inside_tile) lasreaderqfit->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
595  if (inside_circle) lasreaderqfit->inside_circle(inside_circle[0], inside_circle[1], inside_circle[2]);
597  return TRUE;
598  }
599  else
600  {
601  LASreaderTXT* lasreadertxt = (LASreaderTXT*)lasreader;
602  if (!lasreadertxt->reopen(file_name))
603  {
604  fprintf(stderr,"ERROR: cannot reopen lasreadertxt with file name '%s'\n", file_name);
605  return FALSE;
606  }
607  if (filter) lasreadertxt->reset_filter();
608  if (inside_tile) lasreadertxt->inside_tile(inside_tile[0], inside_tile[1], inside_tile[2]);
611  return TRUE;
612  }
613  }
614  }
615  else
616  {
617  fprintf(stderr,"ERROR: no lasreader input specified\n");
618  return FALSE;
619  }
620 }
621 
623 {
624  if (lasheader->point_data_format < 4) return 0;
625  if (lasheader->vlr_wave_packet_descr == 0) return 0;
626  if (get_file_name() == 0) return 0;
627  LASwaveform13reader* waveform13reader = new LASwaveform13reader();
628  if ((lasheader->global_encoding & 2) && (lasheader->start_of_waveform_data_packet_record > lasheader->offset_to_point_data))
629  {
630  if (waveform13reader->open(get_file_name(), lasheader->start_of_waveform_data_packet_record, lasheader->vlr_wave_packet_descr))
631  {
632  return waveform13reader;
633  }
634  }
635  else
636  {
637  if (waveform13reader->open(get_file_name(), 0, lasheader->vlr_wave_packet_descr))
638  {
639  return waveform13reader;
640  }
641  }
642  delete waveform13reader;
643  return 0;
644 }
645 
647 {
648  fprintf(stderr,"Supported LAS Inputs\n");
649  fprintf(stderr," -i lidar.las\n");
650  fprintf(stderr," -i lidar.laz\n");
651  fprintf(stderr," -i lidar1.las lidar2.las lidar3.las -merged\n");
652  fprintf(stderr," -i *.las\n");
653  fprintf(stderr," -i flight0??.laz flight1??.laz -single\n");
654  fprintf(stderr," -i terrasolid.bin\n");
655  fprintf(stderr," -i esri.shp\n");
656  fprintf(stderr," -i nasa.qi\n");
657  fprintf(stderr," -i lidar.txt -iparse xyzti -iskip 2 (on-the-fly from ASCII)\n");
658  fprintf(stderr," -i lidar.txt -iparse xyzi -itranslate_intensity 1024\n");
659  fprintf(stderr," -lof file_list.txt\n");
660  fprintf(stderr," -stdin (pipe from stdin)\n");
661  fprintf(stderr," -rescale 0.1 0.1 0.1\n");
662  fprintf(stderr," -reoffset 600000 4000000 0\n");
663 }
664 
666 {
667  int i;
668  for (i = 1; i < argc; i++)
669  {
670  if (argv[i][0] == '\0')
671  {
672  continue;
673  }
674  else if (strcmp(argv[i],"-h") == 0 || strcmp(argv[i],"-help") == 0)
675  {
676  LASfilter().usage();
677  LAStransform().usage();
678  usage();
679  return TRUE;
680  }
681  else if (strcmp(argv[i],"-i") == 0)
682  {
683  if ((i+1) >= argc)
684  {
685  fprintf(stderr,"ERROR: '%s' needs at least 1 argument: file_name or wild_card\n", argv[i]);
686  return FALSE;
687  }
688  *argv[i]='\0';
689  i+=1;
690  do
691  {
692 #ifdef _WIN32
693  add_file_name_windows(argv[i]);
694 #else
695  add_file_name(argv[i]);
696 #endif
697  *argv[i]='\0';
698  i+=1;
699  } while (i < argc && *argv[i] != '-');
700  i-=1;
701  }
702  else if (strcmp(argv[i],"-inside_tile") == 0)
703  {
704  if ((i+3) >= argc)
705  {
706  fprintf(stderr,"ERROR: '%s' needs 3 arguments: ll_x, ll_y, size\n", argv[i]);
707  return FALSE;
708  }
709  if (inside_tile == 0) inside_tile = new F32[3];
710  inside_tile[0] = (F32)atof(argv[i+1]);
711  inside_tile[1] = (F32)atof(argv[i+2]);
712  inside_tile[2] = (F32)atof(argv[i+3]);
713  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; i+=3;
714  }
715  else if (strcmp(argv[i],"-inside_circle") == 0)
716  {
717  if ((i+3) >= argc)
718  {
719  fprintf(stderr,"ERROR: '%s' needs 3 arguments: center_x, center_y, radius\n", argv[i]);
720  return FALSE;
721  }
722  if (inside_circle == 0) inside_circle = new F64[3];
723  inside_circle[0] = atof(argv[i+1]);
724  inside_circle[1] = atof(argv[i+2]);
725  inside_circle[2] = atof(argv[i+3]);
726  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; i+=3;
727  }
728  else if (strcmp(argv[i],"-inside") == 0 || strcmp(argv[i],"-inside_rectangle") == 0)
729  {
730  if ((i+4) >= argc)
731  {
732  fprintf(stderr,"ERROR: '%s' needs 4 arguments: min_x, min_y, max_x, max_y\n", argv[i]);
733  return FALSE;
734  }
735  if (inside_rectangle == 0) inside_rectangle = new F64[4];
736  inside_rectangle[0] = atof(argv[i+1]);
737  inside_rectangle[1] = atof(argv[i+2]);
738  inside_rectangle[2] = atof(argv[i+3]);
739  inside_rectangle[3] = atof(argv[i+4]);
740  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; *argv[i+4]='\0'; i+=4;
741  }
742  else if (strcmp(argv[i],"-stdin") == 0)
743  {
744  use_stdin = TRUE;
745  *argv[i]='\0';
746  }
747  else if (strcmp(argv[i],"-lof") == 0)
748  {
749  if ((i+1) >= argc)
750  {
751  fprintf(stderr,"ERROR: '%s' needs 1 argument: list_of_files\n", argv[i]);
752  return FALSE;
753  }
754  FILE* file = fopen(argv[i+1], "r");
755  if (file == 0)
756  {
757  fprintf(stderr, "ERROR: cannot open '%s'\n", argv[i+1]);
758  return FALSE;
759  }
760  char line[1024];
761  while (fgets(line, 1024, file))
762  {
763  // find end of line
764  size_t len = strlen(line) - 1;
765  // remove extra white spaces and line return at the end
766  while (len > 0 && ((line[len] == '\n') || (line[len] == ' ') || (line[len] == '\t') || (line[len] == '\012')))
767  {
768  line[len] = '\0';
769  len--;
770  }
771  add_file_name(line);
772  }
773  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
774  }
775  else if (strcmp(argv[i],"-rescale") == 0)
776  {
777  if ((i+3) >= argc)
778  {
779  fprintf(stderr,"ERROR: '%s' needs 3 arguments: rescale_x, rescale_y, rescale_z\n", argv[i]);
780  return FALSE;
781  }
782  F64 scale_factor[3];
783  scale_factor[0] = atof(argv[i+1]);
784  scale_factor[1] = atof(argv[i+2]);
785  scale_factor[2] = atof(argv[i+3]);
787  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; i+=3;
788  }
789  else if (strcmp(argv[i],"-reoffset") == 0)
790  {
791  if ((i+3) >= argc)
792  {
793  fprintf(stderr,"ERROR: '%s' needs 3 arguments: reoffset_x, reoffset_y, reoffset_z\n", argv[i]);
794  return FALSE;
795  }
796  F64 offset[3];
797  offset[0] = atof(argv[i+1]);
798  offset[1] = atof(argv[i+2]);
799  offset[2] = atof(argv[i+3]);
801  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; i+=3;
802  }
803  else if (strcmp(argv[i],"-files_are_flightlines") == 0)
804  {
806  *argv[i]='\0';
807  }
808  else if (strcmp(argv[i],"-itranslate_intensity") == 0)
809  {
810  if ((i+1) >= argc)
811  {
812  fprintf(stderr,"ERROR: '%s' needs 1 argument: offset\n", argv[i]);
813  return FALSE;
814  }
815  set_translate_intensity((F32)atof(argv[i+1]));
816  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
817  }
818  else if (strcmp(argv[i],"-iscale_intensity") == 0)
819  {
820  if ((i+1) >= argc)
821  {
822  fprintf(stderr,"ERROR: '%s' needs 1 argument: scale\n", argv[i]);
823  return FALSE;
824  }
825  set_scale_intensity((F32)atof(argv[i+1]));
826  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
827  }
828  else if (strcmp(argv[i],"-itranslate_scan_angle") == 0)
829  {
830  if ((i+1) >= argc)
831  {
832  fprintf(stderr,"ERROR: '%s' needs 1 argument: offset\n", argv[i]);
833  return FALSE;
834  }
835  set_translate_scan_angle((F32)atof(argv[i+1]));
836  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
837  }
838  else if (strcmp(argv[i],"-iscale_scan_angle") == 0)
839  {
840  if ((i+1) >= argc)
841  {
842  fprintf(stderr,"ERROR: '%s' needs 1 argument: scale\n", argv[i]);
843  return FALSE;
844  }
845  set_scale_scan_angle((F32)atof(argv[i+1]));
846  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
847  }
848  else if (strcmp(argv[i],"-iadd_extra") == 0)
849  {
850  if ((i+3) >= argc)
851  {
852  fprintf(stderr,"ERROR: '%s' needs 3 arguments: data_type name description\n", argv[i]);
853  return FALSE;
854  }
855  if (((i+4) < argc) && (argv[i+4][0] != '-'))
856  {
857  if (((i+5) < argc) && (argv[i+5][0] != '-'))
858  {
859  add_extra_attribute(atoi(argv[i+1]), argv[i+2], argv[i+3], atof(argv[i+4]), atof(argv[i+5]));
860  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; *argv[i+4]='\0'; *argv[i+5]='\0'; i+=5;
861  }
862  else
863  {
864  add_extra_attribute(atoi(argv[i+1]), argv[i+2], argv[i+3], atof(argv[i+4]));
865  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; *argv[i+4]='\0'; i+=4;
866  }
867  }
868  else
869  {
870  add_extra_attribute(atoi(argv[i+1]), argv[i+2], argv[i+3]);
871  *argv[i]='\0'; *argv[i+1]='\0'; *argv[i+2]='\0'; *argv[i+3]='\0'; i+=3;
872  }
873  }
874  else if (strcmp(argv[i],"-iparse") == 0)
875  {
876  if ((i+1) >= argc)
877  {
878  fprintf(stderr,"ERROR: '%s' needs 1 argument: string\n", argv[i]);
879  return FALSE;
880  }
881  set_parse_string(argv[i+1]);
882  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
883  }
884  else if (strcmp(argv[i],"-iskip") == 0)
885  {
886  if ((i+1) >= argc)
887  {
888  fprintf(stderr,"ERROR: '%s' needs 1 argument: number_of_lines\n", argv[i]);
889  return FALSE;
890  }
891  set_skip_lines(atoi(argv[i+1]));
892  *argv[i]='\0'; *argv[i+1]='\0'; i+=1;
893  }
894  else if (strcmp(argv[i],"-single") == 0)
895  {
896  set_merged(FALSE);
897  *argv[i]='\0';
898  }
899  else if (strcmp(argv[i],"-merged") == 0)
900  {
901  set_merged(TRUE);
902  *argv[i]='\0';
903  }
904  else if (strcmp(argv[i],"-populate") == 0)
905  {
907  *argv[i]='\0';
908  }
909  else if (strcmp(argv[i],"-do_not_populate") == 0)
910  {
912  *argv[i]='\0';
913  }
914  }
915 
916  if (filter) filter->clean();
917  else filter = new LASfilter();
918  if (!filter->parse(argc, argv))
919  {
920  delete filter;
921  return FALSE;
922  }
923  if (!filter->active())
924  {
925  delete filter;
926  filter = 0;
927  }
928 
929  if (transform) transform->clean();
930  else transform = new LAStransform();
931  if (!transform->parse(argc, argv))
932  {
933  delete transform;
934  return FALSE;
935  }
936  if (!transform->active())
937  {
938  delete transform;
939  transform = 0;
940  }
941 
942  return TRUE;
943 }
944 
945 const char* LASreadOpener::get_file_name() const
946 {
947  if (file_name)
948  return file_name;
949  if (file_name_number)
950  return file_names[0];
951  return 0;
952 }
953 
954 const char* LASreadOpener::get_file_name(U32 number) const
955 {
956  return file_names[number];
957 }
958 
960 {
961  if (strstr(file_names[number], ".las") || strstr(file_names[number], ".LAS"))
962  {
963  return LAS_TOOLS_FORMAT_LAS;
964  }
965  else if (strstr(file_names[number], ".laz") || strstr(file_names[number], ".LAZ"))
966  {
967  return LAS_TOOLS_FORMAT_LAZ;
968  }
969  else if (strstr(file_names[number], ".bin") || strstr(file_names[number], ".BIN"))
970  {
971  return LAS_TOOLS_FORMAT_BIN;
972  }
973  else if (strstr(file_names[number], ".shp") || strstr(file_names[number], ".SHP"))
974  {
975  return LAS_TOOLS_FORMAT_SHP;
976  }
977  else if (strstr(file_names[number], ".qi") || strstr(file_names[number], ".QI"))
978  {
979  return LAS_TOOLS_FORMAT_QFIT;
980  }
981  else
982  {
983  return LAS_TOOLS_FORMAT_TXT;
984  }
985 }
986 
987 void LASreadOpener::set_merged(const BOOL merged)
988 {
989  this->merged = merged;
990 }
991 
993 {
994  return merged;
995 }
996 
997 void LASreadOpener::set_file_name(const char* file_name, BOOL unique)
998 {
999 #ifdef _WIN32
1000  add_file_name_windows(file_name, unique);
1001 #else
1002  add_file_name(file_name, unique);
1003 #endif
1004 }
1005 
1006 BOOL LASreadOpener::add_file_name(const char* file_name, BOOL unique)
1007 {
1008  if (unique)
1009  {
1010  U32 i;
1011  for (i = 0; i < file_name_number; i++)
1012  {
1013  if (strcmp(file_names[i], file_name) == 0)
1014  {
1015  return FALSE;
1016  }
1017  }
1018  }
1020  {
1021  if (file_names)
1022  {
1023  file_name_allocated *= 2;
1024  file_names = (char**)realloc(file_names, sizeof(char*)*file_name_allocated);
1025  }
1026  else
1027  {
1028  file_name_allocated = 16;
1029  file_names = (char**)malloc(sizeof(char*)*file_name_allocated);
1030  }
1031  if (file_names == 0)
1032  {
1033  fprintf(stderr, "ERROR: alloc for file_names pointer array failed at %d\n", file_name_allocated);
1034  }
1035  }
1037  file_name_number++;
1038  return TRUE;
1039 }
1040 
1042 {
1043  if (file_name_id < file_name_number)
1044  {
1045  U32 i;
1046  free(file_names[file_name_id]);
1047  for (i = file_name_id+1; i < file_name_number; i++)
1048  {
1049  file_names[i-1] = file_names[i];
1050  }
1051  }
1052  file_name_number--;
1053 }
1054 
1056 {
1057  if (file_name_id < file_name_number)
1058  {
1059  file_name_current = file_name_id;
1060  return TRUE;
1061  }
1062  return FALSE;
1063 }
1064 
1065 #ifdef _WIN32
1066 #include <windows.h>
1067 void LASreadOpener::add_file_name_windows(const char* file_name, BOOL unique)
1068 {
1069  HANDLE h;
1070  WIN32_FIND_DATA info;
1071  h = FindFirstFile(file_name, &info);
1072  if (h != INVALID_HANDLE_VALUE)
1073  {
1074  // find the path
1075  size_t len = strlen(file_name);
1076  while (len && file_name[len] != '\\') len--;
1077  if (len)
1078  {
1079  len++;
1080  char full_file_name[512];
1081  strncpy(full_file_name, file_name, len);
1082  do
1083  {
1084  sprintf(&full_file_name[len], "%s", info.cFileName);
1085  add_file_name(full_file_name, unique);
1086  } while (FindNextFile(h, &info));
1087  }
1088  else
1089  {
1090  do
1091  {
1092  add_file_name(info.cFileName, unique);
1093  } while (FindNextFile(h, &info));
1094  }
1095  FindClose(h);
1096  }
1097 }
1098 #endif
1099 
1101 {
1102  return file_name_number;
1103 }
1104 
1105 void LASreadOpener::set_parse_string(const char* parse_string)
1106 {
1107  if (this->parse_string) free(this->parse_string);
1108  if (parse_string)
1109  {
1110  this->parse_string = strdup(parse_string);
1111  }
1112  else
1113  {
1114  this->parse_string = 0;
1115  }
1116 }
1117 
1119 {
1120  return parse_string;
1121 }
1122 
1123 void LASreadOpener::set_scale_factor(const F64* scale_factor)
1124 {
1125  if (scale_factor)
1126  {
1127  if (this->scale_factor == 0) this->scale_factor = new F64[3];
1128  this->scale_factor[0] = scale_factor[0];
1129  this->scale_factor[1] = scale_factor[1];
1130  this->scale_factor[2] = scale_factor[2];
1131  }
1132  else if (this->scale_factor)
1133  {
1134  delete [] this->scale_factor;
1135  this->scale_factor = 0;
1136  }
1137 }
1138 
1139 void LASreadOpener::set_offset(const F64* offset)
1140 {
1141  if (offset)
1142  {
1143  if (this->offset == 0) this->offset = new F64[3];
1144  this->offset[0] = offset[0];
1145  this->offset[1] = offset[1];
1146  this->offset[2] = offset[2];
1147  }
1148  else if (this->offset)
1149  {
1150  delete [] this->offset;
1151  this->offset = 0;
1152  }
1153 }
1154 
1156 {
1157  this->translate_intensity = translate_intensity;
1158 }
1159 
1161 {
1162  this->scale_intensity = scale_intensity;
1163 }
1164 
1166 {
1167  this->translate_scan_angle = translate_scan_angle;
1168 }
1169 
1171 {
1172  this->scale_scan_angle = scale_scan_angle;
1173 }
1174 
1175 void LASreadOpener::add_extra_attribute(I32 data_type, const char* name, const char* description, F64 scale, F64 offset)
1176 {
1178  extra_attribute_names[number_extra_attributes] = (name ? strdup(name) : 0);
1179  extra_attribute_descriptions[number_extra_attributes] = (description ? strdup(description) : 0);
1183 }
1184 
1186 {
1187  this->skip_lines = skip_lines;
1188 }
1189 
1191 {
1192  this->populate_header = populate_header;
1193 }
1194 
1196 {
1198 }
1199 
1201 {
1202  file_names = 0;
1203  file_name = 0;
1204  merged = TRUE;
1205  use_stdin = FALSE;
1206  scale_factor = 0;
1207  offset = 0;
1208  use_alternate = FALSE;
1209  translate_intensity = 0.0f;
1210  scale_intensity = 1.0f;
1211  translate_scan_angle = 0.0f;
1212  scale_scan_angle = 1.0f;
1214  for (I32 i = 0; i < 10; i++)
1215  {
1217  extra_attribute_names[i] = 0;
1219  extra_attribute_scales[i] = 1.0;
1220  extra_attribute_offsets[i] = 0.0;
1221  }
1222  parse_string = 0;
1223  skip_lines = 0;
1225  file_name_number = 0;
1226  file_name_allocated = 0;
1227  file_name_current = 0;
1228  inside_tile = 0;
1229  inside_circle = 0;
1230  inside_rectangle = 0;
1231  filter = 0;
1232  transform = 0;
1233 }
1234 
1236 {
1237  if (file_names)
1238  {
1239  U32 i;
1240  for (i = 0; i < file_name_number; i++) free(file_names[i]);
1241  free(file_names);
1242  }
1243  if (parse_string) free(parse_string);
1244  if (scale_factor) delete [] scale_factor;
1245  if (offset) delete [] offset;
1246  if (inside_tile) delete [] inside_tile;
1247  if (inside_circle) delete [] inside_circle;
1248  if (inside_rectangle) delete [] inside_rectangle;
1249  if (filter) delete filter;
1250  if (transform) delete transform;
1251 }
LASheader
Definition: lasdefinitions.hpp:952
LASreadOpener::set_file_name_current
BOOL set_file_name_current(U32 file_name_id)
Definition: lasreader.cpp:1055
LASreaderTXT::add_extra_attribute
void add_extra_attribute(I32 data_type, const char *name, const char *description=0, F64 scale=1.0, F64 offset=0.0)
Definition: lasreader_txt.cpp:437
lastransform.hpp
LASreader::read_point_inside_circle_indexed
BOOL read_point_inside_circle_indexed()
Definition: lasreader.cpp:240
LASreaderBINrescale
Definition: lasreader_bin.hpp:67
LASheader::min_y
F64 min_y
Definition: lasdefinitions.hpp:978
LASreaderMerged::set_scale_factor
void set_scale_factor(const F64 *scale_factor)
Definition: lasreadermerged.cpp:214
lasreadermerged.hpp
LASreadOpener::offset
F64 * offset
Definition: lasreader.hpp:181
LASreader::read_point_default
virtual BOOL read_point_default()=0
LASreaderSHP
Definition: lasreader_shp.hpp:38
LASreader::set_transform
virtual void set_transform(LAStransform *transform)
Definition: lasreader.cpp:105
LASreadOpener::set_merged
void set_merged(const BOOL merged)
Definition: lasreader.cpp:987
lasreader_las.hpp
LASindex::read
BOOL read(const char *file_name)
Definition: lasindex.cpp:267
transform
Definition: src/tools/lvr2_transform/Options.cpp:44
lasfilter.hpp
LASreaderMerged::open
BOOL open()
Definition: lasreadermerged.cpp:289
LASreader::point
LASpoint point
Definition: lasreader.hpp:53
LAS_TOOLS_FORMAT_QFIT
#define LAS_TOOLS_FORMAT_QFIT
Definition: lasdefinitions.hpp:62
LASreaderTXT::set_translate_intensity
void set_translate_intensity(F32 translate_intensity)
Definition: lasreader_txt.cpp:385
LASreader::r_min_x
F64 r_min_x
Definition: lasreader.hpp:112
LASreaderBIN::open
BOOL open(const char *file_name)
Definition: lasreader_bin.cpp:81
LASreader::inside_circle
virtual BOOL inside_circle(const F64 center_x, const F64 center_y, const F64 radius)
Definition: lasreader.cpp:157
LAS_TOOLS_FORMAT_SHP
#define LAS_TOOLS_FORMAT_SHP
Definition: lasdefinitions.hpp:61
LASreaderTXT::reopen
BOOL reopen(const char *file_name)
Definition: lasreader_txt.cpp:601
LASreaderQFIT
Definition: lasreader_qfit.hpp:40
LASreadOpener::file_name
char * file_name
Definition: lasreader.hpp:175
LASpoint::inside_tile
BOOL inside_tile(const F32 ll_x, const F32 ll_y, const F32 ur_x, const F32 ur_y) const
Definition: lasdefinitions.hpp:713
LASreadOpener::get_parse_string
const char * get_parse_string() const
Definition: lasreader.cpp:1118
LASreadOpener::file_name_allocated
U32 file_name_allocated
Definition: lasreader.hpp:178
LASreadOpener::get_file_format
I32 get_file_format(U32 number) const
Definition: lasreader.cpp:959
LASreaderLASreoffset
Definition: lasreader_las.hpp:93
lasreader.hpp
LASreadOpener::active
BOOL active() const
Definition: lasreader.cpp:1195
LASwaveform13reader::open
BOOL open(const char *file_name, I64 start_of_waveform_data_packet_record, const LASvlr_wave_packet_descr *const *wave_packet_descr)
Definition: laswaveform13reader.cpp:80
LASreader::r_max_x
F64 r_max_x
Definition: lasreader.hpp:112
F64
double F64
Definition: mydefs.hpp:52
LASreadOpener::set_scale_factor
void set_scale_factor(const F64 *scale_factor)
Definition: lasreader.cpp:1123
LASreadOpener::use_stdin
BOOL use_stdin
Definition: lasreader.hpp:196
LAS_TOOLS_FORMAT_LAS
#define LAS_TOOLS_FORMAT_LAS
Definition: lasdefinitions.hpp:58
LASreadOpener::piped
BOOL piped() const
Definition: lasreader.cpp:296
LASquantizer::x_scale_factor
F64 x_scale_factor
Definition: lasdefinitions.hpp:92
LASreadOpener::scale_intensity
F32 scale_intensity
Definition: lasreader.hpp:184
I32
int I32
Definition: mydefs.hpp:35
LASreaderTXT::set_scale_factor
void set_scale_factor(const F64 *scale_factor)
Definition: lasreader_txt.cpp:405
lasreader_qfit.hpp
LAStransform::usage
void usage() const
Definition: lastransform.cpp:493
LASreaderLAS::open
BOOL open(const char *file_name, U32 io_buffer_size=65536)
Definition: lasreader_las.cpp:46
LASreadOpener::open
LASreader * open()
Definition: lasreader.cpp:312
LASreadOpener::extra_attribute_offsets
F64 extra_attribute_offsets[10]
Definition: lasreader.hpp:192
LASreader::read_point_inside_tile_indexed
BOOL read_point_inside_tile_indexed()
Definition: lasreader.cpp:222
TRUE
#define TRUE
Definition: mydefs.hpp:137
lasreader_shp.hpp
LASreadOpener::add_extra_attribute
void add_extra_attribute(I32 data_type, const char *name, const char *description=0, F64 scale=1.0, F64 offset=0.0)
Definition: lasreader.cpp:1175
LASfilter::clean
void clean()
Definition: lasfilter.cpp:790
LASreader::p_count
I64 p_count
Definition: lasreader.hpp:56
LASreaderMerged::inside_tile
BOOL inside_tile(const F32 ll_x, const F32 ll_y, const F32 size)
Definition: lasreadermerged.cpp:640
LASreaderMerged::set_populate_header
void set_populate_header(BOOL populate_header)
Definition: lasreadermerged.cpp:284
LASreader::npoints
I64 npoints
Definition: lasreader.hpp:55
LASreaderBIN
Definition: lasreader_bin.hpp:40
LASreader::read_point_inside_rectangle
BOOL read_point_inside_rectangle()
Definition: lasreader.cpp:249
LASindex
Definition: lasindex.hpp:45
LASreader::r_min_y
F64 r_min_y
Definition: lasreader.hpp:112
LASreadOpener::number_extra_attributes
I32 number_extra_attributes
Definition: lasreader.hpp:187
LASreadOpener::extra_attribute_descriptions
char * extra_attribute_descriptions[10]
Definition: lasreader.hpp:190
LAStransform
Definition: lastransform.hpp:46
LASreadOpener::transform
LAStransform * transform
Definition: lasreader.hpp:201
LASreader::read_point_transformed
BOOL read_point_transformed()
Definition: lasreader.cpp:276
LASreaderQFITrescale
Definition: lasreader_qfit.hpp:76
LASreadOpener::file_name_current
U32 file_name_current
Definition: lasreader.hpp:179
LASreaderSHPrescale
Definition: lasreader_shp.hpp:75
LASreadOpener::filter
LASfilter * filter
Definition: lasreader.hpp:200
LASreaderMerged::set_translate_intensity
void set_translate_intensity(F32 translate_intensity)
Definition: lasreadermerged.cpp:246
LASreader::read_point_filtered_and_transformed
BOOL read_point_filtered_and_transformed()
Definition: lasreader.cpp:286
LASreader::c_radius
F64 c_radius
Definition: lasreader.hpp:114
LASreadOpener::extra_attribute_names
char * extra_attribute_names[10]
Definition: lasreader.hpp:189
LASreaderQFITrescalereoffset
Definition: lasreader_qfit.hpp:95
LASreader::r_max_y
F64 r_max_y
Definition: lasreader.hpp:112
LAS_TOOLS_FORMAT_BIN
#define LAS_TOOLS_FORMAT_BIN
Definition: lasdefinitions.hpp:60
LASreaderTXT::set_scale_scan_angle
void set_scale_scan_angle(F32 scale_scan_angle)
Definition: lasreader_txt.cpp:400
LASreader::t_size
F32 t_size
Definition: lasreader.hpp:113
LASreadOpener::add_file_name
BOOL add_file_name(const char *file_name, BOOL unique=FALSE)
Definition: lasreader.cpp:1006
LASreader::inside_tile
virtual BOOL inside_tile(const F32 ll_x, const F32 ll_y, const F32 size)
Definition: lasreader.cpp:128
LASindex::intersect_tile
BOOL intersect_tile(const F32 ll_x, const F32 ll_y, const F32 size)
Definition: lasindex.cpp:227
LASreadOpener::populate_header
BOOL populate_header
Definition: lasreader.hpp:195
LASreadOpener::get_merged
BOOL get_merged() const
Definition: lasreader.cpp:992
LASreader::set_filter
virtual void set_filter(LASfilter *filter)
Definition: lasreader.cpp:87
LASreaderLASrescale
Definition: lasreader_las.hpp:80
LASreadOpener::use_alternate
BOOL use_alternate
Definition: lasreader.hpp:182
LASreaderQFIT::reopen
BOOL reopen(const char *file_name)
Definition: lasreader_qfit.cpp:380
LASreaderMerged::inside_circle
BOOL inside_circle(const F64 center_x, const F64 center_y, const F64 radius)
Definition: lasreadermerged.cpp:655
LASreaderTXT::set_scale_intensity
void set_scale_intensity(F32 scale_intensity)
Definition: lasreader_txt.cpp:390
LASindex::seek_next
BOOL seek_next(LASreader *lasreader)
Definition: lasindex.cpp:453
LASheader::start_of_waveform_data_packet_record
U64 start_of_waveform_data_packet_record
Definition: lasdefinitions.hpp:983
LASreadOpener::file_names
char ** file_names
Definition: lasreader.hpp:174
LASreadOpener::set_offset
void set_offset(const F64 *offset)
Definition: lasreader.cpp:1139
LASheader::point_data_format
U8 point_data_format
Definition: lasdefinitions.hpp:971
LASreadOpener::merged
BOOL merged
Definition: lasreader.hpp:176
LASreadOpener::file_name_number
U32 file_name_number
Definition: lasreader.hpp:177
LASreadOpener::extra_attribute_data_types
I32 extra_attribute_data_types[10]
Definition: lasreader.hpp:188
LASheader::global_encoding
U16 global_encoding
Definition: lasdefinitions.hpp:957
LASreaderMerged::set_parse_string
void set_parse_string(const char *parse_string)
Definition: lasreadermerged.cpp:266
LASpoint::inside_circle
BOOL inside_circle(const F64 center_x, const F64 center_y, F64 squared_radius) const
Definition: lasdefinitions.hpp:723
LASreader
Definition: lasreader.hpp:49
LASindex::intersect_rectangle
BOOL intersect_rectangle(const F64 r_min_x, const F64 r_min_y, const F64 r_max_x, const F64 r_max_y)
Definition: lasindex.cpp:217
LASreadOpener::index
LASindex * index
Definition: lasreader.hpp:199
LASfilter::parse
BOOL parse(int argc, char *argv[])
Definition: lasfilter.cpp:866
LASreaderTXT
Definition: lasreader_txt.hpp:38
LASreadOpener::reopen
BOOL reopen(LASreader *lasreader)
Definition: lasreader.cpp:522
LASreaderMerged::set_offset
void set_offset(const F64 *offset)
Definition: lasreadermerged.cpp:230
LASreaderMerged::set_scale_intensity
void set_scale_intensity(F32 scale_intensity)
Definition: lasreadermerged.cpp:251
LASreadOpener::set_translate_intensity
void set_translate_intensity(F32 translate_intensity)
Definition: lasreader.cpp:1155
LASreadOpener::set_file_name
void set_file_name(const char *file_name, BOOL unique=FALSE)
Definition: lasreader.cpp:997
LASreadOpener::inside_circle
F64 * inside_circle
Definition: lasreader.hpp:205
LASreaderLAS
Definition: lasreader_las.hpp:52
LASreadOpener::get_file_name
const char * get_file_name() const
Definition: lasreader.cpp:945
LASreadOpener::translate_intensity
F32 translate_intensity
Definition: lasreader.hpp:183
LASheader::max_x
F64 max_x
Definition: lasdefinitions.hpp:975
LASreader::c_radius_squared
F64 c_radius_squared
Definition: lasreader.hpp:114
lasreader_txt.hpp
LASreadOpener::usage
void usage() const
Definition: lasreader.cpp:646
LASreadOpener::set_scale_intensity
void set_scale_intensity(F32 scale_intensity)
Definition: lasreader.cpp:1160
LASreader::reset_filter
void reset_filter()
Definition: lasreader.cpp:123
LASreaderMerged::set_skip_lines
void set_skip_lines(I32 skip_lines)
Definition: lasreadermerged.cpp:279
LASindex::intersect_circle
BOOL intersect_circle(const F64 center_x, const F64 center_y, const F64 radius)
Definition: lasindex.cpp:237
LASreadOpener::set_parse_string
void set_parse_string(const char *parse_string)
Definition: lasreader.cpp:1105
LASreader::index
LASindex * index
Definition: lasreader.hpp:106
LASreadOpener::scale_factor
F64 * scale_factor
Definition: lasreader.hpp:180
LASreader::read_point_inside_tile
BOOL read_point_inside_tile()
Definition: lasreader.cpp:213
LASreadOpener::skip_lines
I32 skip_lines
Definition: lasreader.hpp:194
LASreadOpener::set_translate_scan_angle
void set_translate_scan_angle(F32 translate_scan_angle)
Definition: lasreader.cpp:1165
lasreader_bin.hpp
LASreader::use_alternate_reader
void use_alternate_reader()
Definition: lasreader.hpp:67
LASreader::t_ur_x
F32 t_ur_x
Definition: lasreader.hpp:113
LASreader::inside_rectangle
virtual BOOL inside_rectangle(const F64 min_x, const F64 min_y, const F64 max_x, const F64 max_y)
Definition: lasreader.cpp:185
LASpoint::inside_rectangle
BOOL inside_rectangle(const F64 r_min_x, const F64 r_min_y, const F64 r_max_x, const F64 r_max_y) const
Definition: lasdefinitions.hpp:703
LASreadOpener::extra_attribute_scales
F64 extra_attribute_scales[10]
Definition: lasreader.hpp:191
LASreader::set_index
void set_index(LASindex *index)
Definition: lasreader.cpp:76
LASreaderMerged::add_file_name
BOOL add_file_name(const char *file_name)
Definition: lasreadermerged.cpp:39
LASreaderMerged::reopen
BOOL reopen()
Definition: lasreadermerged.cpp:757
LASreaderTXT::set_translate_scan_angle
void set_translate_scan_angle(F32 translate_scan_angle)
Definition: lasreader_txt.cpp:395
BOOL
int BOOL
Definition: mydefs.hpp:57
LASreader::get_index
LASindex * get_index() const
Definition: lasreader.cpp:82
LASreadOpener::open_waveform13
LASwaveform13reader * open_waveform13(const LASheader *lasheader)
Definition: lasreader.cpp:622
filter
void filter(lvr2::PointBufferPtr &cloud, lvr2::indexArray &inlier, size_t j)
Definition: src/tools/lvr2_cl_sor/Main.cpp:40
LASwaveform13reader
Definition: laswaveform13reader.hpp:42
LASheader::vlr_wave_packet_descr
LASvlr_wave_packet_descr ** vlr_wave_packet_descr
Definition: lasdefinitions.hpp:1000
LASreadOpener::delete_file_name
void delete_file_name(U32 file_name_id)
Definition: lasreader.cpp:1041
LASfilter::usage
void usage() const
Definition: lasfilter.cpp:805
LASreaderBINreoffset
Definition: lasreader_bin.hpp:77
LASreadOpener::translate_scan_angle
F32 translate_scan_angle
Definition: lasreader.hpp:185
LAS_TOOLS_FORMAT_TXT
#define LAS_TOOLS_FORMAT_TXT
Definition: lasdefinitions.hpp:63
LASreadOpener::has_populated_header
BOOL has_populated_header() const
Definition: lasreader.cpp:301
LASreaderSHP::reopen
BOOL reopen(const char *file_name)
Definition: lasreader_shp.cpp:419
argc
int argc
Definition: tests_high_five_parallel.cpp:27
LASreader::read_point_filtered
BOOL read_point_filtered()
Definition: lasreader.cpp:267
FALSE
#define FALSE
Definition: mydefs.hpp:133
file
FILE * file
Definition: arithmeticencoder.cpp:77
F32
float F32
Definition: mydefs.hpp:51
LASreaderMerged::set_transform
void set_transform(LAStransform *transform)
Definition: lasreadermerged.cpp:635
LASreaderSHPrescalereoffset
Definition: lasreader_shp.hpp:94
LASreadOpener::set_skip_lines
void set_skip_lines(I32 skip_lines)
Definition: lasreader.cpp:1185
LASreaderLASrescalereoffset
Definition: lasreader_las.hpp:106
LASheader::max_y
F64 max_y
Definition: lasdefinitions.hpp:977
LASreaderTXT::set_offset
void set_offset(const F64 *offset)
Definition: lasreader_txt.cpp:421
LASreadOpener::~LASreadOpener
~LASreadOpener()
Definition: lasreader.cpp:1235
LASfilter
Definition: lasfilter.hpp:46
LASreaderQFITreoffset
Definition: lasreader_qfit.hpp:86
LASheader::min_x
F64 min_x
Definition: lasdefinitions.hpp:976
LASreaderSHP::open
virtual BOOL open(const char *file_name)
Definition: lasreader_shp.cpp:104
LASreader::filter
LASfilter * filter
Definition: lasreader.hpp:109
LASreader::LASreader
LASreader()
Definition: lasreader.cpp:47
LASreader::c_center_y
F64 c_center_y
Definition: lasreader.hpp:114
LASreadOpener::reset
void reset()
Definition: lasreader.cpp:306
LASreader::transform
LAStransform * transform
Definition: lasreader.hpp:110
LASreader::header
LASheader header
Definition: lasreader.hpp:52
LASreadOpener::scale_scan_angle
F32 scale_scan_angle
Definition: lasreader.hpp:186
LASreader::~LASreader
virtual ~LASreader()
Definition: lasreader.cpp:71
LASreaderQFIT::open
BOOL open(const char *file_name)
Definition: lasreader_qfit.cpp:43
lasindex.hpp
U32
unsigned int U32
Definition: mydefs.hpp:39
LASreader::read_simple
BOOL(LASreader::* read_simple)()
Definition: lasreader.hpp:117
LASreader::t_ll_x
F32 t_ll_x
Definition: lasreader.hpp:113
LASreaderSHPreoffset
Definition: lasreader_shp.hpp:85
LASreaderTXT::open
virtual BOOL open(const char *file_name, const char *parse_string=0, I32 skip_lines=0, BOOL populate_header=FALSE)
Definition: lasreader_txt.cpp:42
LASfilter::active
BOOL active() const
Definition: lasfilter.hpp:54
LASreadOpener::inside_rectangle
F64 * inside_rectangle
Definition: lasreader.hpp:206
LASreaderMerged
Definition: lasreadermerged.hpp:40
LAS_TOOLS_FORMAT_LAZ
#define LAS_TOOLS_FORMAT_LAZ
Definition: lasdefinitions.hpp:59
LASfilter::filter
BOOL filter(const LASpoint *point)
Definition: lasfilter.cpp:1531
LASreadOpener::set_scale_scan_angle
void set_scale_scan_angle(F32 scale_scan_angle)
Definition: lasreader.cpp:1170
LASreadOpener::parse
BOOL parse(int argc, char *argv[])
Definition: lasreader.cpp:665
LASreadOpener::get_file_name_number
U32 get_file_name_number() const
Definition: lasreader.cpp:1100
LASreader::c_center_x
F64 c_center_x
Definition: lasreader.hpp:114
LASreader::t_ll_y
F32 t_ll_y
Definition: lasreader.hpp:113
LASreader::read_point_inside_circle
BOOL read_point_inside_circle()
Definition: lasreader.cpp:231
LASfilter::reset
void reset()
Definition: lasfilter.cpp:1546
LASreader::read_point_inside_rectangle_indexed
BOOL read_point_inside_rectangle_indexed()
Definition: lasreader.cpp:258
LASheader::offset_to_point_data
U32 offset_to_point_data
Definition: lasdefinitions.hpp:969
LASreadOpener::parse_string
char * parse_string
Definition: lasreader.hpp:193
argv
char ** argv
Definition: tests_high_five_parallel.cpp:28
LASreadOpener::set_populate_header
void set_populate_header(BOOL populate_header)
Definition: lasreader.cpp:1190
LASreaderMerged::set_scale_scan_angle
void set_scale_scan_angle(F32 scale_scan_angle)
Definition: lasreadermerged.cpp:261
LASquantizer::y_scale_factor
F64 y_scale_factor
Definition: lasdefinitions.hpp:93
LASreader::t_ur_y
F32 t_ur_y
Definition: lasreader.hpp:113
LASreadOpener::inside_tile
F32 * inside_tile
Definition: lasreader.hpp:204
LASreadOpener::LASreadOpener
LASreadOpener()
Definition: lasreader.cpp:1200
LASreaderMerged::set_translate_scan_angle
void set_translate_scan_angle(F32 translate_scan_angle)
Definition: lasreadermerged.cpp:256
LASreaderBINrescalereoffset
Definition: lasreader_bin.hpp:86
LASreaderMerged::inside_rectangle
BOOL inside_rectangle(const F64 min_x, const F64 min_y, const F64 max_x, const F64 max_y)
Definition: lasreadermerged.cpp:669
LASreaderMerged::set_filter
void set_filter(LASfilter *filter)
Definition: lasreadermerged.cpp:630
LASreader::read_complex
BOOL(LASreader::* read_complex)()
Definition: lasreader.hpp:118


lvr2
Author(s): Thomas Wiemann , Sebastian Pütz , Alexander Mock , Lars Kiesow , Lukas Kalbertodt , Tristan Igelbrink , Johan M. von Behren , Dominik Feldschnieders , Alexander Löhr
autogenerated on Wed Mar 2 2022 00:37:23