rustial_engine/visualization/overlay.rs
1//! Tagged enum for `FrameOutput` integration.
2
3use super::{ColorRamp, ColumnInstanceSet, GeoGrid, PointInstanceSet, ScalarField2D};
4use crate::layer::LayerId;
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}