#![allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum PlaneAxis {
XY,
XZ,
YZ,
Custom,
}
#[derive(Debug, Clone)]
pub struct ReferencePlaneView {
pub axis: PlaneAxis,
pub offset: f32,
pub opacity: f32,
pub flip_x: bool,
pub flip_y: bool,
pub enabled: bool,
}
impl ReferencePlaneView {
pub fn new() -> Self {
ReferencePlaneView {
axis: PlaneAxis::XY,
offset: 0.0,
opacity: 0.7,
flip_x: false,
flip_y: false,
enabled: true,
}
}
}
impl Default for ReferencePlaneView {
fn default() -> Self {
Self::new()
}
}
pub fn new_reference_plane_view() -> ReferencePlaneView {
ReferencePlaneView::new()
}
pub fn rfpv_set_axis(view: &mut ReferencePlaneView, axis: PlaneAxis) {
view.axis = axis;
}
pub fn rfpv_set_offset(view: &mut ReferencePlaneView, offset: f32) {
view.offset = offset;
}
pub fn rfpv_set_opacity(view: &mut ReferencePlaneView, opacity: f32) {
view.opacity = opacity.clamp(0.0, 1.0);
}
pub fn rfpv_set_flip(view: &mut ReferencePlaneView, flip_x: bool, flip_y: bool) {
view.flip_x = flip_x;
view.flip_y = flip_y;
}
pub fn rfpv_set_enabled(view: &mut ReferencePlaneView, enabled: bool) {
view.enabled = enabled;
}
pub fn rfpv_to_json(view: &ReferencePlaneView) -> String {
let ax = match view.axis {
PlaneAxis::XY => "xy",
PlaneAxis::XZ => "xz",
PlaneAxis::YZ => "yz",
PlaneAxis::Custom => "custom",
};
format!(
r#"{{"axis":"{}","offset":{},"opacity":{},"flip_x":{},"flip_y":{},"enabled":{}}}"#,
ax, view.offset, view.opacity, view.flip_x, view.flip_y, view.enabled
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_axis() {
let v = new_reference_plane_view();
assert_eq!(v.axis, PlaneAxis::XY );
}
#[test]
fn test_set_axis() {
let mut v = new_reference_plane_view();
rfpv_set_axis(&mut v, PlaneAxis::YZ);
assert_eq!(v.axis, PlaneAxis::YZ );
}
#[test]
fn test_set_offset() {
let mut v = new_reference_plane_view();
rfpv_set_offset(&mut v, 1.5);
assert!((v.offset - 1.5).abs() < 1e-6 );
}
#[test]
fn test_opacity_clamp() {
let mut v = new_reference_plane_view();
rfpv_set_opacity(&mut v, 2.0);
assert!((v.opacity - 1.0).abs() < 1e-6 );
}
#[test]
fn test_set_flip() {
let mut v = new_reference_plane_view();
rfpv_set_flip(&mut v, true, false);
assert!(v.flip_x );
assert!(!v.flip_y );
}
#[test]
fn test_set_enabled() {
let mut v = new_reference_plane_view();
rfpv_set_enabled(&mut v, false);
assert!(!v.enabled );
}
#[test]
fn test_to_json_has_axis() {
let v = new_reference_plane_view();
let j = rfpv_to_json(&v);
assert!(j.contains("\"axis\"") );
}
#[test]
fn test_enabled_default() {
let v = new_reference_plane_view();
assert!(v.enabled );
}
#[test]
fn test_default_opacity() {
let v = new_reference_plane_view();
assert!((v.opacity - 0.7).abs() < 1e-6 );
}
}