diff --git a/src/drawing/drawing.rs b/src/drawing/drawing.rs index 1bebe4b..5087fda 100644 --- a/src/drawing/drawing.rs +++ b/src/drawing/drawing.rs @@ -888,6 +888,10 @@ impl CompoundManagerTrait> for Dra .add_to_compound(primitive, compound); } + fn compound_weight(&self, compound: GenericIndex) -> CW { + self.geometry_with_rtree.compound_weight(compound) + } + fn compounds(&self, node: GenericIndex) -> impl Iterator> { self.geometry_with_rtree.compounds(node) } diff --git a/src/drawing/graph.rs b/src/drawing/graph.rs index e8e7e99..3651e6a 100644 --- a/src/drawing/graph.rs +++ b/src/drawing/graph.rs @@ -83,6 +83,8 @@ macro_rules! impl_loose_weight { }; } +// TODO: This enum shouldn't exist: we shouldn't be carrying the tag around like this. Instead we +// should be getting it from the graph when it's needed. #[enum_dispatch(GetNodeIndex, MakePrimitive)] #[derive(Debug, Hash, Clone, Copy, PartialEq, Eq)] pub enum PrimitiveIndex { diff --git a/src/geometry/compound.rs b/src/geometry/compound.rs index e153cb4..c80873a 100644 --- a/src/geometry/compound.rs +++ b/src/geometry/compound.rs @@ -4,5 +4,6 @@ pub trait CompoundManagerTrait { fn add_compound(&mut self, weight: CW) -> GenericIndex; fn remove_compound(&mut self, compound: GenericIndex); fn add_to_compound(&mut self, node: GenericIndex, compound: GenericIndex); + fn compound_weight(&self, node: GenericIndex) -> CW; fn compounds(&self, node: GenericIndex) -> impl Iterator>; } diff --git a/src/geometry/geometry.rs b/src/geometry/geometry.rs index 84f376c..af2c21d 100644 --- a/src/geometry/geometry.rs +++ b/src/geometry/geometry.rs @@ -507,6 +507,16 @@ impl< ); } + fn compound_weight(&self, compound: GenericIndex) -> CW { + if let GenericNode::Compound(weight) = + *self.graph.node_weight(compound.node_index()).unwrap() + { + weight + } else { + unreachable!() + } + } + fn compounds(&self, node: GenericIndex) -> impl Iterator> { self.graph .neighbors(node.node_index()) diff --git a/src/geometry/with_rtree.rs b/src/geometry/with_rtree.rs index 7b6d263..77a1bda 100644 --- a/src/geometry/with_rtree.rs +++ b/src/geometry/with_rtree.rs @@ -408,6 +408,10 @@ impl< self.geometry.add_to_compound(primitive, compound); } + fn compound_weight(&self, compound: GenericIndex) -> CW { + self.geometry.compound_weight(compound) + } + fn compounds(&self, node: GenericIndex) -> impl Iterator> { self.geometry.compounds(node) } diff --git a/src/layout/layout.rs b/src/layout/layout.rs index 9637de6..3f8cd2b 100644 --- a/src/layout/layout.rs +++ b/src/layout/layout.rs @@ -236,6 +236,10 @@ impl CompoundManagerTrait> f self.drawing.add_to_compound(primitive, compound); } + fn compound_weight(&self, compound: GenericIndex) -> ZoneWeight { + self.drawing.compound_weight(compound) + } + fn compounds( &self, node: GenericIndex,