Skip to main content

demo/
main.rs

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
13// 解析命令行参数并输出路径数据或完整 SVG。
14fn 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}