#![allow(dead_code)]
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct GridConfig {
pub spacing: f32,
pub line_count: u32,
pub color: [f32; 4],
pub opacity: f32,
pub extent: f32,
}
impl Default for GridConfig {
fn default() -> Self {
GridConfig {
spacing: 1.0,
line_count: 20,
color: [0.5, 0.5, 0.5, 1.0],
opacity: 0.6,
extent: 10.0,
}
}
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct GridVisualizer {
pub config: GridConfig,
pub enabled: bool,
}
#[allow(dead_code)]
pub fn new_grid_visualizer() -> GridVisualizer {
GridVisualizer { config: GridConfig::default(), enabled: true }
}
#[allow(dead_code)]
pub fn default_grid_config() -> GridConfig {
GridConfig::default()
}
#[allow(dead_code)]
pub fn grid_line_count(gv: &GridVisualizer) -> u32 {
gv.config.line_count * 2
}
#[allow(dead_code)]
pub fn grid_vertex_at(gv: &GridVisualizer, i: u32) -> [[f32; 3]; 2] {
let half = gv.config.line_count as f32 / 2.0;
let offset = (i as f32 - half) * gv.config.spacing;
let ext = gv.config.extent;
[[offset, 0.0, -ext], [offset, 0.0, ext]]
}
#[allow(dead_code)]
pub fn grid_color(gv: &GridVisualizer) -> [f32; 4] {
gv.config.color
}
#[allow(dead_code)]
pub fn grid_spacing(gv: &GridVisualizer) -> f32 {
gv.config.spacing
}
#[allow(dead_code)]
pub fn grid_opacity(gv: &GridVisualizer) -> f32 {
gv.config.opacity
}
#[allow(dead_code)]
pub fn grid_extent(gv: &GridVisualizer) -> f32 {
gv.config.extent
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_new_grid_visualizer_enabled() {
let gv = new_grid_visualizer();
assert!(gv.enabled);
}
#[test]
fn test_grid_line_count() {
let gv = new_grid_visualizer();
assert_eq!(grid_line_count(&gv), 40);
}
#[test]
fn test_grid_spacing() {
let gv = new_grid_visualizer();
assert!((grid_spacing(&gv) - 1.0).abs() < 1e-6);
}
#[test]
fn test_grid_opacity() {
let gv = new_grid_visualizer();
assert!(grid_opacity(&gv) > 0.0 && grid_opacity(&gv) <= 1.0);
}
#[test]
fn test_grid_extent() {
let gv = new_grid_visualizer();
assert!((grid_extent(&gv) - 10.0).abs() < 1e-6);
}
#[test]
fn test_grid_color_alpha() {
let gv = new_grid_visualizer();
let c = grid_color(&gv);
assert!((c[3] - 1.0).abs() < 1e-6);
}
#[test]
fn test_grid_vertex_symmetry() {
let gv = new_grid_visualizer();
let n = gv.config.line_count;
let v0 = grid_vertex_at(&gv, 0);
let v1 = grid_vertex_at(&gv, n - 1);
assert!(v0[0][0] < v1[0][0] || v0[0][0] <= v1[0][0]);
}
#[test]
fn test_default_grid_config() {
let c = default_grid_config();
assert!(c.line_count > 0);
}
}