MCPcopy Create free account
hub / github.com/LAStools/LAStools / laszip_prepare_header_for_write

Function laszip_prepare_header_for_write

LASzip/src/laszip_dll.cpp:2007–2072  ·  view source on GitHub ↗

---------------------------------------------------------------------------*/

Source from the content-addressed store, hash-verified

2005
2006/*---------------------------------------------------------------------------*/
2007static I32
2008laszip_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__

Calls

no outgoing calls

Tested by

no test coverage detected