umya_spreadsheet/structs/drawing/charts/
view_3d.rs

1// c:view3D
2use super::Perspective;
3use super::RightAngleAxes;
4use super::RotateX;
5use super::RotateY;
6use crate::reader::driver::*;
7use crate::writer::driver::*;
8use quick_xml::events::{BytesStart, Event};
9use quick_xml::Reader;
10use quick_xml::Writer;
11use std::io::Cursor;
12
13#[derive(Clone, Default, Debug)]
14pub struct View3D {
15    rotate_x: Option<RotateX>,
16    rotate_y: Option<RotateY>,
17    right_angle_axes: Option<RightAngleAxes>,
18    perspective: Option<Perspective>,
19}
20
21impl View3D {
22    pub fn get_rotate_x(&self) -> Option<&RotateX> {
23        self.rotate_x.as_ref()
24    }
25
26    pub fn get_rotate_x_mut(&mut self) -> Option<&mut RotateX> {
27        self.rotate_x.as_mut()
28    }
29
30    pub fn set_rotate_x(&mut self, value: RotateX) -> &mut View3D {
31        self.rotate_x = Some(value);
32        self
33    }
34
35    pub fn get_rotate_y(&self) -> Option<&RotateY> {
36        self.rotate_y.as_ref()
37    }
38
39    pub fn get_rotate_y_mut(&mut self) -> Option<&mut RotateY> {
40        self.rotate_y.as_mut()
41    }
42
43    pub fn set_rotate_y(&mut self, value: RotateY) -> &mut View3D {
44        self.rotate_y = Some(value);
45        self
46    }
47
48    pub fn get_right_angle_axes(&self) -> Option<&RightAngleAxes> {
49        self.right_angle_axes.as_ref()
50    }
51
52    pub fn get_right_angle_axes_mut(&mut self) -> Option<&mut RightAngleAxes> {
53        self.right_angle_axes.as_mut()
54    }
55
56    pub fn set_right_angle_axes(&mut self, value: RightAngleAxes) -> &mut View3D {
57        self.right_angle_axes = Some(value);
58        self
59    }
60
61    pub fn get_perspective(&self) -> Option<&Perspective> {
62        self.perspective.as_ref()
63    }
64
65    pub fn get_perspective_mut(&mut self) -> Option<&mut Perspective> {
66        self.perspective.as_mut()
67    }
68
69    pub fn set_perspective(&mut self, value: Perspective) -> &mut View3D {
70        self.perspective = Some(value);
71        self
72    }
73
74    pub(crate) fn set_attributes<R: std::io::BufRead>(
75        &mut self,
76        reader: &mut Reader<R>,
77        _e: &BytesStart,
78    ) {
79        xml_read_loop!(
80            reader,
81            Event::Empty(ref e) => {
82                match e.name().0 {
83                    b"c:rotX" => {
84                        let mut obj = RotateX::default();
85                        obj.set_attributes(reader, e);
86                        self.set_rotate_x(obj);
87                    }
88                    b"c:rotY" => {
89                        let mut obj = RotateY::default();
90                        obj.set_attributes(reader, e);
91                        self.set_rotate_y(obj);
92                    }
93                    b"c:rAngAx" => {
94                        let mut obj = RightAngleAxes::default();
95                        obj.set_attributes(reader, e);
96                        self.set_right_angle_axes(obj);
97                    }
98                    b"c:perspective" => {
99                        let mut obj = Perspective::default();
100                        obj.set_attributes(reader, e);
101                        self.set_perspective(obj);
102                    }
103                    _ => (),
104                }
105            },
106            Event::End(ref e) => {
107                if e.name().0 == b"c:view3D" {
108                    return;
109                }
110            },
111            Event::Eof => panic!("Error: Could not find {} end element", "c:view3D")
112        );
113    }
114
115    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
116        // c:view3D
117        write_start_tag(writer, "c:view3D", vec![], false);
118
119        // c:rotX
120        if let Some(v) = &self.rotate_x {
121            v.write_to(writer);
122        }
123
124        // c:rotY
125        if let Some(v) = &self.rotate_y {
126            v.write_to(writer);
127        }
128
129        // c:rAngAx
130        if let Some(v) = &self.right_angle_axes {
131            v.write_to(writer);
132        }
133
134        // c:perspective
135        if let Some(v) = &self.perspective {
136            v.write_to(writer);
137        }
138
139        write_end_tag(writer, "c:view3D");
140    }
141}