only postprocess on G commands

master
Sameer Puri 4 years ago
parent c8962dfe85
commit e6fa930efc

@ -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<Item = &'a Token<'a>>>(tokens: I) -> Box2D<f64> {
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<Item = &'a Token<'a>>>(tokens: I) -> Box2D<f
maximum = maximum.max(current_position);
}
}
Token::Field(Field { letters, value }) if *letters == y => {
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)

Loading…
Cancel
Save