|
|
|
@ -246,8 +246,6 @@ pub fn svg2program<'a, 'input: 'a>(
|
|
|
|
|
options: ConversionOptions,
|
|
|
|
|
machine: Machine<'input>,
|
|
|
|
|
) -> Vec<Token<'input>> {
|
|
|
|
|
let mut origin_transform = Transform2D::identity();
|
|
|
|
|
loop {
|
|
|
|
|
let bounding_box = {
|
|
|
|
|
let mut visitor = ConversionVisitor {
|
|
|
|
|
terrarium: Terrarium::new(PreprocessTurtle::default()),
|
|
|
|
@ -256,27 +254,14 @@ pub fn svg2program<'a, 'input: 'a>(
|
|
|
|
|
name_stack: vec![],
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
visitor.terrarium.push_transform(origin_transform);
|
|
|
|
|
visitor.begin();
|
|
|
|
|
visit::depth_first_visit(doc, &mut visitor);
|
|
|
|
|
visitor.end();
|
|
|
|
|
visitor.terrarium.pop_transform();
|
|
|
|
|
|
|
|
|
|
visitor.terrarium.turtle.bounding_box
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!bounding_box.min.x.is_sign_negative() && !bounding_box.min.y.is_sign_negative())
|
|
|
|
|
|| bounding_box
|
|
|
|
|
.min
|
|
|
|
|
.to_vector()
|
|
|
|
|
.abs()
|
|
|
|
|
.lower_than(vector(std::f64::EPSILON, std::f64::EPSILON))
|
|
|
|
|
.all()
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
origin_transform = origin_transform.then(&{
|
|
|
|
|
let origin_transform = {
|
|
|
|
|
let mut transform = Transform2D::identity();
|
|
|
|
|
if let Some(origin_x) = config.origin[0] {
|
|
|
|
|
transform = transform.then_translate(vector(origin_x - bounding_box.min.x, 0.));
|
|
|
|
@ -285,8 +270,7 @@ pub fn svg2program<'a, 'input: 'a>(
|
|
|
|
|
transform = transform.then_translate(vector(0., origin_y - bounding_box.min.y));
|
|
|
|
|
}
|
|
|
|
|
transform
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let mut conversion_visitor = ConversionVisitor {
|
|
|
|
|
terrarium: Terrarium::new(GCodeTurtle {
|
|
|
|
|