Skip to main content

rustial_engine/visualization/
overlay.rs

1//! Tagged enum for `FrameOutput` integration.
2
3use crate::layer::LayerId;
4use super::{ColorRamp, ColumnInstanceSet, GeoGrid, PointInstanceSet, ScalarField2D};
5
6/// Extrusion rendering parameters.
7#[derive(Debug, Clone)]
8pub struct ExtrusionParams {
9    /// Height scaling multiplier applied to scalar values.
10    pub height_scale: f64,
11    /// Base elevation in meters (added to altitude-mode-resolved base).
12    pub base_meters: f64,
13}
14
15impl Default for ExtrusionParams {
16    fn default() -> Self {
17        Self {
18            height_scale: 1.0,
19            base_meters: 0.0,
20        }
21    }
22}
23
24/// A single visualization overlay collected from the layer stack during
25/// [`MapState::update_with_dt`](crate::MapState::update_with_dt).
26///
27/// Renderers read these from [`FrameOutput::visualization`] alongside
28/// terrain, vectors, and models.
29#[derive(Debug, Clone)]
30pub enum VisualizationOverlay {
31    /// Flat georeferenced colour grid.
32    GridScalar {
33        /// Layer identity.
34        layer_id: LayerId,
35        /// Grid geometry.
36        grid: GeoGrid,
37        /// Scalar values.
38        field: ScalarField2D,
39        /// Colour transfer function.
40        ramp: ColorRamp,
41    },
42    /// Extruded georeferenced grid.
43    GridExtrusion {
44        /// Layer identity.
45        layer_id: LayerId,
46        /// Grid geometry.
47        grid: GeoGrid,
48        /// Scalar values driving extrusion height.
49        field: ScalarField2D,
50        /// Colour transfer function.
51        ramp: ColorRamp,
52        /// Extrusion parameters.
53        params: ExtrusionParams,
54    },
55    /// Instanced columns.
56    Columns {
57        /// Layer identity.
58        layer_id: LayerId,
59        /// Column instances.
60        columns: ColumnInstanceSet,
61        /// Colour transfer function (fallback for columns without per-instance colour).
62        ramp: ColorRamp,
63    },
64    /// Point-cloud / scatter instances.
65    Points {
66        /// Layer identity.
67        layer_id: LayerId,
68        /// Point instances.
69        points: PointInstanceSet,
70        /// Colour transfer function (fallback for points without per-instance colour).
71        ramp: ColorRamp,
72    },
73}