From 4af1321cb8126ed2d749e4fdb862e9e47bb1ae87 Mon Sep 17 00:00:00 2001 From: Jovansonlee Cesar Date: Wed, 25 Nov 2020 14:05:01 +0800 Subject: disable the merge of polygons,circles to lines --- svgbob/examples/merge.rs | 12 ++++ svgbob/run_merge.sh | 1 + svgbob/src/buffer/fragment_buffer/fragment.rs | 9 ++- svgbob/src/buffer/fragment_buffer/fragment/line.rs | 2 + .../buffer/fragment_buffer/fragment/marker_line.rs | 4 ++ svgbob/test_data/merge.bob | 80 ++++++++++++++++++++++ 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 svgbob/examples/merge.rs create mode 100755 svgbob/run_merge.sh create mode 100644 svgbob/test_data/merge.bob diff --git a/svgbob/examples/merge.rs b/svgbob/examples/merge.rs new file mode 100644 index 0000000..766b262 --- /dev/null +++ b/svgbob/examples/merge.rs @@ -0,0 +1,12 @@ +use std::{fs, io, time::Instant}; + +extern crate svgbob; + +fn main() -> io::Result<()> { + let art = include_str!("../test_data/merge.bob"); + let t1 = Instant::now(); + fs::create_dir_all("out")?; + fs::write("out/merge.svg", svgbob::to_svg(art))?; + println!("took {}ms", t1.elapsed().as_millis()); + Ok(()) +} diff --git a/svgbob/run_merge.sh b/svgbob/run_merge.sh new file mode 100755 index 0000000..c837cbc --- /dev/null +++ b/svgbob/run_merge.sh @@ -0,0 +1 @@ +reset && RUST_BACKTRACE=1 cargo run --release --example merge diff --git a/svgbob/src/buffer/fragment_buffer/fragment.rs b/svgbob/src/buffer/fragment_buffer/fragment.rs index faa7680..dd62235 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment.rs @@ -104,12 +104,15 @@ impl Fragment { // line and line (Fragment::Line(line), Fragment::Line(other_line)) => line.can_merge(other_line), + /* // line and polygon (Fragment::Line(line), Fragment::Polygon(polygon)) => line.can_merge_polygon(polygon), // polygon and line (Fragment::Polygon(polygon), Fragment::Line(line)) => line.can_merge_polygon(polygon), + */ + /* // line and marker_line (Fragment::Line(line), Fragment::MarkerLine(mline)) => { line.can_merge_marker_line(mline) @@ -122,6 +125,7 @@ impl Fragment { (Fragment::MarkerLine(mline), Fragment::Polygon(polygon)) => { mline.can_merge_polygon(polygon) } + */ //TODO: make a function level2 merge where it merges fragments into // marker_lines @@ -151,12 +155,15 @@ impl Fragment { } } + /* // line and polygon (Fragment::Line(line), Fragment::Polygon(polygon)) => line.merge_line_polygon(polygon), // polygon and line (Fragment::Polygon(polygon), Fragment::Line(line)) => line.merge_line_polygon(polygon), + */ + /* // line and marker_line (Fragment::Line(line), Fragment::MarkerLine(mline)) => line.merge_marker_line(mline), @@ -165,7 +172,7 @@ impl Fragment { (Fragment::MarkerLine(mline), Fragment::Polygon(polygon)) => { mline.merge_polygon(polygon) } - + */ // line and circle (Fragment::Line(line), Fragment::Circle(circle)) => line.merge_circle(circle), diff --git a/svgbob/src/buffer/fragment_buffer/fragment/line.rs b/svgbob/src/buffer/fragment_buffer/fragment/line.rs index 122c993..c060f97 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/line.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/line.rs @@ -210,6 +210,7 @@ impl Line { } } + /* pub(crate) fn merge_marker_line(&self, mline: &MarkerLine) -> Option { if self.can_merge_marker_line(mline) { if mline.start_marker.is_none() { @@ -261,6 +262,7 @@ impl Line { None } } + */ pub(crate) fn is_touching_circle(&self, circle: &Circle) -> bool { let center = circle.center; diff --git a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs index 423612f..60ff582 100644 --- a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs +++ b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs @@ -80,6 +80,7 @@ impl MarkerLine { } } + /* pub(crate) fn can_merge_polygon(&self, polygon: &Polygon) -> bool { let poly_center = polygon.center(); let distance_end_center = self.line.end.distance(&poly_center); @@ -99,7 +100,9 @@ impl MarkerLine { is_same_direction && (can_connect_start || can_connect_end) } + */ + /* /// merge this marker line to the polygon pub(crate) fn merge_polygon(&self, polygon: &Polygon) -> Option { if self.can_merge_polygon(polygon) { @@ -143,6 +146,7 @@ impl MarkerLine { None } } + */ } impl Bounds for MarkerLine { diff --git a/svgbob/test_data/merge.bob b/svgbob/test_data/merge.bob new file mode 100644 index 0000000..5f63a78 --- /dev/null +++ b/svgbob/test_data/merge.bob @@ -0,0 +1,80 @@ + .--. + | | + v | + .-. .-. .-. | + .-->'-' '-' '-' | + | \ | / | + | v ^ v | + |_______/ \_____| + \ / + | ____ + '--> /___/ + + + + # ^ ^ # O ^ + \ \ / / / / + \ \ / / / / + V # # V V O + + + + *------ / * \ * + / \ \ / + ------* * \ * / + + + o------ / \ O O + / \ \ / + ------o O O \ / + O O + O------ O O + \ / + ------O \ / + + + \ / # + \ / \ + # # \ + + + ^ + -----> | | <-------> + | | + <----- | | >-------< + V + + + >-------- v V | ^ V ^ + | | | | | | + --------< | | | | | | + | V ^ ^ ^ v + >--------> + + <---------< | | + | | + --->------ v ^ + | | + -----<----- | | + + + \ / ^ ^ + \ / \ / + \ / \ / + V V V V + + + ^ ^ + \ / + \ / + \ / + + + ----->>---- + + ---------->> + + <<-------- + + ----<<------ + -- cgit v1.2.3