diff --git a/src/converter.rs b/src/converter.rs index 25aa27c..14f0ced 100644 --- a/src/converter.rs +++ b/src/converter.rs @@ -84,8 +84,8 @@ pub fn svg2program<'input>( if let Some(view_box) = node.attribute("viewBox") { let view_box = ViewBox::from_str(view_box).expect("could not parse viewBox"); transforms.push( - Transform2D::scale(1. / view_box.w, 1. / view_box.h) - .then_translate(vector(view_box.x, view_box.y)), + Transform2D::translation(-view_box.x, -view_box.y) + .then_scale(1. / view_box.w, 1. / view_box.h), ); } diff --git a/src/main.rs b/src/main.rs index 76ff48c..fcc3ca5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -250,4 +250,12 @@ mod test { assert_eq!(actual, include_str!("../tests/square_transformed.gcode")) } + + #[test] + fn square_viewport_produces_expected_gcode() { + let square_transformed = include_str!("../tests/square_viewport.svg"); + let actual = get_actual(square_transformed); + + assert_eq!(actual, include_str!("../tests/square_viewport.gcode")) + } } diff --git a/tests/square_viewport.gcode b/tests/square_viewport.gcode new file mode 100644 index 0000000..e915e88 --- /dev/null +++ b/tests/square_viewport.gcode @@ -0,0 +1,45 @@ +G21 +G90;svg#svg8 > g#layer1 > path#path838 +G0 X1 Y9 +G1 X9 Y9 F300 +G1 X9 Y1 F300 +G1 X1 Y1 F300 +G1 X1 Y9 F300;svg#svg8 > g#layer1 > path#path832 +G0 X8 Y2.5 +G1 X7.992016 Y2.4110041813117045 F300 +G1 X7.9683189770239995 Y2.324850533089038 F300 +G1 X7.929665719197761 Y2.24429045824164 F300 +G1 X7.877290656963224 Y2.171896723319837 F300 +G1 X7.812866440307907 Y2.1099812946420924 F300 +G1 X7.738450521014919 Y2.060521503338657 F300 +G1 X7.656419445882797 Y2.025096897304599 F300 +G1 X7.569392959326962 Y2.0048387967582206 F300 +G1 X7.5 Y2 F300 +G1 X7.4110041813117045 Y2.007984 F300 +G1 X7.324850533089037 Y2.031681022976 F300 +G1 X7.24429045824164 Y2.0703342808022382 F300 +G1 X7.171896723319837 Y2.1227093430367767 F300 +G1 X7.1099812946420915 Y2.1871335596920924 F300 +G1 X7.0605215033386575 Y2.261549478985082 F300 +G1 X7.025096897304598 Y2.343580554117203 F300 +G1 X7.004838796758221 Y2.430607040673038 F300 +G1 X7 Y2.5000000000000004 F300 +G1 X7.007984 Y2.5889958186882964 F300 +G1 X7.0316810229760005 Y2.6751494669109626 F300 +G1 X7.070334280802239 Y2.7557095417583604 F300 +G1 X7.122709343036777 Y2.8281032766801633 F300 +G1 X7.187133559692093 Y2.8900187053579085 F300 +G1 X7.261549478985082 Y2.9394784966613434 F300 +G1 X7.343580554117204 Y2.9749031026954014 F300 +G1 X7.4306070406730385 Y2.9951612032417794 F300 +G1 X7.5 Y3 F300 +G1 X7.5889958186882955 Y2.992016 F300 +G1 X7.675149466910963 Y2.968318977024 F300 +G1 X7.75570954175836 Y2.9296657191977618 F300 +G1 X7.828103276680163 Y2.8772906569632233 F300 +G1 X7.890018705357908 Y2.8128664403079076 F300 +G1 X7.9394784966613425 Y2.7384505210149186 F300 +G1 X7.974903102695401 Y2.656419445882797 F300 +G1 X7.995161203241779 Y2.5693929593269624 F300 +G1 X8 Y2.5 F300 +M2 diff --git a/tests/square_viewport.svg b/tests/square_viewport.svg new file mode 100644 index 0000000..9221633 --- /dev/null +++ b/tests/square_viewport.svg @@ -0,0 +1,71 @@ + + + + + + + + + + image/svg+xml + + + + + + + + +