Skip to main content

rscad_core/transformations/
projection.rs

1use crate::prelude_::*;
2#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4#[cfg_attr(feature = "reflect", derive(bevy_reflect::Reflect))]
5pub struct Projection<T: Object> {
6    pub object: T,
7    pub cut: bool,
8}
9
10impl<T: Object> Projection<T> {
11    pub fn new(object: T, cut: bool) -> Self {
12        Self { object, cut }
13    }
14
15    pub fn cut(self, cut: bool) -> Projection<T> {
16        Projection::new(self.object, cut)
17    }
18}
19
20pub trait ProjectionObject<T: Object>: Object + Sized {
21    fn project(self) -> Projection<Self> {
22        Projection::new(self, false)
23    }
24}
25
26impl<T: Object> ProjectionObject<T> for T {}
27
28impl<T: Object> Object for Projection<T> {}