3D terrain mesh
Terrain-like green surface mesh. Use it for elevation and terrain fields. The screenshot is captured from the native Fission chart gallery.
What the chart is for
3D terrain mesh is part of the 3D and GL chart family and is intended for Scene3D mesh vertices and indices. Use it when the visual form makes the user's question faster to answer than a table or a simpler chart would.
Avoid it when the visual form makes the user estimate more than necessary; choose the simplest chart that answers the product question.
Data model
Scene3D mesh vertices and indices. Keep the data close to the Rust type that describes it. Fission Charts is typed Rust, so each chart uses explicit series and component structs instead of string configuration hidden in a loosely typed object.
Rust API
| | |
|---|
| | Names the chart for the screen, accessibility tree, and test output. |
| | Defines native 3D primitives, camera, light, and material data. |
| | Optional fixed size; omit them when the scene should flex inside Fission layout. |
Example
use fission::three_d::{Scene3D, Vec3};
let scene = Scene3D::new()
.size(720.0, 420.0)
.camera(Vec3::new(3.5, 2.6, 5.0), Vec3::ZERO)
.ambient_light(0.45);
Interaction and animation
Charts can emit typed ChartInteractionEvent values when interaction is enabled. Handle those events in a reducer when the app needs hover, press, release, scroll, selection, or brush behavior. ChartAnimation stores duration, delay, stagger, easing, and reduced-motion behavior as deterministic chart data, so animation timing can be tested instead of being hidden in ad-hoc timers.
Testing guidance
For this chart, test the data mapping first, then test lowering, then capture a live screenshot when visual output changes. The screenshot for this page is refreshed by running the ignored chart-gallery screenshot capture test with FISSION_UPDATE_CHART_DOCS=1, which updates documentation/static/img/charts before the static site build.
Authoring from a Fission component
Use this reference page as the chart expression inside ordinary Fission component conversion. The chart is a Widget, so it can sit inside a Card, Grid, Scroll, responsive page section, or any other layout container.
use fission::prelude::*;
use fission::charts::{Axis, Chart, LineSeries};
pub struct Fission3DTerrainMeshChart;
impl From<Fission3DTerrainMeshChart> for Widget {
fn from(_: Fission3DTerrainMeshChart) -> Widget {
Chart::new()
.title("3D terrain mesh")
.x_axis(Axis::category(vec!["A", "B", "C"]))
.y_axis(Axis::value())
.series(vec![LineSeries::new("Series").data(vec![1.0, 2.0, 3.0]).into()])
.into()
}
}
Keep expensive data loading outside component conversion. A reducer, job, service, or server route should prepare the typed chart data, then the component should read that state and construct the chart deterministically.
Options, accessibility, and diagnostics
| | |
|---|
| Keep source rows in typed Rust structs, then map them into the series type shown in the example. | Unit test the mapping separately from rendering. |
| Choose axes, legends, labels, animation, and interaction based on the user's task. | Add a screenshot test when changing visual behavior. |
| Provide a clear title and adjacent summary text for important trends or outliers. | Inspect the generated semantics and make sure the chart is understandable without color alone. |
| Render an empty, loading, or error state before constructing the chart if data is unavailable. | Test empty data, partial data, and failed fetches. |
| Prefer summarized or windowed data for very large datasets; keep full raw history in the data layer. | Profile frame time and interaction latency with representative data volumes. |
Tags: 3d, terrain.
3D and GL family overview