umya_spreadsheet/structs/drawing/
scene_3d_type.rs

1// a:scene3d
2use super::Camera;
3use super::LightRig;
4use crate::reader::driver::*;
5use crate::writer::driver::*;
6use quick_xml::events::{BytesStart, Event};
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10
11#[derive(Clone, Default, Debug)]
12pub struct Scene3DType {
13    camera: Option<Camera>,
14    light_rig: Option<LightRig>,
15}
16
17impl Scene3DType {
18    #[inline]
19    pub fn get_camera(&self) -> Option<&Camera> {
20        self.camera.as_ref()
21    }
22
23    #[inline]
24    pub fn set_camera(&mut self, value: Camera) -> &mut Scene3DType {
25        self.camera = Some(value);
26        self
27    }
28
29    #[inline]
30    pub fn get_light_rig(&self) -> Option<&LightRig> {
31        self.light_rig.as_ref()
32    }
33
34    #[inline]
35    pub fn set_light_rig(&mut self, value: LightRig) -> &mut Scene3DType {
36        self.light_rig = Some(value);
37        self
38    }
39
40    pub(crate) fn set_attributes<R: std::io::BufRead>(
41        &mut self,
42        reader: &mut Reader<R>,
43        _e: &BytesStart,
44    ) {
45        xml_read_loop!(
46            reader,
47            Event::Empty(ref e) => {
48                match e.name().into_inner() {
49                    b"a:camera" => {
50                        let mut obj = Camera::default();
51                        obj.set_attributes(reader, e, true);
52                        self.set_camera(obj);
53                    }
54                    b"a:lightRig" => {
55                        let mut obj = LightRig::default();
56                        obj.set_attributes(reader, e, true);
57                        self.set_light_rig(obj);
58                    }
59                    _ => (),
60                }
61            },
62            Event::Start(ref e) => {
63                match e.name().into_inner() {
64                    b"a:camera" => {
65                        let mut obj = Camera::default();
66                        obj.set_attributes(reader, e, false);
67                        self.set_camera(obj);
68                    }
69                    b"a:lightRig" => {
70                        let mut obj = LightRig::default();
71                        obj.set_attributes(reader, e, false);
72                        self.set_light_rig(obj);
73                    }
74                    _ => (),
75                }
76            },
77            Event::End(ref e) => {
78                if e.name().into_inner() == b"a:scene3d" {
79                    return;
80                }
81            },
82            Event::Eof => panic!("Error: Could not find {} end element", "a:scene3d")
83        );
84    }
85
86    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
87        // a:scene3d
88        write_start_tag(writer, "a:scene3d", vec![], false);
89
90        // a:camera
91        if let Some(v) = &self.camera {
92            v.write_to(writer);
93        }
94
95        // a:lightRig
96        if let Some(v) = &self.light_rig {
97            v.write_to(writer);
98        }
99
100        write_end_tag(writer, "a:scene3d");
101    }
102}