From c7d50fd79f727cddad797523ab5f28168b8904e0 Mon Sep 17 00:00:00 2001 From: Alain Emilia Anna Zscheile Date: Fri, 3 Jan 2025 19:52:40 +0100 Subject: [PATCH] refactor(geometry::poly): PolyShape should be equal to Polygon --- crates/topola-egui/src/overlay.rs | 2 +- crates/topola-egui/src/painter.rs | 7 +++- crates/topola-egui/src/viewport.rs | 7 +--- src/autorouter/ratsnest.rs | 2 +- src/board/mod.rs | 2 +- src/geometry/mod.rs | 2 +- src/geometry/poly.rs | 18 +++------ src/geometry/primitive.rs | 5 +-- src/geometry/shape.rs | 9 ++--- src/layout/layout.rs | 2 +- src/layout/poly.rs | 62 +++++++++++++++--------------- 11 files changed, 52 insertions(+), 66 deletions(-) diff --git a/crates/topola-egui/src/overlay.rs b/crates/topola-egui/src/overlay.rs index 8b687ec..73f007e 100644 --- a/crates/topola-egui/src/overlay.rs +++ b/crates/topola-egui/src/overlay.rs @@ -19,7 +19,7 @@ use topola::{ geometry::shape::{AccessShape, Shape}, graph::{GenericIndex, GetPetgraphIndex}, layout::{ - poly::{MakePolyShape, PolyWeight}, + poly::{MakePolygon, PolyWeight}, via::ViaWeight, CompoundWeight, Layout, NodeIndex, }, diff --git a/crates/topola-egui/src/painter.rs b/crates/topola-egui/src/painter.rs index 65d0f05..edc53a5 100644 --- a/crates/topola-egui/src/painter.rs +++ b/crates/topola-egui/src/painter.rs @@ -5,7 +5,10 @@ use geo::{CoordsIter, Point, Polygon}; use rstar::AABB; use topola::{ - geometry::primitive::{AccessPrimitiveShape, PrimitiveShape}, + geometry::{ + primitive::{AccessPrimitiveShape, PrimitiveShape}, + shape::AccessShape, + }, math::Circle, }; @@ -54,7 +57,7 @@ impl<'a> Painter<'a> { self.ui.painter().add(epaint_shape); if self.paint_bboxes { - self.paint_bbox(AccessPrimitiveShape::bbox(shape, 0.0)); + self.paint_bbox(AccessShape::bbox(shape, 0.0)); } } diff --git a/crates/topola-egui/src/viewport.rs b/crates/topola-egui/src/viewport.rs index d931604..6648dcf 100644 --- a/crates/topola-egui/src/viewport.rs +++ b/crates/topola-egui/src/viewport.rs @@ -19,7 +19,7 @@ use topola::{ primitive::MakePrimitiveShape, }, geometry::{shape::AccessShape, GenericNode}, - layout::{poly::MakePolyShape, via::ViaWeight}, + layout::{poly::MakePolygon, via::ViaWeight}, math::Circle, }; @@ -175,10 +175,7 @@ impl Viewport { .normal }; - painter.paint_polygon( - &board.layout().poly(poly).shape().polygon, - color, - ) + painter.paint_polygon(&board.layout().poly(poly).shape(), color) } } } diff --git a/src/autorouter/ratsnest.rs b/src/autorouter/ratsnest.rs index 6b7b1dc..f500124 100644 --- a/src/autorouter/ratsnest.rs +++ b/src/autorouter/ratsnest.rs @@ -30,7 +30,7 @@ use crate::{ geometry::shape::AccessShape, graph::{GenericIndex, GetPetgraphIndex}, layout::{ - poly::{MakePolyShape, PolyWeight}, + poly::{MakePolygon, PolyWeight}, Layout, }, triangulation::{GetTrianvertexNodeIndex, Triangulation}, diff --git a/src/board/mod.rs b/src/board/mod.rs index eb00fea..904e47a 100644 --- a/src/board/mod.rs +++ b/src/board/mod.rs @@ -28,7 +28,7 @@ use crate::{ geometry::{edit::ApplyGeometryEdit, shape::AccessShape, GenericNode}, graph::GenericIndex, layout::{ - poly::{GetMaybeApex, MakePolyShape, PolyWeight}, + poly::{GetMaybeApex, MakePolygon, PolyWeight}, CompoundWeight, Layout, LayoutEdit, NodeIndex, }, math::Circle, diff --git a/src/geometry/mod.rs b/src/geometry/mod.rs index e445f31..a17e316 100644 --- a/src/geometry/mod.rs +++ b/src/geometry/mod.rs @@ -6,7 +6,7 @@ mod geometry; pub mod compound; pub mod edit; -pub mod poly; +mod poly; pub mod primitive; pub mod recording_with_rtree; pub mod shape; diff --git a/src/geometry/poly.rs b/src/geometry/poly.rs index e16877c..85833b7 100644 --- a/src/geometry/poly.rs +++ b/src/geometry/poly.rs @@ -8,16 +8,11 @@ use rstar::AABB; use crate::geometry::shape::{AccessShape, MeasureLength}; -#[derive(Debug, Clone, PartialEq)] -pub struct PolyShape { - pub polygon: Polygon, -} - -impl MeasureLength for PolyShape { +impl MeasureLength for Polygon { fn length(&self) -> f64 { let mut length = 0.0; - for line in self.polygon.exterior().lines() { + for line in self.exterior().lines() { length += line.length::(); } @@ -25,19 +20,18 @@ impl MeasureLength for PolyShape { } } -impl AccessShape for PolyShape { +impl AccessShape for Polygon { fn center(&self) -> Point { - self.polygon.centroid().unwrap() + self.centroid().unwrap() } fn contains_point(&self, p: Point) -> bool { - self.polygon.contains(&p) + self.contains(&p) } fn bbox_without_margin(&self) -> AABB<[f64; 2]> { AABB::from_points( - self.polygon - .exterior() + self.exterior() .0 .iter() .map(|coord| [coord.x, coord.y]) diff --git a/src/geometry/primitive.rs b/src/geometry/primitive.rs index c62625d..f7ec432 100644 --- a/src/geometry/primitive.rs +++ b/src/geometry/primitive.rs @@ -166,10 +166,7 @@ impl AccessShape for SegShape { } fn bbox_without_margin(&self) -> AABB<[f64; 2]> { - super::poly::PolyShape { - polygon: self.polygon(), - } - .bbox_without_margin() + self.polygon().bbox_without_margin() } } diff --git a/src/geometry/shape.rs b/src/geometry/shape.rs index 3359023..7979d55 100644 --- a/src/geometry/shape.rs +++ b/src/geometry/shape.rs @@ -3,13 +3,10 @@ // SPDX-License-Identifier: MIT use enum_dispatch::enum_dispatch; -use geo::Point; +use geo::{Point, Polygon}; use rstar::AABB; -use crate::geometry::{ - poly::PolyShape, - primitive::{BendShape, DotShape, PrimitiveShape, SegShape}, -}; +use crate::geometry::primitive::{BendShape, DotShape, PrimitiveShape, SegShape}; #[enum_dispatch] pub trait MeasureLength { @@ -37,7 +34,7 @@ pub enum Shape { Dot(DotShape), Seg(SegShape), Bend(BendShape), - Poly(PolyShape), + Poly(Polygon), } impl From for Shape { diff --git a/src/layout/layout.rs b/src/layout/layout.rs index 8c6666a..3cef6f3 100644 --- a/src/layout/layout.rs +++ b/src/layout/layout.rs @@ -27,7 +27,7 @@ use crate::{ geometry::{edit::ApplyGeometryEdit, shape::Shape, GenericNode}, graph::{GenericIndex, GetPetgraphIndex}, layout::{ - poly::{MakePolyShape, Poly, PolyWeight}, + poly::{MakePolygon, Poly, PolyWeight}, via::{Via, ViaWeight}, }, }; diff --git a/src/layout/poly.rs b/src/layout/poly.rs index cde9192..23b3808 100644 --- a/src/layout/poly.rs +++ b/src/layout/poly.rs @@ -16,14 +16,14 @@ use crate::{ rules::AccessRules, seg::SegIndex, }, - geometry::{poly::PolyShape, GetPos}, + geometry::GetPos, graph::{GenericIndex, GetPetgraphIndex}, layout::{CompoundWeight, Layout}, }; #[enum_dispatch] -pub trait MakePolyShape { - fn shape(&self) -> PolyShape; +pub trait MakePolygon { + fn shape(&self) -> Polygon; } #[enum_dispatch] @@ -75,37 +75,35 @@ impl<'a, R: AccessRules> GetMaybeNet for Poly<'a, R> { } } -impl<'a, R: AccessRules> MakePolyShape for Poly<'a, R> { - fn shape(&self) -> PolyShape { - PolyShape { - polygon: Polygon::new( - LineString::from( - self.layout - .drawing() - .geometry() - .compound_members(self.index.into()) - .filter_map(|primitive_node| { - let PrimitiveIndex::FixedDot(dot) = primitive_node else { - return None; - }; +impl<'a, R: AccessRules> MakePolygon for Poly<'a, R> { + fn shape(&self) -> Polygon { + Polygon::new( + LineString::from( + self.layout + .drawing() + .geometry() + .compound_members(self.index.into()) + .filter_map(|primitive_node| { + let PrimitiveIndex::FixedDot(dot) = primitive_node else { + return None; + }; - if self.is_apex(dot) { - None - } else { - Some( - self.layout - .drawing() - .geometry() - .dot_weight(dot.into()) - .pos(), - ) - } - }) - .collect::>(), - ), - vec![], + if self.is_apex(dot) { + None + } else { + Some( + self.layout + .drawing() + .geometry() + .dot_weight(dot.into()) + .pos(), + ) + } + }) + .collect::>(), ), - } + vec![], + ) } }