#![allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum SymmetryAxis {
X,
Y,
Z,
}
#[derive(Debug, Clone)]
pub struct SymmetryPlaneView {
pub axis: SymmetryAxis,
pub grid_color: [f32; 4],
pub line_width: f32,
pub show_mirror_mesh: bool,
pub enabled: bool,
}
impl SymmetryPlaneView {
pub fn new() -> Self {
SymmetryPlaneView {
axis: SymmetryAxis::X,
grid_color: [0.2, 0.6, 1.0, 0.5],
line_width: 1.0,
show_mirror_mesh: false,
enabled: true,
}
}
}
impl Default for SymmetryPlaneView {
fn default() -> Self {
Self::new()
}
}
pub fn new_symmetry_plane_view() -> SymmetryPlaneView {
SymmetryPlaneView::new()
}
pub fn spv_set_axis(view: &mut SymmetryPlaneView, axis: SymmetryAxis) {
view.axis = axis;
}
pub fn spv_set_color(view: &mut SymmetryPlaneView, color: [f32; 4]) {
view.grid_color = color;
}
pub fn spv_set_line_width(view: &mut SymmetryPlaneView, width: f32) {
view.line_width = width.max(0.1);
}
pub fn spv_show_mirror_mesh(view: &mut SymmetryPlaneView, show: bool) {
view.show_mirror_mesh = show;
}
pub fn spv_set_enabled(view: &mut SymmetryPlaneView, enabled: bool) {
view.enabled = enabled;
}
pub fn spv_to_json(view: &SymmetryPlaneView) -> String {
let ax = match view.axis {
SymmetryAxis::X => "x",
SymmetryAxis::Y => "y",
SymmetryAxis::Z => "z",
};
format!(
r#"{{"axis":"{}","line_width":{},"show_mirror_mesh":{},"enabled":{}}}"#,
ax, view.line_width, view.show_mirror_mesh, view.enabled
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_axis() {
let v = new_symmetry_plane_view();
assert_eq!(v.axis, SymmetryAxis::X );
}
#[test]
fn test_set_axis() {
let mut v = new_symmetry_plane_view();
spv_set_axis(&mut v, SymmetryAxis::Z);
assert_eq!(v.axis, SymmetryAxis::Z );
}
#[test]
fn test_set_color() {
let mut v = new_symmetry_plane_view();
spv_set_color(&mut v, [1.0, 0.0, 0.0, 1.0]);
assert!((v.grid_color[0] - 1.0).abs() < 1e-6 );
}
#[test]
fn test_line_width_min() {
let mut v = new_symmetry_plane_view();
spv_set_line_width(&mut v, -1.0);
assert!((v.line_width - 0.1).abs() < 1e-6 );
}
#[test]
fn test_show_mirror_mesh() {
let mut v = new_symmetry_plane_view();
spv_show_mirror_mesh(&mut v, true);
assert!(v.show_mirror_mesh );
}
#[test]
fn test_set_enabled() {
let mut v = new_symmetry_plane_view();
spv_set_enabled(&mut v, false);
assert!(!v.enabled );
}
#[test]
fn test_to_json_has_axis() {
let v = new_symmetry_plane_view();
let j = spv_to_json(&v);
assert!(j.contains("\"axis\"") );
}
#[test]
fn test_enabled_default() {
let v = new_symmetry_plane_view();
assert!(v.enabled );
}
#[test]
fn test_mirror_default_false() {
let v = new_symmetry_plane_view();
assert!(!v.show_mirror_mesh );
}
}