|
|
@ -62,20 +62,26 @@ fn main() -> io::Result<()> {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let options = converter::ProgramOptions {
|
|
|
|
let mut options = ProgramOptions::default();
|
|
|
|
tolerance: matches
|
|
|
|
|
|
|
|
.value_of("tolerance")
|
|
|
|
if let Some(tolerance) = matches
|
|
|
|
.map(|x| x.parse().expect("could not parse tolerance"))
|
|
|
|
.value_of("tolerance")
|
|
|
|
.unwrap_or(0.002),
|
|
|
|
.map(|tolerance| tolerance.parse().expect("could not parse tolerance"))
|
|
|
|
feedrate: matches
|
|
|
|
{
|
|
|
|
.value_of("feedrate")
|
|
|
|
options.tolerance = tolerance;
|
|
|
|
.map(|x| x.parse().expect("could not parse feedrate"))
|
|
|
|
}
|
|
|
|
.unwrap_or(300.0),
|
|
|
|
if let Some(feedrate) = matches
|
|
|
|
dpi: matches
|
|
|
|
.value_of("feedrate")
|
|
|
|
.value_of("dpi")
|
|
|
|
.map(|feedrate| feedrate.parse().expect("could not parse tolerance"))
|
|
|
|
.map(|x| x.parse().expect("could not parse DPI"))
|
|
|
|
{
|
|
|
|
.unwrap_or(96.0),
|
|
|
|
options.feedrate = feedrate;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
if let Some(dpi) = matches
|
|
|
|
|
|
|
|
.value_of("dpi")
|
|
|
|
|
|
|
|
.map(|dpi| dpi.parse().expect("could not parse tolerance"))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
options.dpi = dpi;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let machine = machine::Machine::new(
|
|
|
|
let machine = machine::Machine::new(
|
|
|
|
matches
|
|
|
|
matches
|
|
|
@ -120,19 +126,32 @@ fn main() -> io::Result<()> {
|
|
|
|
mod test {
|
|
|
|
mod test {
|
|
|
|
use super::*;
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn get_actual(input: &str) -> String {
|
|
|
|
fn square_produces_expected_gcode() {
|
|
|
|
|
|
|
|
let shapes = include_str!("../tests/square.svg");
|
|
|
|
|
|
|
|
let options = ProgramOptions::default();
|
|
|
|
let options = ProgramOptions::default();
|
|
|
|
let machine = Machine::default();
|
|
|
|
let machine = Machine::default();
|
|
|
|
let document = roxmltree::Document::parse(&shapes).unwrap();
|
|
|
|
let document = roxmltree::Document::parse(input).unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let mut program = converter::svg2program(&document, options, machine);
|
|
|
|
|
|
|
|
postprocess::set_origin(&mut program, lyon_geom::math::point(0., 0.));
|
|
|
|
|
|
|
|
|
|
|
|
let program = converter::svg2program(&document, options, machine);
|
|
|
|
|
|
|
|
let mut actual = vec![];
|
|
|
|
let mut actual = vec![];
|
|
|
|
assert!(gcode::program2gcode(program, &mut actual).is_ok());
|
|
|
|
assert!(gcode::program2gcode(program, &mut actual).is_ok());
|
|
|
|
assert_eq!(
|
|
|
|
String::from_utf8(actual).unwrap()
|
|
|
|
String::from_utf8(actual).unwrap(),
|
|
|
|
}
|
|
|
|
include_str!("../tests/square.gcode")
|
|
|
|
|
|
|
|
)
|
|
|
|
#[test]
|
|
|
|
|
|
|
|
fn square_produces_expected_gcode() {
|
|
|
|
|
|
|
|
let square = include_str!("../tests/square.svg");
|
|
|
|
|
|
|
|
let actual = get_actual(square);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert_eq!(actual, include_str!("../tests/square.gcode"))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
|
|
fn square_transformed_produces_expected_gcode() {
|
|
|
|
|
|
|
|
let square_transformed = include_str!("../tests/square_transformed.svg");
|
|
|
|
|
|
|
|
let actual = get_actual(square_transformed);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert_eq!(actual, include_str!("../tests/square_transformed.gcode"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|