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

Function demzip_prepare_header_for_write

LASlib/src/demzip_dll.cpp:1809–1867  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

1807
1808/*---------------------------------------------------------------------------*/
1809static I32
1810demzip_prepare_header_for_write(
1811 demzip_dll_struct* demzip_dll
1812)
1813{
1814 if ((demzip_dll->header.version_major != 1) || (demzip_dll->header.version_minor > 4))
1815 {
1816 sprintf(demzip_dll->error, "unknown LAS version %d.%d", (I32)demzip_dll->header.version_major, (I32)demzip_dll->header.version_minor);
1817 return 1;
1818 }
1819
1820 // check counters
1821 U32 i;
1822
1823 if (demzip_dll->header.point_data_format > 5)
1824 {
1825 // legacy counters are zero for new point types
1826
1827 demzip_dll->header.number_of_point_records = 0;
1828 for (i = 0; i < 5; i++)
1829 {
1830 demzip_dll->header.number_of_points_by_return[i] = 0;
1831 }
1832 }
1833 else if (demzip_dll->header.version_minor > 3)
1834 {
1835 // legacy counters must be zero or consistent for old point types
1836
1837 if (demzip_dll->header.number_of_point_records != demzip_dll->header.extended_number_of_point_records)
1838 {
1839 if (demzip_dll->header.number_of_point_records != 0)
1840 {
1841 sprintf(demzip_dll->error, "inconsistent number_of_point_records %u and extended_number_of_point_records %llu", demzip_dll->header.number_of_point_records, demzip_dll->header.extended_number_of_point_records);
1842 return 1;
1843 }
1844 else if (demzip_dll->header.extended_number_of_point_records <= U32_MAX)
1845 {
1846 demzip_dll->header.number_of_point_records = (U32)demzip_dll->header.extended_number_of_point_records;
1847 }
1848 }
1849 for (i = 0; i < 5; i++)
1850 {
1851 if (demzip_dll->header.number_of_points_by_return[i] != demzip_dll->header.extended_number_of_points_by_return[i])
1852 {
1853 if (demzip_dll->header.number_of_points_by_return[i] != 0)
1854 {
1855 sprintf(demzip_dll->error, "inconsistent number_of_points_by_return[%u] %u and extended_number_of_points_by_return[%u] %llu", i, demzip_dll->header.number_of_points_by_return[i], i, demzip_dll->header.extended_number_of_points_by_return[i]);
1856 return 1;
1857 }
1858 else if (demzip_dll->header.extended_number_of_points_by_return[i] <= U32_MAX)
1859 {
1860 demzip_dll->header.number_of_points_by_return[i] = (U32)demzip_dll->header.extended_number_of_points_by_return[i];
1861 }
1862 }
1863 }
1864 }
1865
1866 return 0;

Calls

no outgoing calls

Tested by

no test coverage detected