summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2021-07-11 11:35:40 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2021-07-11 11:35:40 +0800
commit7b33f1d7374bf6adf19eb5c5778d6e5542201244 (patch)
tree4697fa5133be463c4b49d5cdba588f3c70db41f8
parent933541ad34ab813d20c232852a66f3023da9227d (diff)
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
-rw-r--r--svgbob/src/map/circle_map.rs18
1 files 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<Contacts>,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<i32,(Cell,Span)> =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<Circle, Span> = 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<Contacts>,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);