2 个版本
0.1.1 | 2023年4月5日 |
---|---|
0.1.0 | 2023年3月7日 |
70 在 #points
每月 121 次下载
20KB
380 行
SVG 路径解析器
一个真正无偏见的 SVG 路径读取库。事实上,它只是返回点列表以及路径是否闭合。如果路径闭合,则假设最后一点和第一点之间存在一条线。
用法
首先,从 d
标签中提取路径字符串。我不知道,使用正则表达式或类似的方法,这是一个自由的世界。然后,将其输入解析器
let paths = svg_path_parser::parse(&path).collect::<Vec<(bool, Vec<(f64, f64)>)>>();
bool
表示路径是否闭合,而 Vec
是所有点的向量。将其视为连续的点连接。
默认情况下,曲线以 64 个不同角度均匀间隔的线段进行渲染。为了更改此设置,请使用
let resolution = 32;
let paths = svg_path_parser::parse_with_resolution(&path, resolution).collect::<Vec<(bool, Vec<(f64, f64)>)>>();
从点列表创建线
我明白点列表并不很有用。
struct Line {
start: (f64, f64),
end: (f64, f64),
}
impl Line {
pub fn new(start:(f64, f64), end:(f64, f64)) -> Self {
Self { start, end, }
}
}
fn to_lines((close, path):(bool, Vec<(f64, f64)>)) -> Vec<Line> {
let mut lines = path.iter()
.zip(path.iter().skip(1))
.map(|(start, end)| Line::new(*start, *end))
.collect::<Vec<Line>>();
if close && lines.len() > 0 {
let &end = lines[lines.len() - 1];
let &start = lines[0]
if start.start != end.end {
lines.push(Line::new(end.end, start.start));
}
}
lines
}