1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
use algebr::{Angle, Vec2}; use crate::{position::Rect, style::Style, Shape, ShapeType}; #[derive(Debug, Clone)] pub struct Arc { pub(crate) pos: Rect, pub(crate) inner_radius: f32, pub(crate) outer_radius: f32, pub(crate) start_angle: Angle, pub(crate) end_angle: Angle, pub(crate) style: Option<Style>, } crate::impl_pos!(Arc); crate::impl_style!(Arc); impl Arc { pub const fn new() -> Arc { Arc { pos: Rect::new(), inner_radius: 0.0, outer_radius: 0.0, start_angle: Angle::radians(0.0), end_angle: Angle::radians(0.0), style: None, } } pub const fn with_inner_radius(mut self, inner_radius: f32) -> Arc { self.inner_radius = inner_radius; self } pub const fn with_outer_radius(mut self, outer_radius: f32) -> Arc { self.outer_radius = outer_radius; self } pub const fn with_start_angle(mut self, start_angle: Angle) -> Arc { self.start_angle = start_angle; self } pub const fn with_end_angle(mut self, end_angle: Angle) -> Arc { self.end_angle = end_angle; self } } impl Into<Shape> for Arc { fn into(self) -> Shape { let size = Vec2::ones() * self.outer_radius * 2.; Shape { pos: self.pos.with_size(size), style: self.style, shape_type: ShapeType::Arc { inner_radius: self.inner_radius, outer_radius: self.outer_radius, start_angle: self.start_angle, end_angle: self.end_angle, }, } } }