umya_spreadsheet/structs/drawing/charts/
view_3d.rs1use 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 write_start_tag(writer, "c:view3D", vec![], false);
118
119 if let Some(v) = &self.rotate_x {
121 v.write_to(writer);
122 }
123
124 if let Some(v) = &self.rotate_y {
126 v.write_to(writer);
127 }
128
129 if let Some(v) = &self.right_angle_axes {
131 v.write_to(writer);
132 }
133
134 if let Some(v) = &self.perspective {
136 v.write_to(writer);
137 }
138
139 write_end_tag(writer, "c:view3D");
140 }
141}