oxihuman_viewer/
bone_envelope_debug_view.rs1#![allow(dead_code)]
4
5#[derive(Debug, Clone, Copy, PartialEq)]
9pub enum EnvelopeDisplayMode {
10 Wireframe,
11 Solid,
12 SolidWithEdges,
13}
14
15#[derive(Debug, Clone)]
17pub struct BoneEnvelopeDebugView {
18 pub display_mode: EnvelopeDisplayMode,
19 pub color: [f32; 4],
20 pub opacity: f32,
21 pub show_head_tail: bool,
22 pub enabled: bool,
23}
24
25impl BoneEnvelopeDebugView {
26 pub fn new() -> Self {
27 BoneEnvelopeDebugView {
28 display_mode: EnvelopeDisplayMode::Wireframe,
29 color: [0.0, 0.8, 0.2, 1.0],
30 opacity: 0.5,
31 show_head_tail: true,
32 enabled: true,
33 }
34 }
35}
36
37impl Default for BoneEnvelopeDebugView {
38 fn default() -> Self {
39 Self::new()
40 }
41}
42
43pub fn new_bone_envelope_debug_view() -> BoneEnvelopeDebugView {
45 BoneEnvelopeDebugView::new()
46}
47
48pub fn bedv_set_display_mode(view: &mut BoneEnvelopeDebugView, mode: EnvelopeDisplayMode) {
50 view.display_mode = mode;
51}
52
53pub fn bedv_set_color(view: &mut BoneEnvelopeDebugView, color: [f32; 4]) {
55 view.color = color;
56}
57
58pub fn bedv_set_opacity(view: &mut BoneEnvelopeDebugView, opacity: f32) {
60 view.opacity = opacity.clamp(0.0, 1.0);
61}
62
63pub fn bedv_show_head_tail(view: &mut BoneEnvelopeDebugView, show: bool) {
65 view.show_head_tail = show;
66}
67
68pub fn bedv_set_enabled(view: &mut BoneEnvelopeDebugView, enabled: bool) {
70 view.enabled = enabled;
71}
72
73pub fn bedv_to_json(view: &BoneEnvelopeDebugView) -> String {
75 let mode = match view.display_mode {
76 EnvelopeDisplayMode::Wireframe => "wireframe",
77 EnvelopeDisplayMode::Solid => "solid",
78 EnvelopeDisplayMode::SolidWithEdges => "solid_with_edges",
79 };
80 format!(
81 r#"{{"display_mode":"{}","opacity":{},"show_head_tail":{},"enabled":{}}}"#,
82 mode, view.opacity, view.show_head_tail, view.enabled
83 )
84}
85
86#[cfg(test)]
87mod tests {
88 use super::*;
89
90 #[test]
91 fn test_default_display_mode() {
92 let v = new_bone_envelope_debug_view();
93 assert_eq!(
94 v.display_mode,
95 EnvelopeDisplayMode::Wireframe );
97 }
98
99 #[test]
100 fn test_set_display_mode() {
101 let mut v = new_bone_envelope_debug_view();
102 bedv_set_display_mode(&mut v, EnvelopeDisplayMode::Solid);
103 assert_eq!(
104 v.display_mode,
105 EnvelopeDisplayMode::Solid );
107 }
108
109 #[test]
110 fn test_opacity_clamp() {
111 let mut v = new_bone_envelope_debug_view();
112 bedv_set_opacity(&mut v, 2.0);
113 assert!((v.opacity - 1.0).abs() < 1e-6 );
114 }
115
116 #[test]
117 fn test_show_head_tail() {
118 let mut v = new_bone_envelope_debug_view();
119 bedv_show_head_tail(&mut v, false);
120 assert!(!v.show_head_tail );
121 }
122
123 #[test]
124 fn test_set_color() {
125 let mut v = new_bone_envelope_debug_view();
126 bedv_set_color(&mut v, [1.0, 0.0, 0.0, 1.0]);
127 assert!((v.color[0] - 1.0).abs() < 1e-6 );
128 }
129
130 #[test]
131 fn test_set_enabled() {
132 let mut v = new_bone_envelope_debug_view();
133 bedv_set_enabled(&mut v, false);
134 assert!(!v.enabled );
135 }
136
137 #[test]
138 fn test_to_json_has_display_mode() {
139 let v = new_bone_envelope_debug_view();
140 let j = bedv_to_json(&v);
141 assert!(j.contains("\"display_mode\"") );
142 }
143
144 #[test]
145 fn test_enabled_default() {
146 let v = new_bone_envelope_debug_view();
147 assert!(v.enabled );
148 }
149
150 #[test]
151 fn test_default_opacity() {
152 let v = new_bone_envelope_debug_view();
153 assert!((v.opacity - 0.5).abs() < 1e-6 );
154 }
155}