index/objects/geometry/
tipable.rs

1use 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}