parry2d/transformation/to_polyline/
round_convex_polygon_to_polyline.rs1use crate::math::Vector2;
2use crate::shape::RoundConvexPolygon;
3use crate::transformation::utils;
4use alloc::{vec, vec::Vec};
5
6impl RoundConvexPolygon {
7 pub fn to_polyline(&self, border_subdivs: u32) -> Vec<Vector2> {
9 let mut out_vtx = vec![];
10 let pts = self.inner_shape.points();
11 let ns = self.inner_shape.normals();
12 let br = self.border_radius;
13
14 out_vtx.push(pts[0] + *ns.last().unwrap() * br);
15
16 for ia in 0..pts.len() - 1 {
17 let ib = ia + 1;
18
19 let arc_start = *out_vtx.last().unwrap();
20 let arc_end = pts[ia] + ns[ia] * br;
21 utils::push_arc(pts[ia], arc_start, arc_end, border_subdivs, &mut out_vtx);
22 out_vtx.push(arc_end);
23 out_vtx.push(pts[ib] + ns[ia] * br);
24 }
25
26 let arc_center = *pts.last().unwrap();
27 let arc_start = *out_vtx.last().unwrap();
28 let arc_end = arc_center + *ns.last().unwrap() * br;
29 utils::push_arc(arc_center, arc_start, arc_end, border_subdivs, &mut out_vtx);
30 out_vtx.push(arc_end);
31
32 out_vtx
33 }
34}