summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2022-09-27 12:49:37 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2022-09-27 12:49:37 +0800
commit1d179168f429c2dcf257feeed57c3a99d624b083 (patch)
tree1756631c78a9b63f44656daa9a369e2c65c6a378
parent9be58496da4e0b0dff5aa7700929a5d3732214c1 (diff)
feat: remove merge_line_with_polygon as it is buggy as well
-rw-r--r--packages/svgbob/src/buffer/cell_buffer.rs8
-rw-r--r--packages/svgbob/src/buffer/fragment_buffer.rs6
-rw-r--r--packages/svgbob/src/buffer/fragment_buffer/fragment.rs17
-rw-r--r--packages/svgbob/src/buffer/fragment_buffer/fragment/line.rs61
-rw-r--r--packages/svgbob/src/options.rs18
-rw-r--r--packages/svgbob/src/settings.rs11
-rw-r--r--packages/svgbob/tests/simple_shapes.rs18
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);
}