summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2020-11-25 14:05:01 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2020-11-25 14:05:01 +0800
commit4af1321cb8126ed2d749e4fdb862e9e47bb1ae87 (patch)
tree99f035529bb4e07f7f2c2b4c4eed0992a3439e75
parent9c6e8c88b28b66fe94cee1a300560c7071d173a6 (diff)
disable the merge of polygons,circles to lines
-rw-r--r--svgbob/examples/merge.rs12
-rwxr-xr-xsvgbob/run_merge.sh1
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment.rs9
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/line.rs2
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs4
-rw-r--r--svgbob/test_data/merge.bob80
6 files changed, 107 insertions, 1 deletions
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<Fragment> {
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<Fragment> {
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
+
+
+ ^ ^
+ \ /
+ \ /
+ \ /
+
+
+ ----->>----
+
+ ---------->>
+
+ <<--------
+
+ ----<<------
+