From 7b33f1d7374bf6adf19eb5c5778d6e5542201244 Mon Sep 17 00:00:00 2001 From: Jovansonlee Cesar Date: Sun, 11 Jul 2021 11:35:40 +0800 Subject: Fix strange bug when some arcs are not rendered to the use of BTreeMap when indexing CIRCLE_MAP causing other arcs to be overriden The fix is to use Vec to store the CIRCLE_MAP --- svgbob/src/map/circle_map.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/svgbob/src/map/circle_map.rs b/svgbob/src/map/circle_map.rs index e2e9d41..0640e7b 100644 --- a/svgbob/src/map/circle_map.rs +++ b/svgbob/src/map/circle_map.rs @@ -376,11 +376,12 @@ lazy_static! { `._ _.' '-.........-' "#, EdgeCase::StartHalf, 5.5), + ]; - pub static ref CIRCLE_MAP: BTreeMap<&'static str,(Cell, Point, f32, EdgeCase, f32)> =BTreeMap::from_iter( - CIRCLE_ART_MAP.iter().map(|(art, edge_case, offset_center_y)|{ + pub static ref CIRCLE_MAP: Vec<(&'static str,Cell, Point, f32, EdgeCase, f32)> =Vec::from_iter( + CIRCLE_ART_MAP.iter().enumerate().map(|(ndx, (art, edge_case, offset_center_y))|{ let cb = CellBuffer::from(*art); let (lo, hi) = cb.bounds().expect("circle must have bounds"); @@ -394,6 +395,8 @@ lazy_static! { }; let calc_radius = width / 2.0; + let index = (width - 1.0) as usize; + assert_eq!(ndx, index); let edge_inc_x = match edge_case{ EdgeCase::StartEdge => 0.0, @@ -408,21 +411,21 @@ lazy_static! { let calc_center_cell = calc_center.cell(); - (*art, (calc_center_cell, calc_center, calc_radius, *edge_case, *offset_center_y)) + (*art, calc_center_cell, calc_center, calc_radius, *edge_case, *offset_center_y) }) ); /// The fragments for each of the circle /// Calculate the span and get the group fragments pub static ref FRAGMENTS_CIRCLE: Vec<(Vec,Circle)> = Vec::from_iter( - CIRCLE_MAP.iter().map(|(art, (_center_cell, center, radius, edge_case, offset_center_y))|{ + CIRCLE_MAP.iter().map(|(art, _center_cell, center, radius, edge_case, offset_center_y)|{ (circle_art_to_group(art, &Settings::default()), Circle::new(*center, *radius, false)) }) ); /// map of circle spans and their radius pub static ref DIAMETER_CIRCLE: BTreeMap =BTreeMap::from_iter( - CIRCLE_MAP.iter().map(|(art, (center_cell, center, radius, edge_case, offset_center_y))|{ + CIRCLE_MAP.iter().map(|(art, center_cell, center, radius, edge_case, offset_center_y)|{ let cb = CellBuffer::from(*art); let mut spans = cb.group_adjacents(); assert_eq!(spans.len(), 1); @@ -433,7 +436,7 @@ lazy_static! { /// There is only 1 span per circle, and localized pub static ref CIRCLES_SPAN: BTreeMap = BTreeMap::from_iter( - CIRCLE_MAP.iter().map(|(art, (_center_cell, center, radius, edge_case, offset_center_y))|{ + CIRCLE_MAP.iter().map(|(art, _center_cell, center, radius, edge_case, offset_center_y)|{ let cb = CellBuffer::from(*art); let mut spans = cb.group_adjacents(); assert_eq!(spans.len(), 1); @@ -479,7 +482,7 @@ lazy_static! { /// the center cell /// pub static ref FRAGMENTS_ARC: Vec<(Vec,fragment::Arc)> =Vec::from_iter( - CIRCLE_MAP.iter().skip(3).flat_map(|(art, (center_cell, center, radius, edge_case, offset_center_y))|{ + CIRCLE_MAP.iter().skip(3).flat_map(|(art, center_cell, center, radius, edge_case, offset_center_y)|{ let cb = CellBuffer::from(*art); let mut spans = cb.group_adjacents(); assert_eq!(spans.len(), 1); @@ -515,7 +518,6 @@ lazy_static! { let arc3_span = span.extract(arc3_bounds.0, arc3_bounds.1); let arc4_span = span.extract(arc4_bounds.0, arc4_bounds.1); - let p1 = Point::new(center.x + radius, center.y); let p2 = Point::new(center.x, center.y - radius); let p3 = Point::new(center.x - radius, center.y); -- cgit v1.2.3