From e6fa930efc48325f6f1202cc23f8a54f02427875 Mon Sep 17 00:00:00 2001 From: Sameer Puri Date: Sun, 9 May 2021 20:49:41 -0400 Subject: [PATCH] only postprocess on G commands --- src/postprocess.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/postprocess.rs b/src/postprocess.rs index a3e509b..c268c34 100644 --- a/src/postprocess.rs +++ b/src/postprocess.rs @@ -12,15 +12,15 @@ pub fn set_origin(tokens: &mut [Token<'_>], origin: F64Point) { let mut is_relative = false; let mut current_position = point(0f64, 0f64); - let x = "X"; - let y = "Y"; - let abs_tok = Token::Field(ABSOLUTE_DISTANCE_MODE_FIELD); - let rel_tok = Token::Field(RELATIVE_DISTANCE_MODE_FIELD); + let mut should_skip = false; for token in tokens { match token { - abs if *abs == abs_tok => is_relative = false, - rel if *rel == rel_tok => is_relative = true, - Token::Field(Field { letters, value }) if *letters == x => { + abs if *abs == Token::Field(ABSOLUTE_DISTANCE_MODE_FIELD) => is_relative = false, + rel if *rel == Token::Field(RELATIVE_DISTANCE_MODE_FIELD) => is_relative = true, + // Don't edit M codes for relativity + Token::Field(Field { letters, .. }) if *letters == "M" => should_skip = true, + Token::Field(Field { letters, .. }) if *letters == "G" => should_skip = false, + Token::Field(Field { letters, value }) if *letters == "X" && !should_skip => { if let Some(float) = value.as_f64() { if is_relative { current_position += vector(float, 0.) @@ -30,7 +30,7 @@ pub fn set_origin(tokens: &mut [Token<'_>], origin: F64Point) { *value = Value::Float(current_position.x + offset.x) } } - Token::Field(Field { letters, value }) if *letters == y => { + Token::Field(Field { letters, value }) if *letters == "Y" && !should_skip => { if let Some(float) = value.as_f64() { if is_relative { current_position += vector(0., float) @@ -48,16 +48,16 @@ pub fn set_origin(tokens: &mut [Token<'_>], origin: F64Point) { fn get_bounding_box<'a, I: Iterator>>(tokens: I) -> Box2D { let (mut minimum, mut maximum) = (point(0f64, 0f64), point(0f64, 0f64)); let mut is_relative = false; + let mut should_skip = false; let mut current_position = point(0f64, 0f64); - let x = "X"; - let y = "Y"; - let abs_tok = Token::Field(ABSOLUTE_DISTANCE_MODE_FIELD); - let rel_tok = Token::Field(RELATIVE_DISTANCE_MODE_FIELD); for token in tokens { match token { - abs if *abs == abs_tok => is_relative = false, - rel if *rel == rel_tok => is_relative = true, - Token::Field(Field { letters, value }) if *letters == x => { + abs if *abs == Token::Field(ABSOLUTE_DISTANCE_MODE_FIELD) => is_relative = false, + rel if *rel == Token::Field(RELATIVE_DISTANCE_MODE_FIELD) => is_relative = true, + // Don't check M codes for relativity + Token::Field(Field { letters, .. }) if *letters == "M" => should_skip = true, + Token::Field(Field { letters, .. }) if *letters == "G" => should_skip = false, + Token::Field(Field { letters, value }) if *letters == "X" && !should_skip => { if let Some(value) = value.as_f64() { if is_relative { current_position += vector(value, 0.) @@ -68,7 +68,7 @@ fn get_bounding_box<'a, I: Iterator>>(tokens: I) -> Box2D { + Token::Field(Field { letters, value }) if *letters == "Y" && !should_skip => { if let Some(value) = value.as_f64() { if is_relative { current_position += vector(0., value)