| 931 | } |
| 932 | |
| 933 | BOOL LASwriterLAS::update_header(const LASheader* header, BOOL use_inventory, BOOL update_extra_bytes) |
| 934 | { |
| 935 | I32 i; |
| 936 | if (header == 0) |
| 937 | { |
| 938 | laserror("header pointer is zero"); |
| 939 | return FALSE; |
| 940 | } |
| 941 | if (stream == 0) |
| 942 | { |
| 943 | laserror("stream pointer is zero"); |
| 944 | return FALSE; |
| 945 | } |
| 946 | if (!stream->isSeekable()) |
| 947 | { |
| 948 | LASMessage(LAS_WARNING, "stream not seekable. cannot update header."); |
| 949 | return FALSE; |
| 950 | } |
| 951 | if (use_inventory) |
| 952 | { |
| 953 | U32 number; |
| 954 | stream->seek(header_start_position + 107); |
| 955 | if (header->point_data_format >= 6) |
| 956 | { |
| 957 | number = 0; // legacy counters are zero for new point types |
| 958 | } |
| 959 | else if (inventory.extended_number_of_point_records > U32_MAX) |
| 960 | { |
| 961 | if (header->version_minor >= 4) |
| 962 | { |
| 963 | number = 0; |
| 964 | } |
| 965 | else |
| 966 | { |
| 967 | LASMessage(LAS_WARNING, "too many points in LAS %d.%d file. limit is %u.", header->version_major, header->version_minor, U32_MAX); |
| 968 | number = U32_MAX; |
| 969 | } |
| 970 | } |
| 971 | else |
| 972 | { |
| 973 | number = (U32)inventory.extended_number_of_point_records; |
| 974 | } |
| 975 | if (!stream->put32bitsLE((const U8*)&number)) |
| 976 | { |
| 977 | laserror("updating inventory.number_of_point_records"); |
| 978 | return FALSE; |
| 979 | } |
| 980 | npoints = inventory.extended_number_of_point_records; |
| 981 | for (i = 0; i < 5; i++) |
| 982 | { |
| 983 | if (header->point_data_format >= 6) |
| 984 | { |
| 985 | number = 0; // legacy counters are zero for new point types |
| 986 | } |
| 987 | else if (inventory.extended_number_of_points_by_return[i + 1] > U32_MAX) |
| 988 | { |
| 989 | if (header->version_minor >= 4) |
| 990 | { |
nothing calls this directly
no test coverage detected