#[cfg(feature = "serde")]
use serde::Serialize;
use crate::raw::drawing::{
scene::backdrop::{XlsxAnchor, XlsxBackDrop, XlsxVector},
st_types::emu_to_pt,
};
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, PartialEq, Clone)]
pub struct BackDrop {
pub anchor: Anchor,
pub normal: Vector,
pub up: Vector,
}
impl BackDrop {
pub(crate) fn from_raw(raw: Option<XlsxBackDrop>) -> Option<Self> {
let Some(raw) = raw else { return None };
return Some(Self {
anchor: Anchor::from_raw(raw.clone().anchor),
normal: Vector::from_raw(raw.clone().norm),
up: Vector::from_raw(raw.clone().up),
});
}
}
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, PartialEq, Clone)]
pub struct Vector {
pub dx: f64,
pub dy: f64,
pub dz: f64,
}
impl Vector {
pub(crate) fn default() -> Self {
Self {
dx: 0.0,
dy: 0.0,
dz: 0.0,
}
}
pub(crate) fn from_raw(raw: Option<XlsxVector>) -> Self {
let Some(raw) = raw else {
return Self::default();
};
return Self {
dx: emu_to_pt(raw.dx.unwrap_or(0)),
dy: emu_to_pt(raw.dy.unwrap_or(0)),
dz: emu_to_pt(raw.dz.unwrap_or(0)),
};
}
}
#[cfg_attr(feature = "serde", derive(Serialize))]
#[derive(Debug, PartialEq, Clone)]
pub struct Anchor {
pub x: f64,
pub y: f64,
pub z: f64,
}
impl Anchor {
pub(crate) fn default() -> Self {
Self {
x: 0.0,
y: 0.0,
z: 0.0,
}
}
pub(crate) fn from_raw(raw: Option<XlsxAnchor>) -> Self {
let Some(raw) = raw else {
return Self::default();
};
return Self {
x: emu_to_pt(raw.x.unwrap_or(0)),
y: emu_to_pt(raw.y.unwrap_or(0)),
z: emu_to_pt(raw.z.unwrap_or(0)),
};
}
}