index/objects/geometry/
tipable.rs1use crate::{objects::vector_object::VectorObjectBuilder, utils::point2d::Point2D};
2
3pub trait Tipable {
4 fn angle_at_end(&self) -> f32;
5 fn angle_at_start(&self) -> f32;
6 fn end(&self) -> Point2D;
7 fn start(&self) -> Point2D;
8 fn tip_at_end(&self, shape: VectorObjectBuilder) -> VectorObjectBuilder {
9 let angle = self.angle_at_end();
10 let end = self.end();
11 let builder = shape
12 .rotate(angle, Some(Point2D::new(0.0, 0.0)), None)
13 .shift(end.x, end.y, None);
14 builder
15 }
16 fn tip_at_start(&self, shape: VectorObjectBuilder) -> VectorObjectBuilder {
17 let angle = self.angle_at_start();
18 let start = self.start();
19 let builder = shape
20 .rotate(angle, Some(Point2D::new(0.0, 0.0)), None)
21 .shift(start.x, start.y, None);
22 builder
23 }
24}