Skip to main content

viewport_lib/quantities/
mod.rs

1//! On-surface vector quantity utilities.
2//!
3//! Converts intrinsic (tangent-plane) vector fields and edge one-forms into
4//! world-space [`GlyphItem`](crate::GlyphItem)s ready for submission to
5//! [`SceneFrame::glyphs`](crate::renderer::types::SceneFrame::glyphs).
6//!
7//! # Quick-start
8//!
9//! ```rust,ignore
10//! use viewport_lib::quantities::{vertex_intrinsic_to_glyphs, edge_one_form_to_glyphs};
11//!
12//! // Vertex intrinsic vectors : e.g. a tangential vortex field on a sphere.
13//! let glyph = vertex_intrinsic_to_glyphs(
14//!     &mesh.positions,
15//!     &mesh.normals,
16//!     mesh.tangents.as_deref(),
17//!     &intrinsic_vecs,   // &[[f32; 2]] : (u, v) per vertex
18//!     0.3,               // arrow scale
19//! );
20//! frame.scene.glyphs.push(glyph);
21//!
22//! // Edge one-forms : Whitney reconstruction per triangle.
23//! let glyph = edge_one_form_to_glyphs(
24//!     &mesh.positions,
25//!     &mesh.indices,
26//!     &edge_values,      // &[f32] : 3 values per triangle (e01, e12, e20)
27//!     0.3,
28//! );
29//! frame.scene.glyphs.push(glyph);
30//! ```
31//!
32//! # Tangent frames
33//!
34//! All functions accept an optional explicit tangent buffer (`[tx, ty, tz, w]`
35//! format, matching [`MeshData::tangents`](crate::resources::MeshData::tangents)).
36//! When omitted, smooth per-vertex frames are derived from the normals via
37//! Gram-Schmidt orthogonalisation.
38
39pub mod intrinsic_vectors;
40pub mod one_forms;
41pub mod polyline_vectors;
42pub mod tangent_frames;
43pub mod volume_mesh_vectors;
44
45pub use intrinsic_vectors::{face_intrinsic_to_glyphs, vertex_intrinsic_to_glyphs};
46pub use one_forms::edge_one_form_to_glyphs;
47pub use polyline_vectors::{polyline_edge_vectors_to_glyphs, polyline_node_vectors_to_glyphs};
48pub use tangent_frames::{
49    compute_face_tangent_frames, compute_vertex_tangent_frames, tangents_from_explicit,
50};
51pub use volume_mesh_vectors::{
52    volume_mesh_cell_vectors_to_glyphs, volume_mesh_vertex_vectors_to_glyphs,
53};