diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-09-27 12:49:37 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-09-27 12:49:37 +0800 |
commit | 1d179168f429c2dcf257feeed57c3a99d624b083 (patch) | |
tree | 1756631c78a9b63f44656daa9a369e2c65c6a378 | |
parent | 9be58496da4e0b0dff5aa7700929a5d3732214c1 (diff) |
feat: remove merge_line_with_polygon as it is buggy as well
-rw-r--r-- | packages/svgbob/src/buffer/cell_buffer.rs | 8 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/fragment_buffer.rs | 6 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/fragment_buffer/fragment.rs | 17 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/fragment_buffer/fragment/line.rs | 61 | ||||
-rw-r--r-- | packages/svgbob/src/options.rs | 18 | ||||
-rw-r--r-- | packages/svgbob/src/settings.rs | 11 | ||||
-rw-r--r-- | packages/svgbob/tests/simple_shapes.rs | 18 |
7 files changed, 27 insertions, 112 deletions
diff --git a/packages/svgbob/src/buffer/cell_buffer.rs b/packages/svgbob/src/buffer/cell_buffer.rs index ebcc1f3..9cedd39 100644 --- a/packages/svgbob/src/buffer/cell_buffer.rs +++ b/packages/svgbob/src/buffer/cell_buffer.rs @@ -130,14 +130,6 @@ impl CellBuffer { } /// return the fragments that are (close objects, touching grouped fragments) - /// - /// TODO, this should return (Vec<FragmentSpan>, Vec<Span>), - /// The rejects span must been retried for a circle_spans - /// since there is a change that it was right next to a rect, which - /// prevents if from matching any circle. - /// - /// Once the rects has been matches, then what's left in the span - /// could match to be a circle pub fn get_fragment_spans(self) -> (Vec<FragmentSpan>, Vec<Span>) { let escaped_text = self.escaped_text_nodes(); diff --git a/packages/svgbob/src/buffer/fragment_buffer.rs b/packages/svgbob/src/buffer/fragment_buffer.rs index 7d13ea5..d590f56 100644 --- a/packages/svgbob/src/buffer/fragment_buffer.rs +++ b/packages/svgbob/src/buffer/fragment_buffer.rs @@ -113,7 +113,11 @@ impl FragmentBuffer { fragment_span: FragmentSpan, ) { if let Some(existing) = self.get_mut(&cell) { - existing.push(fragment_span); + if !existing.contains(&fragment_span) { + existing.push(fragment_span); + } else { + println!("already contain fragment span.."); + } } else { self.insert(cell, vec![fragment_span]); } diff --git a/packages/svgbob/src/buffer/fragment_buffer/fragment.rs b/packages/svgbob/src/buffer/fragment_buffer/fragment.rs index c9a2e10..f30fc6c 100644 --- a/packages/svgbob/src/buffer/fragment_buffer/fragment.rs +++ b/packages/svgbob/src/buffer/fragment_buffer/fragment.rs @@ -143,16 +143,12 @@ impl Fragment { Fragment::Line(line) => match other { Fragment::Line(other) => line.is_touching(other), Fragment::Arc(other_arc) => line.is_touching_arc(other_arc), - Fragment::Polygon(polygon) => { - line.merge_line_polygon(polygon).is_some() - } + Fragment::Polygon(polygon) => false, Fragment::Circle(circle) => line.is_touching_circle(circle), _ => false, }, Fragment::Polygon(polygon) => match other { - Fragment::Line(other) => { - other.merge_line_polygon(polygon).is_some() - } + Fragment::Line(other) => false, _ => false, }, Fragment::Arc(arc) => match other { @@ -413,12 +409,14 @@ impl Merge for Fragment { // line and polygon (Fragment::Line(line), Fragment::Polygon(polygon)) => { - line.merge_line_polygon(polygon) + //line.merge_line_polygon(polygon) + None } // polygon and line (Fragment::Polygon(polygon), Fragment::Line(line)) => { - line.merge_line_polygon(polygon) + //line.merge_line_polygon(polygon) + None } // line and marker_line @@ -426,7 +424,8 @@ impl Merge for Fragment { // marker_line and line (Fragment::MarkerLine(mline), Fragment::Line(line)) => None, (Fragment::MarkerLine(mline), Fragment::Polygon(polygon)) => { - mline.merge_polygon(polygon) + //mline.merge_polygon(polygon) + None } // line and circle (Fragment::Line(line), Fragment::Circle(circle)) => { diff --git a/packages/svgbob/src/buffer/fragment_buffer/fragment/line.rs b/packages/svgbob/src/buffer/fragment_buffer/fragment/line.rs index db7ec6a..c049d6a 100644 --- a/packages/svgbob/src/buffer/fragment_buffer/fragment/line.rs +++ b/packages/svgbob/src/buffer/fragment_buffer/fragment/line.rs @@ -224,52 +224,6 @@ impl Line { } } - /// merge this line to the marker line - pub(crate) fn merge_line_polygon( - &self, - polygon: &Polygon, - ) -> Option<Fragment> { - let poly_center = polygon.center(); - let distance_end_center = self.end.distance(&poly_center); - let distance_start_center = self.start.distance(&poly_center); - - let line_heading = self.heading(); - - let threshold_length = line_heading.threshold_length(); - let is_close_start_point = distance_start_center < threshold_length; - let is_close_end_point = distance_end_center < threshold_length; - - let is_same_direction = polygon.matched_direction(line_heading); - - let is_opposite_direction = - polygon.matched_direction(line_heading.opposite()); - - let can_merge = (is_same_direction || is_opposite_direction) - && (is_close_start_point || is_close_end_point); - - if can_merge { - let new_line = if is_close_end_point { - Line::new_noswap(self.start, self.end, self.is_broken) - } else if is_close_start_point { - // if close to the start, swap the end points of the line - Line::new_noswap(self.end, self.start, self.is_broken) - } else { - panic!("There is no endpoint of the line is that close to the arrow"); - }; - let extended_line = new_line.extend(threshold_length); - - Some(marker_line( - extended_line.start, - extended_line.end, - extended_line.is_broken, - None, - polygon.get_marker(), - )) - } else { - None - } - } - pub(crate) fn merge_circle(&self, circle: &Circle) -> Option<Fragment> { let distance_end_center = self.end.distance(&circle.center); let distance_start_center = self.start.distance(&circle.center); @@ -561,21 +515,6 @@ mod tests { } #[test] - fn is_touching_arrow() { - let m = CellGrid::m(); - let end = Cell::new(10, 0).o(); - let p1 = Cell::new(11, 0).f(); - let p2 = Cell::new(11, 0).o(); - let p3 = Cell::new(11, 0).p(); - - let polygon = - Polygon::new(vec![p1, p2, p3], false, vec![PolygonTag::ArrowRight]); - - let line = Line::new(m, end, false); - assert!(line.merge_line_polygon(&polygon).is_some()); - } - - #[test] fn test_angle() { let m = CellGrid::m(); let k = CellGrid::k(); diff --git a/packages/svgbob/src/options.rs b/packages/svgbob/src/options.rs deleted file mode 100644 index 3933398..0000000 --- a/packages/svgbob/src/options.rs +++ /dev/null @@ -1,18 +0,0 @@ - -bitflags! { - pub struct Options: u32 { - /// merge fragments that can be merged - const MERGE_FRAGMENTS = 1 << 0; - /// group fragments that are touching together - const GROUP_FRAGMENTS = 1 << 1; - /// try to make a group of fragments to rect, when applicable - const ENDORSE_FRAGMENTS = 1 << 2; - /// allow arc even they didn't form a complete circle - const QUARTERLY_ARCS = 1 << 3; - /// allow oval shapes - const ENABLE_OVAL = 1 << 4; - /// enable enhancement of lines - /// that can almost connect such as: _|_ /_ -|- - const AGGRESSIVE_ENHANCE = 1 << 5; - } -} diff --git a/packages/svgbob/src/settings.rs b/packages/svgbob/src/settings.rs index f1f9212..1e08ee6 100644 --- a/packages/svgbob/src/settings.rs +++ b/packages/svgbob/src/settings.rs @@ -39,3 +39,14 @@ impl Default for Settings { } } } + +impl Settings { + pub fn for_debug() -> Self { + Self { + include_backdrop: false, + include_styles: false, + include_defs: false, + ..Default::default() + } + } +} diff --git a/packages/svgbob/tests/simple_shapes.rs b/packages/svgbob/tests/simple_shapes.rs index 9066895..8549c89 100644 --- a/packages/svgbob/tests/simple_shapes.rs +++ b/packages/svgbob/tests/simple_shapes.rs @@ -12,11 +12,7 @@ fn rect1() { <rect x="36" y="24" width="88" height="32" class="solid nofill" rx="0"></rect> </svg>"#; - let mut settings = Settings::default(); - settings.include_backdrop = false; - settings.include_styles = false; - settings.include_defs = false; - let svg = svgbob::to_svg_with_settings(bob, &settings); + let svg = svgbob::to_svg_with_settings(bob, &Settings::for_debug()); println!("{}", svg); assert_eq!(expected, svg); } @@ -35,11 +31,7 @@ fn escaped_shape() { <text x="34" y="60" >+----------+</text> </svg>"#; - let mut settings = Settings::default(); - settings.include_backdrop = false; - settings.include_styles = false; - settings.include_defs = false; - let svg = svgbob::to_svg_with_settings(bob, &settings); + let svg = svgbob::to_svg_with_settings(bob, &Settings::for_debug()); println!("{}", svg); assert_eq!(expected, svg); } @@ -56,11 +48,7 @@ fn rounded_rect() { <rect x="36" y="24" width="88" height="32" class="solid nofill" rx="4"></rect> </svg>"#; - let mut settings = Settings::default(); - settings.include_backdrop = false; - settings.include_styles = false; - settings.include_defs = false; - let svg = svgbob::to_svg_with_settings(bob, &settings); + let svg = svgbob::to_svg_with_settings(bob, &Settings::for_debug()); println!("{}", svg); assert_eq!(expected, svg); } |