From fb75a9ce32d304c9334100c28ca55c352955d53f Mon Sep 17 00:00:00 2001 From: Jovansonlee Cesar Date: Fri, 3 Aug 2018 16:09:25 +0800 Subject: Initial implementation for merging specific case --- svgbob/src/element.rs | 37 +++++++++++++++++++++++++++++++++++++ svgbob/src/optimizer.rs | 10 ++++++++++ svgbob/src/point.rs | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/svgbob/src/element.rs b/svgbob/src/element.rs index f7e0a41..8c2845b 100644 --- a/svgbob/src/element.rs +++ b/svgbob/src/element.rs @@ -19,6 +19,7 @@ use element::{ Feature::{Arrow,ArrowStart,Circle,Square,OpenCircle,BigOpenCircle,Nothing}, }; use unicode_width::UnicodeWidthStr; +use point; @@ -30,6 +31,28 @@ pub enum Element { Text(Loc, String), } +impl Element{ + + fn longer_line<'a>(&'a self, other: &'a Element) -> &'a Element { + match self{ + Element::Line(s1, e1, _, _, _) => match other{ + Element::Line(s2, e2, _, _,_) => { + let d1 = point::distance(s1, e1); + let d2 = point::distance(s2, e2); + if d1 > d2 { + self + } + else{ + other + } + } + _ => panic!("only for lines"), + } + _ => panic!("only for lines"), + } + } +} + #[derive(Debug, Clone, PartialEq, PartialOrd, Ord, Eq)] pub enum Stroke { Solid, @@ -135,6 +158,7 @@ impl Element { return Some(other.clone()) } + // extend 1 with 2 // line1 line2 // s-----e s2-----e2 // s----------------e2 @@ -153,6 +177,7 @@ impl Element { )); } } + // extend 1 with flip 2 // line1 line2 // s------e e2-------s2 // s-------------------s2 @@ -169,6 +194,7 @@ impl Element { )); } } + // flip1 extend 2 // line1 line2 // e------s s2------e2 // s------------------e2 @@ -185,7 +211,17 @@ impl Element { end_feature2.clone(), )); } + // TODO: need fixing + // same starting point, take longer line + // longer line + // s-------e + // s2-------------->e2 + else { + println!("longer line"); + return Some(self.longer_line(other).clone()) + } } + // extend 2 with 1 // line1 line2 // e------s e2------s2 // e---------------------s2 @@ -205,6 +241,7 @@ impl Element { )); } } + } return None; } diff --git a/svgbob/src/optimizer.rs b/svgbob/src/optimizer.rs index 6c9aeb7..ad0c625 100644 --- a/svgbob/src/optimizer.rs +++ b/svgbob/src/optimizer.rs @@ -141,6 +141,16 @@ impl Optimizer { all_reduced.push(elm.clone()); } } + if consumed.len() > 0 { + //println!("original elements: {}", elements.len()); + //println!("total consumed: {}", consumed.len()); + //println!("all_reduced: {}", all_reduced.len()); + } + all_reduced.sort(); + all_reduced.dedup(); + if elements.len() != all_reduced.len(){ + println!("reduced from {} to {}", elements.len(), all_reduced.len()); + } all_reduced } diff --git a/svgbob/src/point.rs b/svgbob/src/point.rs index 106b251..b26ac38 100644 --- a/svgbob/src/point.rs +++ b/svgbob/src/point.rs @@ -32,6 +32,6 @@ pub fn collinear(a: &Point, b: &Point, c: &Point) -> bool { a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y) == 0.0 } -pub fn _distance(a: &Point, b: &Point) -> f32{ +pub fn distance(a: &Point, b: &Point) -> f32{ ((b.x - a.x ).powi(2) + (b.y - a.y).powi(2)).sqrt() } -- cgit v1.2.3 From 6efefb3c1786051daea31b994dd430e2936ce352 Mon Sep 17 00:00:00 2001 From: Jovansonlee Cesar Date: Thu, 9 Aug 2018 15:40:55 +0800 Subject: Remove println --- svgbob/src/element.rs | 2 +- svgbob/src/optimizer.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/svgbob/src/element.rs b/svgbob/src/element.rs index 8c2845b..e8c66a6 100644 --- a/svgbob/src/element.rs +++ b/svgbob/src/element.rs @@ -217,7 +217,7 @@ impl Element { // s-------e // s2-------------->e2 else { - println!("longer line"); + //println!("longer line"); return Some(self.longer_line(other).clone()) } } diff --git a/svgbob/src/optimizer.rs b/svgbob/src/optimizer.rs index 82a0fa0..5efb8c5 100644 --- a/svgbob/src/optimizer.rs +++ b/svgbob/src/optimizer.rs @@ -149,7 +149,7 @@ impl Optimizer { all_reduced.sort(); all_reduced.dedup(); if elements.len() != all_reduced.len(){ - println!("reduced from {} to {}", elements.len(), all_reduced.len()); + //println!("reduced from {} to {}", elements.len(), all_reduced.len()); } all_reduced } -- cgit v1.2.3