|
| 1 | +use bezier_rs::BezierHandles; |
1 | 2 | use dyn_any::DynAny; |
2 | 3 | use glam::DVec2; |
3 | | -use kurbo::Point; |
| 4 | +use kurbo::{CubicBez, Line, PathSeg, Point, QuadBez}; |
4 | 5 |
|
5 | 6 | /// Represents different ways of calculating the centroid. |
6 | 7 | #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)] |
@@ -96,3 +97,37 @@ pub fn point_to_dvec2(point: Point) -> DVec2 { |
96 | 97 | pub fn dvec2_to_point(value: DVec2) -> Point { |
97 | 98 | Point { x: value.x, y: value.y } |
98 | 99 | } |
| 100 | + |
| 101 | +pub fn segment_to_handles(segment: &PathSeg) -> BezierHandles { |
| 102 | + match *segment { |
| 103 | + PathSeg::Line(_) => BezierHandles::Linear, |
| 104 | + PathSeg::Quad(QuadBez { p0: _, p1, p2: _ }) => BezierHandles::Quadratic { handle: point_to_dvec2(p1) }, |
| 105 | + PathSeg::Cubic(CubicBez { p0: _, p1, p2, p3: _ }) => BezierHandles::Cubic { |
| 106 | + handle_start: point_to_dvec2(p1), |
| 107 | + handle_end: point_to_dvec2(p2), |
| 108 | + }, |
| 109 | + } |
| 110 | +} |
| 111 | + |
| 112 | +pub fn handles_to_segment(start: DVec2, handles: BezierHandles, end: DVec2) -> PathSeg { |
| 113 | + match handles { |
| 114 | + bezier_rs::BezierHandles::Linear => { |
| 115 | + let p0 = dvec2_to_point(start); |
| 116 | + let p1 = dvec2_to_point(end); |
| 117 | + PathSeg::Line(Line::new(p0, p1)) |
| 118 | + } |
| 119 | + bezier_rs::BezierHandles::Quadratic { handle } => { |
| 120 | + let p0 = dvec2_to_point(start); |
| 121 | + let p1 = dvec2_to_point(handle); |
| 122 | + let p2 = dvec2_to_point(end); |
| 123 | + PathSeg::Quad(QuadBez::new(p0, p1, p2)) |
| 124 | + } |
| 125 | + bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => { |
| 126 | + let p0 = dvec2_to_point(start); |
| 127 | + let p1 = dvec2_to_point(handle_start); |
| 128 | + let p2 = dvec2_to_point(handle_end); |
| 129 | + let p3 = dvec2_to_point(end); |
| 130 | + PathSeg::Cubic(CubicBez::new(p0, p1, p2, p3)) |
| 131 | + } |
| 132 | + } |
| 133 | +} |
0 commit comments