@@ -78,7 +78,59 @@ function bounds(h::LazHeader)
7878 (min_x= h. min_x, max_x= h. max_x, min_y= h. min_y, max_y= h. max_y, min_z= h. min_z, max_z= h. max_z)
7979end
8080
81- Base. @kwdef mutable struct RawPoint
81+ abstract type AbstractRawPoint end
82+ Base. @kwdef struct RawPoint <: AbstractRawPoint
83+ X:: Int32 = Int32 (0 )
84+ Y:: Int32 = Int32 (0 )
85+ Z:: Int32 = Int32 (0 )
86+ intensity:: UInt16 = UInt16 (0 )
87+
88+ # Evil types
89+ # U8 return_number : 3;
90+ # U8 number_of_returns : 3;
91+ # U8 scan_direction_flag : 1;
92+ # U8 edge_of_flight_line : 1; 8
93+ # U8 classification : 5;
94+ # U8 synthetic_flag : 1;
95+ # U8 keypoint_flag : 1;
96+ # U8 withheld_flag : 1; 8
97+ return_number:: UInt8 = UInt8 (0 )
98+ # number_of_returns::UInt8 = UInt8(0)
99+ # scan_direction_flag::UInt8 = UInt8(0)
100+ # edge_of_flight_line::UInt8 = UInt8(0)
101+ classification:: UInt8 = UInt8 (0 )
102+ # synthetic_flag::UInt8 = UInt8(0)
103+ # keypoint_flag::UInt8 = UInt8(0)
104+ # withheld_flag::UInt8 = UInt8(0)
105+ scan_angle_rank:: Int8 = Int8 (0 )
106+ user_data:: UInt8 = UInt8 (0 )
107+ point_source_ID:: UInt16 = UInt16 (0 )
108+
109+
110+ # Another evil type
111+ # I16 extended_scan_angle;
112+ # U8 extended_point_type : 2;
113+ # U8 extended_scanner_channel : 2;
114+ # U8 extended_classification_flags : 4; 8
115+ # U8 extended_classification;
116+ # U8 extended_return_number : 4;
117+ # U8 extended_number_of_returns : 4; 8
118+ extended_scan_angle:: Int16 = Int16 (0 )
119+ extended_point_type:: UInt8 = UInt8 (0 )
120+ # extended_scanner_channel::UInt8 = UInt8(0)
121+ # extended_classification_flags::UInt8 = UInt8(0)
122+ extended_classification:: UInt8 = UInt8 (0 )
123+ extended_return_number:: UInt8 = UInt8 (0 )
124+ # extended_number_of_returns::UInt8 = UInt8(0)
125+ dummy:: NTuple{7,UInt8} = ntuple (i -> UInt8 (0 ), 7 )
126+ gps_time:: Float64 = Float64 (0.0 )
127+ rgb:: NTuple{4,UInt16} = ntuple (i -> UInt16 (0 ), 4 )
128+ wave_packet:: NTuple{29,UInt8} = ntuple (i -> UInt8 (0 ), 29 )
129+ num_extra_bytes:: Int32 = Int32 (0 )
130+ extra_bytes:: Ptr{UInt8} = C_NULL
131+ end
132+
133+ Base. @kwdef mutable struct MutableRawPoint <: AbstractRawPoint
82134 X:: Int32 = Int32 (0 )
83135 Y:: Int32 = Int32 (0 )
84136 Z:: Int32 = Int32 (0 )
@@ -162,14 +214,14 @@ const classes_extended = (created=0,
162214 noise_high= 18 ,)
163215const user_defined_class_extended = 64
164216
165- LasIO. return_number (p:: LazIO.RawPoint ) = (p. return_number & 0b00000111 )
166- LasIO. number_of_returns (p:: LazIO.RawPoint ) = (p. return_number & 0b00111000 ) >> 3
167- LasIO. scan_direction (p:: LazIO.RawPoint ) = Bool ((p. return_number & 0b01000000 ) >> 6 )
168- LasIO. edge_of_flight_line (p:: LazIO.RawPoint ) = Bool ((p. return_number & 0b10000000 ) >> 7 )
217+ LasIO. return_number (p:: LazIO.AbstractRawPoint ) = (p. return_number & 0b00000111 )
218+ LasIO. number_of_returns (p:: LazIO.AbstractRawPoint ) = (p. return_number & 0b00111000 ) >> 3
219+ LasIO. scan_direction (p:: LazIO.AbstractRawPoint ) = Bool ((p. return_number & 0b01000000 ) >> 6 )
220+ LasIO. edge_of_flight_line (p:: LazIO.AbstractRawPoint ) = Bool ((p. return_number & 0b10000000 ) >> 7 )
169221
170- LasIO. classification (p:: LazIO.RawPoint ) = (p. classification & 0b00011111 )
171- LasIO. synthetic (p:: LazIO.RawPoint ) = Bool ((p. classification & 0b00100000 ) >> 5 )
172- LasIO. key_point (p:: LazIO.RawPoint ) = Bool ((p. classification & 0b01000000 ) >> 6 )
173- LasIO. withheld (p:: LazIO.RawPoint ) = Bool ((p. classification & 0b10000000 ) >> 7 )
222+ LasIO. classification (p:: LazIO.AbstractRawPoint ) = (p. classification & 0b00011111 )
223+ LasIO. synthetic (p:: LazIO.AbstractRawPoint ) = Bool ((p. classification & 0b00100000 ) >> 5 )
224+ LasIO. key_point (p:: LazIO.AbstractRawPoint ) = Bool ((p. classification & 0b01000000 ) >> 6 )
225+ LasIO. withheld (p:: LazIO.AbstractRawPoint ) = Bool ((p. classification & 0b10000000 ) >> 7 )
174226
175- Dates. DateTime (p:: LazIO.RawPoint ) = Dates. unix2datetime (p. gps_time) + gps_epoch
227+ Dates. DateTime (p:: LazIO.AbstractRawPoint ) = Dates. unix2datetime (p. gps_time) + gps_epoch
0 commit comments