---------------------------------------------------------------------------*/
| 2005 | |
| 2006 | /*---------------------------------------------------------------------------*/ |
| 2007 | static I32 |
| 2008 | laszip_prepare_header_for_write( |
| 2009 | laszip_dll_struct* laszip_dll |
| 2010 | ) |
| 2011 | { |
| 2012 | if ((laszip_dll->header.version_major != 1) || (laszip_dll->header.version_minor > 5)) |
| 2013 | { |
| 2014 | snprintf(laszip_dll->error, sizeof(laszip_dll->error), "unknown LAS version %d.%d", (I32)laszip_dll->header.version_major, (I32)laszip_dll->header.version_minor); |
| 2015 | return 1; |
| 2016 | } |
| 2017 | |
| 2018 | // check counters |
| 2019 | U32 i; |
| 2020 | |
| 2021 | if (laszip_dll->header.point_data_format > 5) |
| 2022 | { |
| 2023 | // legacy counters are zero for new point types |
| 2024 | |
| 2025 | laszip_dll->header.number_of_point_records = 0; |
| 2026 | for (i = 0; i < 5; i++) |
| 2027 | { |
| 2028 | laszip_dll->header.number_of_points_by_return[i] = 0; |
| 2029 | } |
| 2030 | } |
| 2031 | else if (laszip_dll->header.version_minor > 3) |
| 2032 | { |
| 2033 | // legacy counters must be zero or consistent for old point types |
| 2034 | |
| 2035 | if (laszip_dll->header.number_of_point_records != laszip_dll->header.extended_number_of_point_records) |
| 2036 | { |
| 2037 | #ifdef __GNUC__ |
| 2038 | #pragma GCC diagnostic push |
| 2039 | #pragma GCC diagnostic ignored "-Wformat" |
| 2040 | #endif |
| 2041 | if (laszip_dll->header.number_of_point_records != 0) |
| 2042 | { |
| 2043 | snprintf(laszip_dll->error, sizeof(laszip_dll->error), "inconsistent number_of_point_records %lu and extended_number_of_point_records %llu", laszip_dll->header.number_of_point_records, laszip_dll->header.extended_number_of_point_records); |
| 2044 | return 1; |
| 2045 | } |
| 2046 | else if (laszip_dll->header.extended_number_of_point_records <= U32_MAX) |
| 2047 | { |
| 2048 | laszip_dll->header.number_of_point_records = (U32)laszip_dll->header.extended_number_of_point_records; |
| 2049 | } |
| 2050 | } |
| 2051 | for (i = 0; i < 5; i++) |
| 2052 | { |
| 2053 | if (laszip_dll->header.number_of_points_by_return[i] != laszip_dll->header.extended_number_of_points_by_return[i]) |
| 2054 | { |
| 2055 | if (laszip_dll->header.number_of_points_by_return[i] != 0) |
| 2056 | { |
| 2057 | snprintf(laszip_dll->error, sizeof(laszip_dll->error), "inconsistent number_of_points_by_return[%u] %lu and extended_number_of_points_by_return[%u] %llu", i, laszip_dll->header.number_of_points_by_return[i], i, laszip_dll->header.extended_number_of_points_by_return[i]); |
| 2058 | return 1; |
| 2059 | } |
| 2060 | else if (laszip_dll->header.extended_number_of_points_by_return[i] <= U32_MAX) |
| 2061 | { |
| 2062 | laszip_dll->header.number_of_points_by_return[i] = (U32)laszip_dll->header.extended_number_of_points_by_return[i]; |
| 2063 | } |
| 2064 | #ifdef __GNUC__ |
no outgoing calls
no test coverage detected