1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use std::fmt::Debug;
use crate::{objects::Objects, services::Service};
use super::FullToPartialCache;
pub trait HasPartial {
type Partial: PartialObject<Full = Self>;
}
pub trait PartialObject: Clone + Debug + Default {
type Full: HasPartial<Partial = Self>;
fn from_full(full: &Self::Full, cache: &mut FullToPartialCache) -> Self;
fn build(self, objects: &mut Service<Objects>) -> Self::Full;
}
macro_rules! impl_trait {
($($full:ident, $partial:ident;)*) => {
$(
impl HasPartial for crate::objects::$full {
type Partial = super::$partial;
}
)*
};
}
impl_trait!(
Curve, PartialCurve;
Cycle, PartialCycle;
Face, PartialFace;
GlobalCurve, PartialGlobalCurve;
GlobalEdge, PartialGlobalEdge;
GlobalVertex, PartialGlobalVertex;
HalfEdge, PartialHalfEdge;
Shell, PartialShell;
Sketch, PartialSketch;
Solid, PartialSolid;
Surface, PartialSurface;
SurfaceVertex, PartialSurfaceVertex;
Vertex, PartialVertex;
);