From 008dcfeca0be5ad82e196cfbfb0bf42b3bba1ad0 Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Fri, 14 Jun 2024 04:58:52 +0200 Subject: [PATCH] geometry: store layer in `usize`, not `u64` --- src/bin/topola-egui/layers.rs | 43 +++++++--------------------------- src/bin/topola-egui/overlay.rs | 2 +- src/board/board.rs | 4 ++++ src/board/mesadata.rs | 6 ++--- src/drawing/bend.rs | 4 ++-- src/drawing/dot.rs | 4 ++-- src/drawing/drawing.rs | 4 ++-- src/drawing/graph.rs | 4 ++-- src/drawing/primitive.rs | 2 +- src/drawing/seg.rs | 6 ++--- src/dsn/design.rs | 26 ++++++++++---------- src/dsn/mesadata.rs | 10 ++++---- src/geometry/primitive.rs | 12 +++++----- src/geometry/with_rtree.rs | 8 +++---- src/layout/layout.rs | 2 +- src/layout/via.rs | 4 ++-- src/layout/zone.rs | 10 ++++---- 17 files changed, 64 insertions(+), 87 deletions(-) diff --git a/src/bin/topola-egui/layers.rs b/src/bin/topola-egui/layers.rs index 5437e82..14f898e 100644 --- a/src/bin/topola-egui/layers.rs +++ b/src/bin/topola-egui/layers.rs @@ -13,63 +13,36 @@ impl Layers { pub fn new(board: &Board) -> Self { let layer_count = board.layout().drawing().layer_count(); let visible = std::iter::repeat(true) - .take(layer_count.try_into().unwrap() /* FIXME */) + .take(layer_count) .collect::>() .into_boxed_slice(); + let colors = std::iter::repeat(egui::Color32::from_rgb(255, 255, 255)) .enumerate() .map(|(i, color)| { - if matches!( - board - .layout() - .drawing() - .rules() - .layer_layername(i.try_into().unwrap() /* FIXME */), - Some("F.Cu") - ) { + if matches!(board.mesadata().layer_layername(i), Some("F.Cu")) { egui::Color32::from_rgb(255, 52, 52) - } else if matches!( - board - .layout() - .drawing() - .rules() - .layer_layername(i.try_into().unwrap() /* FIXME */), - Some("B.Cu") - ) { + } else if matches!(board.mesadata().layer_layername(i), Some("B.Cu")) { egui::Color32::from_rgb(52, 52, 255) } else { color } }) - .take(layer_count.try_into().unwrap() /* FIXME */) + .take(layer_count) .collect::>() .into_boxed_slice(); let highlight_colors = std::iter::repeat(egui::Color32::from_rgb(255, 255, 255)) .enumerate() .map(|(i, color)| { - if matches!( - board - .layout() - .drawing() - .rules() - .layer_layername(i.try_into().unwrap() /* FIXME */), - Some("F.Cu") - ) { + if matches!(board.mesadata().layer_layername(i), Some("F.Cu")) { egui::Color32::from_rgb(255, 100, 100) - } else if matches!( - board - .layout() - .drawing() - .rules() - .layer_layername(i.try_into().unwrap() /* FIXME */), - Some("B.Cu") - ) { + } else if matches!(board.mesadata().layer_layername(i), Some("B.Cu")) { egui::Color32::from_rgb(100, 100, 255) } else { color } }) - .take(layer_count.try_into().unwrap() /* FIXME */) + .take(layer_count) .collect::>() .into_boxed_slice(); diff --git a/src/bin/topola-egui/overlay.rs b/src/bin/topola-egui/overlay.rs index 0e0e2fe..e978f12 100644 --- a/src/bin/topola-egui/overlay.rs +++ b/src/bin/topola-egui/overlay.rs @@ -26,7 +26,7 @@ use topola::{ pub struct Overlay { ratsnest: Ratsnest, selection: Selection, - active_layer: u64, + active_layer: usize, } impl Overlay { diff --git a/src/board/board.rs b/src/board/board.rs index dbe1d9d..28c5b7b 100644 --- a/src/board/board.rs +++ b/src/board/board.rs @@ -179,6 +179,10 @@ impl Board { } } + pub fn mesadata(&self) -> &M { + self.layout.drawing().rules() + } + pub fn layout(&self) -> &Layout { &self.layout } diff --git a/src/board/mesadata.rs b/src/board/mesadata.rs index 54d46a2..fb6af4e 100644 --- a/src/board/mesadata.rs +++ b/src/board/mesadata.rs @@ -1,9 +1,9 @@ use crate::drawing::rules::RulesTrait; pub trait MesadataTrait: RulesTrait { - fn bename_layer(&mut self, layer: u64, layername: String); - fn layer_layername(&self, layer: u64) -> Option<&str>; - fn layername_layer(&self, layername: &str) -> Option; + fn bename_layer(&mut self, layer: usize, layername: String); + fn layer_layername(&self, layer: usize) -> Option<&str>; + fn layername_layer(&self, layername: &str) -> Option; fn bename_net(&mut self, net: usize, netname: String); fn net_netname(&self, net: usize) -> Option<&str>; diff --git a/src/drawing/bend.rs b/src/drawing/bend.rs index 0fd68d3..9ee4d37 100644 --- a/src/drawing/bend.rs +++ b/src/drawing/bend.rs @@ -75,7 +75,7 @@ impl BendWeightTrait for BendWeight {} pub struct FixedBendWeight { pub width: f64, pub offset: f64, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } @@ -104,7 +104,7 @@ impl GetWidth for FixedBendWeight { pub struct LooseBendWeight { pub width: f64, pub offset: f64, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } diff --git a/src/drawing/dot.rs b/src/drawing/dot.rs index 7b19fb7..0fb2982 100644 --- a/src/drawing/dot.rs +++ b/src/drawing/dot.rs @@ -76,7 +76,7 @@ impl DotWeightTrait for DotWeight {} #[derive(Debug, Clone, Copy, PartialEq)] pub struct FixedDotWeight { pub circle: Circle, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } @@ -104,7 +104,7 @@ impl GetWidth for FixedDotWeight { #[derive(Debug, Clone, Copy, PartialEq)] pub struct LooseDotWeight { pub circle: Circle, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } diff --git a/src/drawing/drawing.rs b/src/drawing/drawing.rs index ccbf894..d06ffbc 100644 --- a/src/drawing/drawing.rs +++ b/src/drawing/drawing.rs @@ -686,7 +686,7 @@ impl Drawing { }) } - pub fn layer_primitive_nodes(&self, layer: u64) -> impl Iterator + '_ { + pub fn layer_primitive_nodes(&self, layer: usize) -> impl Iterator + '_ { self.geometry_with_rtree .rtree() .locate_in_envelope_intersecting(&AABB::from_corners( @@ -889,7 +889,7 @@ impl Drawing { Loose::new(index, self) } - pub fn layer_count(&self) -> u64 { + pub fn layer_count(&self) -> usize { self.geometry_with_rtree.layer_count() } diff --git a/src/drawing/graph.rs b/src/drawing/graph.rs index 3651e6a..4ea0273 100644 --- a/src/drawing/graph.rs +++ b/src/drawing/graph.rs @@ -22,7 +22,7 @@ pub trait Retag { #[enum_dispatch] pub trait GetLayer { - fn layer(&self) -> u64; + fn layer(&self) -> usize; } #[enum_dispatch] @@ -47,7 +47,7 @@ macro_rules! impl_weight { } impl<'a> GetLayer for $weight_struct { - fn layer(&self) -> u64 { + fn layer(&self) -> usize { self.layer } } diff --git a/src/drawing/primitive.rs b/src/drawing/primitive.rs index 8caaee1..48b2e5d 100644 --- a/src/drawing/primitive.rs +++ b/src/drawing/primitive.rs @@ -125,7 +125,7 @@ macro_rules! impl_primitive { } impl<'a, CW: Copy, R: RulesTrait> GetLayer for $primitive_struct<'a, CW, R> { - fn layer(&self) -> u64 { + fn layer(&self) -> usize { self.weight().layer() } } diff --git a/src/drawing/seg.rs b/src/drawing/seg.rs index 3383cc0..7c72ae2 100644 --- a/src/drawing/seg.rs +++ b/src/drawing/seg.rs @@ -80,7 +80,7 @@ impl SegWeightTrait for SegWeight {} #[derive(Debug, Clone, Copy, PartialEq)] pub struct FixedSegWeight { pub width: f64, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } @@ -96,7 +96,7 @@ impl GetWidth for FixedSegWeight { #[derive(Debug, Clone, Copy, PartialEq)] pub struct LoneLooseSegWeight { pub width: f64, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } @@ -112,7 +112,7 @@ impl GetWidth for LoneLooseSegWeight { #[derive(Debug, Clone, Copy, PartialEq)] pub struct SeqLooseSegWeight { pub width: f64, - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } diff --git a/src/dsn/design.rs b/src/dsn/design.rs index 505ecf9..6b041f3 100644 --- a/src/dsn/design.rs +++ b/src/dsn/design.rs @@ -193,7 +193,7 @@ impl DsnDesign { (pin.x as f64, pin.y as f64).into(), pin.rotate.unwrap_or(0.0) as f64, circle.diameter as f64 / 2.0, - layer as u64, + layer as usize, *net, Some(pinname.clone()), ) @@ -215,7 +215,7 @@ impl DsnDesign { rect.y1 as f64, rect.x2 as f64, rect.y2 as f64, - layer as u64, + layer as usize, *net, Some(pinname.clone()), ) @@ -235,7 +235,7 @@ impl DsnDesign { pin.rotate.unwrap_or(0.0) as f64, &path.coord_vec, path.width as f64, - layer as u64, + layer as usize, *net, Some(pinname.clone()), ) @@ -255,7 +255,7 @@ impl DsnDesign { pin.rotate.unwrap_or(0.0) as f64, &polygon.coord_vec, polygon.width as f64, - layer as u64, + layer as usize, *net, Some(pinname.clone()), ) @@ -299,7 +299,7 @@ impl DsnDesign { (0.0, 0.0).into(), 0.0, circle.diameter as f64 / 2.0, - layer as u64, + layer as usize, net, None, ) @@ -321,7 +321,7 @@ impl DsnDesign { rect.y1 as f64, rect.x2 as f64, rect.y2 as f64, - layer as u64, + layer as usize, net, None, ) @@ -341,7 +341,7 @@ impl DsnDesign { 0.0, &path.coord_vec, path.width as f64, - layer as u64, + layer as usize, net, None, ) @@ -361,7 +361,7 @@ impl DsnDesign { 0.0, &polygon.coord_vec, polygon.width as f64, - layer as u64, + layer as usize, net, None, ) @@ -392,7 +392,7 @@ impl DsnDesign { 0.0, &wire.path.coord_vec, wire.path.width as f64, - layer as u64, + layer, net, None, ); @@ -448,7 +448,7 @@ impl DsnDesign { pin_pos: Point, pin_rot: f64, r: f64, - layer: u64, + layer: usize, net: usize, maybe_pin: Option, ) { @@ -477,7 +477,7 @@ impl DsnDesign { y1: f64, x2: f64, y2: f64, - layer: u64, + layer: usize, net: usize, maybe_pin: Option, ) { @@ -586,7 +586,7 @@ impl DsnDesign { pin_rot: f64, coords: &Vec, width: f64, - layer: u64, + layer: usize, net: usize, maybe_pin: Option, ) { @@ -663,7 +663,7 @@ impl DsnDesign { pin_rot: f64, coords: &Vec, width: f64, - layer: u64, + layer: usize, net: usize, maybe_pin: Option, ) { diff --git a/src/dsn/mesadata.rs b/src/dsn/mesadata.rs index 8f55ee6..e3390bd 100644 --- a/src/dsn/mesadata.rs +++ b/src/dsn/mesadata.rs @@ -30,7 +30,7 @@ pub struct DsnMesadata { class_rules: HashMap, // layername <-> layer for Layout - pub layer_layername: BiHashMap, + pub layer_layername: BiHashMap, // netname <-> net for Layout pub net_netname: BiHashMap, @@ -45,7 +45,7 @@ impl DsnMesadata { pcb.structure .layer_vec .iter() - .map(|layer| (layer.property.index as u64, layer.name.clone())), + .map(|layer| (layer.property.index, layer.name.clone())), ); // keeping this as a separate iter pass because it might be moved into a different struct later? @@ -122,15 +122,15 @@ impl RulesTrait for DsnMesadata { } impl MesadataTrait for DsnMesadata { - fn bename_layer(&mut self, layer: u64, layername: String) { + fn bename_layer(&mut self, layer: usize, layername: String) { self.layer_layername.insert(layer, layername); } - fn layer_layername(&self, layer: u64) -> Option<&str> { + fn layer_layername(&self, layer: usize) -> Option<&str> { self.layer_layername.get_by_left(&layer).map(|s| s.as_str()) } - fn layername_layer(&self, layername: &str) -> Option { + fn layername_layer(&self, layername: &str) -> Option { self.layer_layername.get_by_right(layername).copied() } diff --git a/src/geometry/primitive.rs b/src/geometry/primitive.rs index 4f3a380..687af7a 100644 --- a/src/geometry/primitive.rs +++ b/src/geometry/primitive.rs @@ -9,14 +9,14 @@ use crate::{ #[enum_dispatch] pub trait PrimitiveShapeTrait: ShapeTrait { - fn priority(&self) -> u64; + fn priority(&self) -> usize; fn inflate(&self, margin: f64) -> PrimitiveShape; fn intersects(&self, other: &PrimitiveShape) -> bool; fn envelope(&self, margin: f64) -> AABB<[f64; 2]>; fn width(&self) -> f64; fn length(&self) -> f64; - fn envelope_3d(&self, margin: f64, layer: u64) -> AABB<[f64; 3]> { + fn envelope_3d(&self, margin: f64, layer: usize) -> AABB<[f64; 3]> { let envelope = self.envelope(margin); AABB::from_corners( [envelope.lower()[0], envelope.lower()[1], layer as f64], @@ -24,7 +24,7 @@ pub trait PrimitiveShapeTrait: ShapeTrait { ) } - fn full_height_envelope_3d(&self, margin: f64, layer_count: u64) -> AABB<[f64; 3]> { + fn full_height_envelope_3d(&self, margin: f64, layer_count: usize) -> AABB<[f64; 3]> { let envelope = self.envelope(margin); AABB::from_corners( [envelope.lower()[0], envelope.lower()[1], 0.0], @@ -62,7 +62,7 @@ impl ShapeTrait for DotShape { } impl PrimitiveShapeTrait for DotShape { - fn priority(&self) -> u64 { + fn priority(&self) -> usize { 3 } @@ -162,7 +162,7 @@ impl ShapeTrait for SegShape { } impl PrimitiveShapeTrait for SegShape { - fn priority(&self) -> u64 { + fn priority(&self) -> usize { 2 } @@ -279,7 +279,7 @@ impl ShapeTrait for BendShape { } impl PrimitiveShapeTrait for BendShape { - fn priority(&self) -> u64 { + fn priority(&self) -> usize { 1 } diff --git a/src/geometry/with_rtree.rs b/src/geometry/with_rtree.rs index b602f48..6cbfca9 100644 --- a/src/geometry/with_rtree.rs +++ b/src/geometry/with_rtree.rs @@ -50,7 +50,7 @@ pub struct GeometryWithRtree< > { geometry: Geometry, rtree: RTree>>>, - layer_count: u64, + layer_count: usize, weight_marker: PhantomData, dot_weight_marker: PhantomData, seg_weight_marker: PhantomData, @@ -75,7 +75,7 @@ impl< BI: GetNodeIndex + Into + Copy, > GeometryWithRtree { - pub fn new(layer_count: u64) -> Self { + pub fn new(layer_count: usize) -> Self { Self { geometry: Geometry::::new(), rtree: RTree::new(), @@ -335,7 +335,7 @@ impl< } } - fn layer(&self, primitive: PI) -> u64 { + fn layer(&self, primitive: PI) -> usize { if let Ok(dot) = >::try_into(primitive) { self.geometry.dot_weight(dot).layer() } else if let Ok(seg) = >::try_into(primitive) { @@ -347,7 +347,7 @@ impl< } } - pub fn layer_count(&self) -> u64 { + pub fn layer_count(&self) -> usize { self.layer_count } diff --git a/src/layout/layout.rs b/src/layout/layout.rs index 79ada58..f8dea2f 100644 --- a/src/layout/layout.rs +++ b/src/layout/layout.rs @@ -240,7 +240,7 @@ impl Layout { pub fn layer_zone_nodes( &self, - layer: u64, + layer: usize, ) -> impl Iterator> + '_ { self.drawing .rtree() diff --git a/src/layout/via.rs b/src/layout/via.rs index 4823574..f265717 100644 --- a/src/layout/via.rs +++ b/src/layout/via.rs @@ -46,8 +46,8 @@ impl<'a, R: RulesTrait> MakePrimitiveShape for Via<'a, R> { #[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct ViaWeight { - pub from_layer: u64, - pub to_layer: u64, + pub from_layer: usize, + pub to_layer: usize, pub circle: Circle, pub maybe_net: Option, } diff --git a/src/layout/zone.rs b/src/layout/zone.rs index 32f80d9..8d9477b 100644 --- a/src/layout/zone.rs +++ b/src/layout/zone.rs @@ -49,7 +49,7 @@ impl<'a, R: RulesTrait> Zone<'a, R> { } impl<'a, R: RulesTrait> GetLayer for Zone<'a, R> { - fn layer(&self) -> u64 { + fn layer(&self) -> usize { if let CompoundWeight::Zone(weight) = self.layout.drawing().compound_weight(self.index.into()) { @@ -136,12 +136,12 @@ impl From> for GenericIndex { #[derive(Debug, Clone, Copy, PartialEq)] pub struct SolidZoneWeight { - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } impl GetLayer for SolidZoneWeight { - fn layer(&self) -> u64 { + fn layer(&self) -> usize { self.layer } } @@ -160,12 +160,12 @@ impl From> for GenericIndex { #[derive(Debug, Clone, Copy, PartialEq)] pub struct PourZoneWeight { - pub layer: u64, + pub layer: usize, pub maybe_net: Option, } impl<'a> GetLayer for PourZoneWeight { - fn layer(&self) -> u64 { + fn layer(&self) -> usize { self.layer } }