umya_spreadsheet/structs/drawing/
scene_3d_type.rs1use 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 write_start_tag(writer, "a:scene3d", vec![], false);
89
90 if let Some(v) = &self.camera {
92 v.write_to(writer);
93 }
94
95 if let Some(v) = &self.light_rig {
97 v.write_to(writer);
98 }
99
100 write_end_tag(writer, "a:scene3d");
101 }
102}