#![allow(dead_code)]
#[derive(Debug, Clone)]
pub struct TangentBasisView {
pub enabled: bool,
pub scale: f32,
pub show_tangent: bool,
pub show_bitangent: bool,
pub show_normal: bool,
}
pub fn new_tangent_basis_view() -> TangentBasisView {
TangentBasisView {
enabled: false,
scale: 0.03,
show_tangent: true,
show_bitangent: true,
show_normal: false,
}
}
pub fn tbv_enable(v: &mut TangentBasisView) {
v.enabled = true;
}
pub fn tbv_set_scale(v: &mut TangentBasisView, s: f32) {
v.scale = s.max(1e-4);
}
pub fn tbv_set_show_tangent(v: &mut TangentBasisView, show: bool) {
v.show_tangent = show;
}
pub fn tbv_set_show_bitangent(v: &mut TangentBasisView, show: bool) {
v.show_bitangent = show;
}
pub fn tbv_tangent_color() -> [f32; 3] {
[1.0, 0.0, 0.0]
}
pub fn tbv_bitangent_color() -> [f32; 3] {
[0.0, 1.0, 0.0]
}
pub fn tbv_normal_color() -> [f32; 3] {
[0.0, 0.0, 1.0]
}
pub fn tbv_active_channel_count(v: &TangentBasisView) -> u32 {
[v.show_tangent, v.show_bitangent, v.show_normal]
.iter()
.filter(|&&b| b)
.count() as u32
}
pub fn tbv_to_json(v: &TangentBasisView) -> String {
format!(
r#"{{"enabled":{},"scale":{:.4},"show_tangent":{},"show_bitangent":{}}}"#,
v.enabled, v.scale, v.show_tangent, v.show_bitangent
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_defaults() {
let v = new_tangent_basis_view();
assert!((v.scale - 0.03).abs() < 1e-6);
assert!(v.show_tangent);
assert!(v.show_bitangent);
}
#[test]
fn test_enable() {
let mut v = new_tangent_basis_view();
tbv_enable(&mut v);
assert!(v.enabled);
}
#[test]
fn test_set_scale() {
let mut v = new_tangent_basis_view();
tbv_set_scale(&mut v, 0.05);
assert!((v.scale - 0.05).abs() < 1e-6);
}
#[test]
fn test_scale_min() {
let mut v = new_tangent_basis_view();
tbv_set_scale(&mut v, 0.0);
assert!(v.scale > 0.0);
}
#[test]
fn test_tangent_color_red() {
let c = tbv_tangent_color();
assert_eq!(c, [1.0, 0.0, 0.0]);
}
#[test]
fn test_bitangent_color_green() {
let c = tbv_bitangent_color();
assert_eq!(c, [0.0, 1.0, 0.0]);
}
#[test]
fn test_normal_color_blue() {
let c = tbv_normal_color();
assert_eq!(c, [0.0, 0.0, 1.0]);
}
#[test]
fn test_active_channel_count_default() {
let v = new_tangent_basis_view();
assert_eq!(tbv_active_channel_count(&v), 2);
}
#[test]
fn test_to_json() {
assert!(tbv_to_json(&new_tangent_basis_view()).contains("scale"));
}
}