rscad_core/transformations/
projection.rs1use 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> {}