11/*
2- Copyright (C) 2017-2021 . Stefan Maierhofer.
2+ Copyright (C) 2017-2022 . Stefan Maierhofer.
33
44 This code has been COPIED from https://github.com/stefanmaierhofer/LASzip.
55
@@ -16,7 +16,7 @@ You may obtain a copy of the License at
1616 limitations under the License.
1717*/
1818using Aardvark . Base ;
19- using laszip . net ;
19+ using LASzip . Net ;
2020using System ;
2121using System . Collections ;
2222using System . Collections . Generic ;
@@ -92,9 +92,8 @@ public static class Parser
9292 /// </summary>
9393 public static Info ReadInfo ( string filename )
9494 {
95- var reader = new laszip_dll ( ) ;
96- var compressed = false ;
97- reader . laszip_open_reader ( filename , ref compressed ) ;
95+ var reader = new laszip ( ) ;
96+ reader . open_reader ( filename , out _ ) ;
9897 return ReadInfo ( reader ) ;
9998 }
10099
@@ -103,13 +102,12 @@ public static Info ReadInfo(string filename)
103102 /// </summary>
104103 public static Info ReadInfo ( Stream stream )
105104 {
106- var reader = new laszip_dll ( ) ;
107- var compressed = false ;
108- reader . laszip_open_reader ( stream , ref compressed ) ;
105+ var reader = new laszip ( ) ;
106+ reader . open_reader_stream ( stream , out _ ) ;
109107 return ReadInfo ( reader ) ;
110108 }
111109
112- private static Info ReadInfo ( laszip_dll reader )
110+ private static Info ReadInfo ( laszip reader )
113111 {
114112 var count = reader . header . number_of_point_records ;
115113
@@ -124,7 +122,7 @@ private static Info ReadInfo(laszip_dll reader)
124122 reader . header . max_z )
125123 ) ;
126124
127- reader . laszip_close_reader ( ) ;
125+ reader . close_reader ( ) ;
128126
129127 return new Info ( count , bounds ) ;
130128 }
@@ -136,9 +134,8 @@ private static Info ReadInfo(laszip_dll reader)
136134 /// </summary>
137135 public static IEnumerable < Points > ReadPoints ( string filename , int numberOfPointsPerChunk , bool verbose )
138136 {
139- var reader = new laszip_dll ( ) ;
140- var isCompressed = false ;
141- reader . laszip_open_reader ( filename , ref isCompressed ) ;
137+ var reader = new laszip ( ) ;
138+ reader . open_reader ( filename , out _ ) ;
142139 return ReadPoints ( reader , numberOfPointsPerChunk , verbose ) ;
143140 }
144141 /// <summary>
@@ -152,9 +149,8 @@ public static IEnumerable<Points> ReadPoints(string filename, int numberOfPoints
152149 /// </summary>
153150 public static IEnumerable < Points > ReadPoints ( Stream stream , int numberOfPointsPerChunk , bool verbose )
154151 {
155- var reader = new laszip_dll ( ) ;
156- var isCompressed = false ;
157- reader . laszip_open_reader ( stream , ref isCompressed ) ;
152+ var reader = new laszip ( ) ;
153+ reader . open_reader_stream ( stream , out _ ) ;
158154 return ReadPoints ( reader , numberOfPointsPerChunk , verbose ) ;
159155 }
160156 /// <summary>
@@ -163,19 +159,21 @@ public static IEnumerable<Points> ReadPoints(Stream stream, int numberOfPointsPe
163159 public static IEnumerable < Points > ReadPoints ( Stream stream , int numberOfPointsPerChunk )
164160 => ReadPoints ( stream , numberOfPointsPerChunk , verbose : false ) ;
165161
166- private static IEnumerable < Points > ReadPoints ( laszip_dll reader , int numberOfPointsPerChunk , bool verbose )
162+ private static IEnumerable < Points > ReadPoints ( laszip reader , int numberOfPointsPerChunk , bool verbose )
167163 {
168- var n = reader . header . number_of_point_records ;
169- //var numberOfChunks = n / numberOfPointsPerChunk;
164+ if ( numberOfPointsPerChunk < 1 ) throw new ArgumentOutOfRangeException ( nameof ( numberOfPointsPerChunk ) ) ;
170165
171- var format = reader . header . point_data_format ;
172- var hasGpsTime = format == 1 || format == 3 || format == 4 || format == 5 ;
173- var hasColor = format == 2 || format == 3 || format == 5 ;
174- var hasWavePacket = format == 4 || format == 5 ;
166+ ulong n = reader . header . number_of_point_records ;
167+ if ( n == 0 ) n = reader . header . extended_number_of_point_records ;
175168
176- for ( var j = 0 ; j < n ; j += numberOfPointsPerChunk )
169+ var f = reader . header . point_data_format ;
170+ var hasGpsTime = f == 1 || f == 3 || f == 4 || f == 5 || f == 6 || f == 7 || f == 8 || f == 9 || f == 10 ;
171+ var hasColor = f == 2 || f == 3 || f == 5 || f == 7 || f == 8 || f == 10 ;
172+ var hasWavePacket = f == 4 || f == 5 || f == 9 || f == 10 ;
173+
174+ for ( var j = 0ul ; j < n ; j += ( uint ) numberOfPointsPerChunk )
177175 {
178- if ( j + numberOfPointsPerChunk > n ) numberOfPointsPerChunk = ( int ) ( n - j ) ;
176+ if ( j + ( uint ) numberOfPointsPerChunk > n ) numberOfPointsPerChunk = ( int ) ( n - j ) ;
179177 if ( verbose ) Console . WriteLine ( $ "j: { j } , numberOfPointsPerChunk: { numberOfPointsPerChunk } , n: { n } ") ;
180178
181179 // POINT10
@@ -209,13 +207,13 @@ private static IEnumerable<Points> ReadPoints(laszip_dll reader, int numberOfPoi
209207
210208 for ( var i = 0 ; i < numberOfPointsPerChunk ; i ++ )
211209 {
212- reader . laszip_read_point ( ) ;
210+ reader . read_point ( ) ;
213211
214- reader . laszip_get_coordinates ( p ) ;
212+ reader . get_coordinates ( p ) ;
215213 ps [ i ] = new V3d ( p ) ;
216214 intensities [ i ] = reader . point . intensity ;
217215 returnNumbers [ i ] = reader . point . return_number ;
218- numberOfReturnsOfPulses [ i ] = reader . point . number_of_returns_of_given_pulse ;
216+ numberOfReturnsOfPulses [ i ] = Math . Max ( reader . point . number_of_returns , reader . point . extended_number_of_returns ) ;
219217 scanDirectionFlags [ i ] = reader . point . scan_direction_flag != 0 ;
220218 edgeOfFlightLines [ i ] = reader . point . edge_of_flight_line != 0 ;
221219 classifications [ i ] = reader . point . classification ;
@@ -300,7 +298,7 @@ private static IEnumerable<Points> ReadPoints(laszip_dll reader, int numberOfPoi
300298 } ;
301299 }
302300
303- reader . laszip_close_reader ( ) ;
301+ reader . close_reader ( ) ;
304302 }
305303 }
306304}
0 commit comments