Skip to content

Slope fix#18

Merged
ryanstocks00 merged 42 commits into
mainfrom
slope-fix
May 3, 2026
Merged

Slope fix#18
ryanstocks00 merged 42 commits into
mainfrom
slope-fix

Conversation

@ryanstocks00
Copy link
Copy Markdown
Collaborator

No description provided.

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Mar 8, 2026

Codecov Report

❌ Patch coverage is 83.30935% with 348 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/lib/las/tile_mode.hpp 0.00% 149 Missing ⚠️
src/lib/io/crs.hpp 28.00% 54 Missing ⚠️
src/run.cpp 0.00% 44 Missing ⚠️
src/lib/las/las_file.hpp 0.00% 31 Missing ⚠️
src/tests/test_e2e.cpp 84.61% 28 Missing ⚠️
src/blaze.cpp 0.00% 20 Missing ⚠️
src/lib/config_input/config_input.cpp 75.00% 9 Missing ⚠️
src/process.cpp 91.22% 5 Missing ⚠️
src/lib/contour/contour_gen.hpp 95.45% 3 Missing ⚠️
src/lib/utilities/coordinate.hpp 80.00% 2 Missing ⚠️
... and 3 more
Flag Coverage Δ
unittests 79.69% <83.30%> (+9.16%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/lib/config_input/config_input.hpp 100.00% <100.00%> (+31.74%) ⬆️
src/lib/config_input/tests/test_config_lookup.cpp 100.00% <100.00%> (ø)
src/lib/config_input/tests/test_config_paths.cpp 100.00% <100.00%> (ø)
src/lib/contour/contour.hpp 100.00% <100.00%> (ø)
src/lib/contour/tests/test_contour_ops.cpp 100.00% <100.00%> (ø)
src/lib/grid/grid.hpp 85.03% <100.00%> (+4.45%) ⬆️
src/lib/grid/tests/test_grid.cpp 100.00% <100.00%> (ø)
src/lib/io/gpkg.hpp 96.90% <100.00%> (+0.20%) ⬆️
src/lib/io/tests/test_gpkg.cpp 93.50% <100.00%> (ø)
src/lib/isom/tests/test_colors.cpp 100.00% <100.00%> (ø)
... and 19 more

... and 6 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ryanstocks00 ryanstocks00 force-pushed the slope-fix branch 2 times, most recently from d0a54a6 to b95b212 Compare March 8, 2026 13:22
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses ground-estimation bias on sloped terrain by adjusting the ground grid after bin-min selection, and adds regression coverage around slopes. It also significantly expands unit test coverage across multiple libraries and improves packaging/CI reliability (including QGIS plugin headless execution and GeoPackage merging behavior).

Changes:

  • Adjust ground height estimates to reduce slope-related bias and add an E2E slope-direction regression test.
  • Add multiple new C++ unit test suites (grid, coordinate, contour ops, LAS, vegetation, colors, config) and wire them into CMake.
  • Improve QGIS plugin robustness (summary results, merged contours “fid” fix, headless execution path) and update CI/build/packaging scripts accordingly.

Reviewed changes

Copilot reviewed 41 out of 42 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tests/test_e2e.cpp Adds slope-direction E2E regression test; switches env access to test wrapper.
src/process.cpp Adds slope-bias adjustment step; improves binning bounds/rounding; tweaks min sentinel.
src/lib/vegetation/tests/test_vegetation.cpp New unit tests for vegetation low-pass filtering.
src/lib/vegetation/CMakeLists.txt Hooks vegetation tests into unit test target.
src/lib/utilities/tests/test_coordinate.cpp New unit tests for coordinate/extent utilities.
src/lib/utilities/coordinate.hpp Adds round_down(); fixes Coordinate3D z storage/type; includes <limits>.
src/lib/utilities/CMakeLists.txt Adds coordinate tests to unit test target.
src/lib/testing/env.hpp Adds blaze::test::get_env() wrapper for MSVC warning suppression.
src/lib/las/tests/test_las_point.cpp New unit tests for LASPoint/LASClassification.
src/lib/las/tests/test_las_file.cpp New unit tests for LASFile/LASData helpers and border utilities.
src/lib/las/CMakeLists.txt Adds LAS tests to unit test target.
src/lib/isom/tests/test_colors.cpp New unit tests for color types and conversions.
src/lib/isom/CMakeLists.txt Adds isom color tests to unit test target.
src/lib/io/gpkg.hpp Fixes OGR field definition creation (avoids heap allocation/leak pattern).
src/lib/grid/tests/test_grid.cpp New unit tests for grids, transforms, and graph helpers.
src/lib/grid/tests/CMakeLists.txt Adds grid tests to unit test target.
src/lib/contour/tests/test_contour_ops.cpp New unit tests for contour joining/trimming/polyline conversions.
src/lib/contour/tests/CMakeLists.txt Adds contour ops tests to unit test target.
src/lib/contour/contour_gen.hpp Reworks join_contours() implementation and naming.
src/lib/config_input/tests/test_config_paths.cpp New unit tests for config path resolution and edge cases.
src/lib/config_input/tests/test_config_lookup.cpp New unit tests for config lookup/picking behavior.
src/lib/config_input/config_input.cpp Makes color parsing resilient to missing colors sections.
src/lib/config_input/CMakeLists.txt Adds config_input tests to unit test target.
src/lib/assert/assert.hpp Adds [[unlikely]] hints to assertion paths.
src/lib/CMakeLists.txt Adds new subdirectories (las, vegetation) to the build.
src/blaze.cpp Improves CLI error handling and avoids exit(1); returns proper codes.
src/CMakeLists.txt Uses absolute source paths in target_sources() calls.
scripts/install-ubuntu-deps.sh Switches to apt-get and adds toolchain/LAPACK/BLAS deps.
qgis_plugin/tests/test_infer_crs.py New pytest coverage for CRS parsing helper.
qgis_plugin/tests/test_contour_merge.py New regression test for GeoPackage merge “fid” conflict.
qgis_plugin/tests/conftest.py Mocks QGIS modules for headless pytest runs and loads module directly.
qgis_plugin/tests/init.py Marks test package.
qgis_plugin/blaze_loader/create_qgis_project.py Adds summary results, fixes merged contours “fid” issue, improves topo handling, headless entrypoint, and CI behavior.
qgis_plugin/blaze_loader/blaze_loader.py Shows a detailed summary dialog based on returned summary dict.
cmake/FindDependencyDLLs.cmake Expands Windows DLL copying to handle vcpkg and target runtime DLLs.
README.md Simplifies header markup/formatting.
CMakeLists.txt Improves Windows dependency scanning, Qt deployment, las++ FetchContent options, DLL copying, and test discovery timeout.
.github/workflows/release-app.yml Adds install-and-run smoke tests for built packages; improves apt caching.
.github/workflows/qgis-plugin-test.yml Switches to standalone PyQGIS script execution; skips topo download in CI.
.github/workflows/coverage.yml Improves apt caching and LAPACK/BLAS install reliability; increases timeout.
.github/workflows/cleanup-artifacts.yml Adds scheduled artifact cleanup workflow.
.github/workflows/build.yml Improves apt caching and LAPACK/BLAS install reliability; increases timeouts.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/process.cpp
Comment thread src/tests/test_e2e.cpp
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR targets a “slope fix” in terrain ground estimation, adds broader automated test coverage across several core libraries, and improves build/CI reliability (notably on Windows and for headless QGIS plugin runs).

Changes:

  • Adjust ground estimation to correct slope-related bias and harden point-binning bounds handling.
  • Add substantial new C++ unit tests (grid/utilities/las/isom/contour/config_input/vegetation) plus a new E2E slope-direction test.
  • Refactor QGIS plugin project generation to return a structured summary, improve topo download handling/dedup, and fix merged-contours GeoPackage writing; update CI workflows and Windows DLL/Qt deployment.

Reviewed changes

Copilot reviewed 41 out of 42 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tests/test_e2e.cpp Adds slope-direction E2E test; switches env var access to test wrapper
src/process.cpp Fixes binning bounds handling; applies slope bias adjustment to ground grid
src/lib/vegetation/tests/test_vegetation.cpp Adds low_pass unit tests
src/lib/vegetation/CMakeLists.txt Registers vegetation unit test source
src/lib/utilities/tests/test_coordinate.cpp Adds Coordinate/Extent/Direction unit tests
src/lib/utilities/coordinate.hpp Adds Coordinate2D::round_down; fixes Coordinate3D z storage/access
src/lib/utilities/CMakeLists.txt Registers utilities coordinate unit tests
src/lib/testing/env.hpp Adds blaze::test::get_env wrapper for getenv on MSVC
src/lib/las/tests/test_las_point.cpp Adds LASPoint/LASClassification unit tests
src/lib/las/tests/test_las_file.cpp Adds LASFile/LASData-related unit tests
src/lib/las/CMakeLists.txt Registers LAS unit tests
src/lib/isom/tests/test_colors.cpp Adds color model/conversion unit tests
src/lib/isom/CMakeLists.txt Registers isom color unit tests
src/lib/io/gpkg.hpp Fixes field creation pattern (stack-based OGRFieldDefn)
src/lib/grid/tests/test_grid.cpp Adds Grid/GeoTransform/GeoGrid/GridGraph unit tests
src/lib/grid/tests/CMakeLists.txt Registers grid unit tests
src/lib/contour/tests/test_contour_ops.cpp Adds join/trim/polyline contour ops unit tests
src/lib/contour/tests/CMakeLists.txt Registers contour ops unit tests
src/lib/contour/contour_gen.hpp Refactors join_contours logic
src/lib/config_input/tests/test_config_paths.cpp Adds Config path resolution tests
src/lib/config_input/tests/test_config_lookup.cpp Adds config lookup/selection logic tests
src/lib/config_input/config_input.cpp Makes colors parsing optional/defensive
src/lib/config_input/CMakeLists.txt Registers config_input unit tests
src/lib/assert/assert.hpp Adds [[unlikely]] annotations in assertion helpers
src/lib/CMakeLists.txt Adds las and vegetation subdirectories
src/blaze.cpp Wraps main in exception handling; returns proper exit codes
src/CMakeLists.txt Uses explicit source paths for targets
scripts/install-ubuntu-deps.sh Switches to apt-get; installs additional deps
qgis_plugin/tests/test_infer_crs.py Adds tests for CRS inference helper
qgis_plugin/tests/test_contour_merge.py Adds regression tests for merged contours GPKG writing
qgis_plugin/tests/conftest.py Adds QGIS module mocks + module loader for tests
qgis_plugin/tests/init.py Initializes test package
qgis_plugin/blaze_loader/create_qgis_project.py Returns structured summary; improves headless execution & topo handling; fixes merged GPKG writing
qgis_plugin/blaze_loader/blaze_loader.py Shows summary dialog using returned structured results
cmake/FindDependencyDLLs.cmake Expands DLL copying to handle vcpkg and target runtime DLLs
README.md Simplifies header markup/badges
CMakeLists.txt Improves Windows deployment, dependency scanning, vcpkg cache, and test discovery timeout
.github/workflows/release-app.yml Updates vcpkg caching; adds install-and-smoke-test for packages
.github/workflows/qgis-plugin-test.yml Runs PyQGIS script directly; skips topo downloads in CI
.github/workflows/coverage.yml Uses cached apt packages action; increases timeout; handles LAPACK/BLAS reliably
.github/workflows/cleanup-artifacts.yml Adds scheduled artifact cleanup
.github/workflows/build.yml Uses cached apt packages action; increases timeouts; handles LAPACK/BLAS reliably

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/lib/assert/assert.hpp Outdated
Comment thread src/tests/test_e2e.cpp Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses slope-related DEM bias and CRS handling by adjusting ground estimation, preserving vertical CRS metadata in DEM outputs, and adding an override_crs configuration path that can supersede embedded LAS CRS. It also expands automated coverage (C++ unit tests + QGIS plugin tests) and updates CI/packaging/build scripts for better reliability (notably on Windows and headless QGIS runs).

Changes:

  • Adjust ground estimation for slope bias and add an end-to-end slope regression test.
  • Add CRS override support for LAS/LAZ inputs and preserve vertical datum metadata in DEM GeoTIFFs.
  • Add substantial new unit/integration tests and CI/build improvements (QGIS plugin headless execution, Windows DLL copying, packaging verification).

Reviewed changes

Copilot reviewed 54 out of 56 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/tests/test_e2e.cpp Uses unique per-test output dirs; adds slope-direction ground estimation regression test.
src/run.cpp Passes override_crs into LAS reading; writes DEM outputs with optional vertical CRS.
src/process.cpp Fixes binning bounds; adds slope-bias correction and writes DEM rasters with vertical CRS metadata.
src/lib/vegetation/tests/test_vegetation.cpp Adds unit tests for vegetation low_pass overloads.
src/lib/vegetation/CMakeLists.txt Registers vegetation unit tests in build.
src/lib/utilities/tests/test_coordinate.cpp Adds unit tests for coordinate/direction/extent helpers.
src/lib/utilities/coordinate.hpp Adds round_down(); fixes Coordinate3D z storage/type.
src/lib/utilities/CMakeLists.txt Registers new utilities unit tests.
src/lib/tif/tif.hpp Extends write_to_tif API with include_vertical_crs.
src/lib/tif/tif.cpp Writes compound WKT for DEM rasters; normalizes read projection via CRS helper.
src/lib/testing/output_dir.hpp Adds unique temp output directory/path helpers for tests.
src/lib/testing/env.hpp Adds get_env() wrapper to centralize MSVC getenv warning suppression.
src/lib/las/tests/test_las_point.cpp Adds LAS point/classification unit tests.
src/lib/las/tests/test_las_file.cpp Adds LAS file/border/rounding/utility unit tests.
src/lib/las/las_file.hpp Adds CRS override + normalization/compound CRS handling for LAS reading.
src/lib/las/CMakeLists.txt Registers LAS unit tests.
src/lib/isom/tests/test_colors.cpp Adds unit tests for color classes and conversions.
src/lib/isom/CMakeLists.txt Registers ISOM color tests.
src/lib/io/tests/test_gpkg.cpp Uses unique temp output paths for gpkg tests.
src/lib/io/gpkg.hpp Fixes OGR field creation to avoid leaking heap-allocated OGRFieldDefn.
src/lib/io/crs.hpp Adds WKT normalization + compound CRS construction helpers.
src/lib/grid/tests/test_grid.cpp Adds unit tests for grids, transforms, interpolation, graph types.
src/lib/grid/tests/CMakeLists.txt Registers new grid unit tests.
src/lib/grid/grid.hpp Extends GeoProjection to track compound WKT for vertical CRS preservation.
src/lib/contour/tests/test_contour_ops.cpp Adds unit tests for contour joining/trimming/polyline conversion.
src/lib/contour/tests/CMakeLists.txt Registers new contour ops tests.
src/lib/contour/contour_gen.hpp Refactors contour-joining logic to avoid reversal and improve joining behavior.
src/lib/config_input/tests/test_config_paths.cpp Adds config path resolution + edge case tests.
src/lib/config_input/tests/test_config_lookup.cpp Adds contour/water/vegetation config lookup tests.
src/lib/config_input/config_input.hpp Adds override_crs to config schema.
src/lib/config_input/config_input.cpp Parses/serializes override_crs; makes colors optional when loading config.
src/lib/config_input/CMakeLists.txt Registers config_input unit tests.
src/lib/assert/assert.hpp Fixes macro single-statement behavior; adds [[unlikely]] hints.
src/lib/CMakeLists.txt Adds las and vegetation subdirectories to lib build.
src/gui/main_window.cpp Adds pre-run warning for low average points-per-bin density.
src/gui/config_editor.ui Adds LAS input stats label + projection override UI controls.
src/gui/config_editor.hpp Adds cached LAS stats accessors + update_las_stats() hook.
src/gui/config_editor.cpp Implements LAS stats aggregation and wires override_crs UI to config.
src/blaze.cpp Improves CLI error handling; exits with proper return codes.
src/CMakeLists.txt Uses absolute source paths for target sources.
scripts/install-ubuntu-deps.sh Switches to apt-get; adds toolchain + BLAS/LAPACK deps.
qgis_plugin/tests/test_infer_crs.py Adds pytest coverage for CRS inference logic.
qgis_plugin/tests/test_contour_merge.py Adds regression tests for merged contour gpkg fid conflict.
qgis_plugin/tests/conftest.py Mocks QGIS modules so tests can import/create modules headlessly.
qgis_plugin/tests/init.py Adds package marker for tests.
qgis_plugin/blaze_loader/create_qgis_project.py Returns structured summary; improves headless execution; fixes contour merge field copying; improves topo download behavior and reporting.
qgis_plugin/blaze_loader/blaze_loader.py Displays structured summary dialog; consumes new create_qgis_project result dict.
cmake/FindDependencyDLLs.cmake Copies runtime DLLs for Windows (vcpkg + non-vcpkg), improving test/runtime reliability.
README.md Simplifies header layout/markup.
CMakeLists.txt Windows dependency scanning tweak; Qt deploy serialization; laspp pin update; DLL copying for all WIN32; test discovery timeout.
.gitignore Ignores test LAS fixtures/output directories.
.github/workflows/release-app.yml Uses x-gha cache for vcpkg; adds install-and-smoke-test steps for packages.
.github/workflows/qgis-plugin-test.yml Runs PyQGIS script directly; skips topo download in CI.
.github/workflows/coverage.yml Uses cached apt action; adjusts timeouts; adds explicit BLAS/LAPACK install.
.github/workflows/cleanup-artifacts.yml Adds scheduled artifact cleanup workflow.
.github/workflows/build.yml Uses cached apt action; adjusts timeouts; adds explicit BLAS/LAPACK install.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/lib/las/las_file.hpp
Comment thread src/lib/las/las_file.hpp
Comment thread src/process.cpp
Comment thread src/gui/config_editor.cpp
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses ground-estimation bias on slopes and expands the pipeline to better handle overlapping / mixed-CRS LAS inputs by introducing a tiled read mode, while also improving test isolation and CRS metadata handling for elevation rasters.

Changes:

  • Fix slope-related ground bias by adjusting the per-bin minimum-derived ground surface before export, and add an E2E slope regression test.
  • Add tiled processing support for overlapping / mixed-CRS inputs (including on-the-fly reprojection) plus GUI validation and user guidance.
  • Improve CRS handling (preserve vertical datum in DEM outputs), add broad unit test coverage, and update build/CI packaging scripts.

Reviewed changes

Copilot reviewed 55 out of 57 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tests/test_e2e.cpp Use unique test output dirs; add slope regression E2E test.
src/run.cpp Add tile planning/reading and combine-from-tiles behavior.
src/process.cpp Apply slope-bias correction; tighten binning bounds; write DEMs with vertical CRS.
src/lib/vegetation/tests/test_vegetation.cpp Add unit tests for vegetation low-pass filters.
src/lib/vegetation/CMakeLists.txt Register vegetation unit tests in CMake.
src/lib/utilities/tests/test_coordinate.cpp Add unit tests for coordinate/extent primitives.
src/lib/utilities/coordinate.hpp Add round_down/overlaps; fix Coordinate3D z storage type.
src/lib/utilities/CMakeLists.txt Register coordinate unit tests.
src/lib/tif/tif.hpp Extend write_to_tif API with vertical-CRS toggle.
src/lib/tif/tif.cpp Preserve/emit compound CRS WKT for DEM-style rasters.
src/lib/testing/output_dir.hpp Add unique temp output dir/path helpers for tests.
src/lib/testing/env.hpp Add getenv wrapper to silence MSVC warnings in tests.
src/lib/las/tile_mode.hpp Implement overlap/mixed-CRS detection and tiled reads with reprojection.
src/lib/las/tests/test_las_point.cpp Add unit tests for LASPoint and LASClassification.
src/lib/las/tests/test_las_file.cpp Add unit tests for LAS file helpers and LASData behaviors.
src/lib/las/las_file.hpp Add override_crs support; normalize CRS; preserve vertical datum metadata.
src/lib/las/CMakeLists.txt Register LAS unit tests.
src/lib/isom/tests/test_colors.cpp Add unit tests for color types and conversions.
src/lib/isom/CMakeLists.txt Register isom unit tests.
src/lib/io/tests/test_gpkg.cpp Use unique test output paths for gpkg tests.
src/lib/io/gpkg.hpp Fix OGR field creation to avoid heap leaks / ownership issues.
src/lib/io/crs.hpp Add CRS normalization / compound CRS construction utilities.
src/lib/grid/tests/test_grid.cpp Add unit tests for grids/transforms/interpolation/graphs.
src/lib/grid/tests/CMakeLists.txt Register new grid unit tests.
src/lib/grid/grid.hpp Extend GeoProjection to carry optional compound WKT.
src/lib/contour/tests/test_contour_ops.cpp Add tests for contour joining/trimming and conversions.
src/lib/contour/tests/CMakeLists.txt Register contour ops unit tests.
src/lib/contour/contour_gen.hpp Rework join_contours logic for orientation-preserving joins.
src/lib/config_input/tests/test_config_paths.cpp Add tests for config path resolution and config edge cases.
src/lib/config_input/tests/test_config_lookup.cpp Add tests for config lookup/selection logic.
src/lib/config_input/config_input.hpp Add tile_size + override_crs configuration options.
src/lib/config_input/config_input.cpp Serialize/deserialize new config fields; harden optional color parsing.
src/lib/config_input/CMakeLists.txt Register config_input unit tests.
src/lib/assert/assert.hpp Make assertion macros single-statement-safe; add unlikely annotations.
src/lib/CMakeLists.txt Add new subdirectories (las, vegetation) to build.
src/gui/main_window.cpp Warn users about low point density before running.
src/gui/config_editor.ui Add LAS stats label; add tile_size and override_crs UI fields.
src/gui/config_editor.hpp Cache LAS stats; track overlap/CRS flags; add tile-size status helpers.
src/gui/config_editor.cpp Compute LAS stats + overlap detection; enforce tile_size when required.
src/blaze.cpp Add top-level exception handling; fix CLI argument flow.
src/CMakeLists.txt Use explicit source paths in target_sources.
scripts/install-ubuntu-deps.sh Switch to apt-get; add toolchain + BLAS/LAPACK deps.
qgis_plugin/tests/test_infer_crs.py Add pytest coverage for CRS inference parsing.
qgis_plugin/tests/test_contour_merge.py Add regression test for gpkg contour merge fid-field issue.
qgis_plugin/tests/conftest.py Mock QGIS modules to allow headless pytest runs.
qgis_plugin/tests/init.py Add tests package marker.
qgis_plugin/blaze_loader/blaze_loader.py Replace success popup with richer summary dialog; adjust execution flow.
cmake/FindDependencyDLLs.cmake Improve Windows DLL copying (vcpkg and non-vcpkg).
README.md Simplify header markup and badges.
CMakeLists.txt Improve Windows dependency scanning; Qt deployment; las++ fetch options; test discovery timeout.
.gitignore Ignore additional test LAZ inputs/outputs.
.github/workflows/release-app.yml Update vcpkg caching; add install-and-smoke-test steps for packages.
.github/workflows/qgis-plugin-test.yml Run plugin script via python; add topo download skip env var.
.github/workflows/coverage.yml Increase timeout; switch to cached apt action; handle BLAS/LAPACK correctly.
.github/workflows/cleanup-artifacts.yml Add scheduled artifact cleanup workflow.
.github/workflows/build.yml Increase timeouts; switch to cached apt action; handle BLAS/LAPACK correctly; PDAL job updates.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/gui/config_editor.cpp
Comment thread src/run.cpp Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses ground estimation bias on sloped terrain, adds tiled processing support for overlapping/mixed-CRS LAS inputs (with CRS normalization + optional vertical CRS preservation for DEMs), and expands test coverage across core geometry/grid/LAS/vegetation/contour components.

Changes:

  • Fix slope-related ground bias by adjusting the per-bin ground estimate and add an E2E slope regression test.
  • Add tiled-mode processing (and GUI support) to correctly handle overlapping LAS/LAZ inputs and mixed CRSes, including reprojection and vertical CRS metadata for DEM outputs.
  • Improve build/packaging reliability (Windows DLL copying, Qt deploy), update vcpkg features, and add extensive new unit tests (C++ + Python plugin).

Reviewed changes

Copilot reviewed 56 out of 58 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
vcpkg.json Pin/trim dependency features for GDAL/OpenCV/Qt to stabilize builds.
src/tests/test_e2e.cpp Use unique test output dirs/env wrappers; add slope ground-estimation E2E test.
src/run.cpp Introduce tiling workflow, overlap/CRS detection warnings, combine-from-tile dirs, and DEM vertical CRS output.
src/process.cpp Fix binning bounds handling; adjust ground-to-slope bias; include vertical CRS in DEM TIF writes.
src/lib/vegetation/tests/test_vegetation.cpp Add unit tests for low_pass() behavior.
src/lib/vegetation/CMakeLists.txt Register vegetation tests in unit test target.
src/lib/utilities/tests/test_coordinate.cpp Add unit tests for Coordinate/Direction/Extent helpers.
src/lib/utilities/coordinate.hpp Add Coordinate2D::round_down(), Extent2D::overlaps(), and fix Coordinate3D z typing/accessor.
src/lib/utilities/CMakeLists.txt Register coordinate tests in utilities test target.
src/lib/tif/tif.hpp Extend write_to_tif() API to optionally include vertical CRS.
src/lib/tif/tif.cpp Normalize CRS on read; write compound CRS when requested; update explicit instantiations.
src/lib/testing/output_dir.hpp Add unique temp output dir/path helpers for tests.
src/lib/testing/env.hpp Add getenv wrapper to avoid MSVC warnings in tests.
src/lib/las/tile_mode.hpp Add tile-mode planning, overlap/CRS analysis, and tile reads with reprojection.
src/lib/las/tests/test_las_point.cpp Add LASPoint/LASClassification unit tests.
src/lib/las/tests/test_las_file.cpp Add LASFile/LASData utility unit tests (borders, rounding, bounds behavior).
src/lib/las/las_file.hpp Add override_crs support, CRS normalization/compound CRS preservation, and laspp reader updates.
src/lib/las/CMakeLists.txt Register LAS tests in unit test target.
src/lib/isom/tests/test_colors.cpp Add color conversion/operator unit tests.
src/lib/isom/CMakeLists.txt Register isom color tests.
src/lib/io/tests/test_gpkg.cpp Use unique test output paths for GPKG tests.
src/lib/io/gpkg.hpp Fix OGRFieldDefn lifetime/leaks by using stack defs for CreateField().
src/lib/io/crs.hpp Add CRS normalization, compound CRS reconstruction, and user CRS parsing helpers.
src/lib/grid/tests/test_grid.cpp Add grid/transform/graph unit tests.
src/lib/grid/tests/CMakeLists.txt Register new grid tests.
src/lib/contour/tests/test_contour_ops.cpp Add unit tests for contour joining/trimming/polyline conversions.
src/lib/contour/tests/CMakeLists.txt Register contour ops tests.
src/lib/contour/contour_gen.hpp Rewrite join_contours() logic with orientation-preserving nearest-neighbor joining.
src/lib/config_input/tests/test_config_paths.cpp Add tests for config path resolution and edge cases.
src/lib/config_input/tests/test_config_lookup.cpp Add tests for contour/water/vegetation config lookup behaviors.
src/lib/config_input/config_input.hpp Add tile_size and override_crs config fields (documented).
src/lib/config_input/config_input.cpp Serialize/deserialize tile_size + override_crs; make colors optional on load.
src/lib/config_input/CMakeLists.txt Register config_input tests.
src/lib/assert/assert.hpp Fix macro safety (do/while); add [[unlikely]] and make assertion throwing consistent.
src/lib/CMakeLists.txt Add las and vegetation subdirectories to library build.
src/gui/main_window.cpp Add pre-run warning dialog for low average points per bin.
src/gui/config_editor.ui Add LAS stats label; add tile_size + override CRS UI fields; small layout tweaks.
src/gui/config_editor.hpp Add cached LAS stats API and tile-mode UI/validation helpers.
src/gui/config_editor.cpp Add scrollable tabs, LAS stats computation, tile-size requirement validation, override CRS handling.
src/blaze.cpp Wrap CLI in try/catch; improve error handling/exit codes.
src/CMakeLists.txt Use absolute source paths for target_sources().
scripts/install-ubuntu-deps.sh Switch to apt-get; add compiler + LAPACK/BLAS deps.
qgis_plugin/tests/test_infer_crs.py Add pytest coverage for CRS inference helper (plugin).
qgis_plugin/tests/test_contour_merge.py Add regression tests for GeoPackage contour merge and fid-field conflict.
qgis_plugin/tests/conftest.py Mock QGIS modules and load create_qgis_project.py for pure-function testing.
qgis_plugin/tests/init.py Initialize plugin test package.
qgis_plugin/blaze_loader/blaze_loader.py Improve run flow and add a structured summary dialog (with escaped output).
cmake/FindDependencyDLLs.cmake Generalize Windows runtime DLL copying (vcpkg + non-vcpkg).
README.md Simplify header formatting for better Markdown rendering.
CMakeLists.txt Improve Windows dependency scanning; adjust Qt deployment to avoid races; update las++ pin; enable vcpkg DLL copying; increase gtest discovery timeout.
.gitignore Ignore new test LAZ folders/output patterns.
.github/workflows/release-app.yml Update vcpkg binary cache strategy; add install-and-smoke-test steps for packages; improve apt caching notes.
.github/workflows/qgis-plugin-test.yml Run PyQGIS script directly via python; add skip topo download env var; simplify artifact check.
.github/workflows/coverage.yml Switch to cache-apt-pkgs; add LAPACK/BLAS install workaround; extend timeout.
.github/workflows/cleanup-artifacts.yml Add scheduled artifact cleanup workflow.
.github/workflows/build.yml Switch to cache-apt-pkgs; add LAPACK/BLAS install workaround; extend timeouts; remove obsolete vcpkg cache env.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/gui/config_editor.cpp
Comment thread src/gui/config_editor.cpp Outdated
Comment on lines +450 to +454
std::string override_wkt;
try {
override_wkt = user_crs_to_wkt(m_config->override_crs);
} catch (const std::exception&) {
}
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces tiled processing and improved CRS handling for LAS/LAZ inputs, updates DEM/vegetation/contour resolution configuration, and adjusts raster outputs to optionally preserve vertical datums (compound CRS) for elevation products.

Changes:

  • Add tiled processing support (including overlap/mixed-CRS detection and on-the-fly reprojection during tile reads).
  • Extend CRS handling end-to-end (override CRS support, normalized WKT, compound WKT preservation, optional vertical CRS emission in GeoTIFFs).
  • Expand configuration and GUI to support separate vegetation/contour resolutions, plus add substantial unit test coverage and CI/build improvements.

Reviewed changes

Copilot reviewed 69 out of 71 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
vcpkg.json Pins/curates vcpkg features for GDAL/OpenCV/Qt dependencies.
src/run.cpp Switches tile processing to planned tiles (incl. overlap/mixed-CRS detection and combine-dir filtering).
src/process.cpp Slope/ground adjustments, vegetation aggregation, contour DEM downsampling, and vertical-CRS-aware DEM outputs.
src/methods/water/water.cpp Reworks catchment size computation to a dependency-count + queue approach.
src/lib/utilities/coordinate.hpp Adds round_down(), fixes Coordinate3D z storage/type, and adds Extent2D::overlaps().
src/lib/tif/tif.hpp, src/lib/tif/tif.cpp Adds include_vertical_crs option to GeoTIFF writer and improves projection parsing.
src/lib/io/crs.hpp Introduces CRS normalization, user CRS parsing, and WKT equivalence utilities.
src/lib/las/las_file.hpp, src/lib/las/tile_mode.hpp Adds override-CRS aware projection handling and tiling/reprojection utilities.
src/lib/config_input/config_input.hpp, src/lib/config_input/config_input.cpp Adds new grid resolutions + tile/override CRS config fields; updates JSON (de)serialization.
src/gui/* Adds GUI support for new config fields, input stats, and tile-size requirement warnings; improves layout/scrolling.
src/lib/testing/* Adds unique temp output path helpers for tests.
src/lib/*/tests/*, src/lib/*/CMakeLists.txt Adds multiple new gtest suites and wires them into the build.
.github/workflows/*, scripts/*, cmake/*, .gitignore, README.md, docs/*, configs/*, assets/default_config.json Build/test/packaging improvements and documentation/config updates for new behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/lib/utilities/coordinate.hpp
@ryanstocks00 ryanstocks00 merged commit 6e382bf into main May 3, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants