1mod cli;
2mod svg;
3
4use std::env;
5use std::fs;
6use std::process;
7
8use smooth_frame::SmoothRect;
9
10use cli::{drawable_dimension, effective_radius, parse_args};
11use svg::{format_number, render_svg};
12
13fn main() {
15 let config = match parse_args(env::args().skip(1)) {
16 Ok(Some(config)) => config,
17 Ok(None) => return,
18 Err(message) => {
19 eprintln!("参数错误:{message}");
20 eprintln!("运行 `cargo run --example demo -- --help` 查看用法。");
21 process::exit(2);
22 }
23 };
24
25 let drawable_width = drawable_dimension(config.width, config.border_width);
26 let drawable_height = drawable_dimension(config.height, config.border_width);
27 let radius = effective_radius(&config);
28 let path = SmoothRect::new(drawable_width, drawable_height)
29 .with_radius(radius)
30 .with_smoothing(config.smoothing)
31 .to_path();
32 let path_data = path.to_svg_path_with_precision(config.precision);
33
34 if let Some(output) = config.output.as_ref() {
35 let svg = render_svg(&config, &path_data);
36 if let Err(error) = fs::write(output, svg) {
37 eprintln!("写入 SVG 文件失败:{}:{error}", output.display());
38 process::exit(1);
39 }
40 println!("已生成 SVG 文件:{}", output.display());
41 } else if config.svg {
42 println!("{}", render_svg(&config, &path_data));
43 } else {
44 println!("SVG 宽度:{}", format_number(config.width));
45 println!("SVG 高度:{}", format_number(config.height));
46 println!("路径宽度:{}", format_number(drawable_width));
47 println!("路径高度:{}", format_number(drawable_height));
48 println!("半径:{}", format_number(radius));
49 println!("平滑:{}", format_number(config.smoothing));
50 println!("边框:{}", format_number(config.border_width));
51 println!("命令数:{}", path.commands().len());
52 println!("SVG path:{path_data}");
53 }
54}