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
use super::ToPolyline; use crate::procedural::utils; use crate::procedural::Polyline; use crate::shape::Capsule; use alga::general::RealField; use na; use na::{Point2, Vector2}; impl<N: RealField> ToPolyline<N> for Capsule<N> { type DiscretizationParameter = u32; fn to_polyline(&self, nsubdiv: u32) -> Polyline<N> { let pi = N::pi(); let dtheta = pi / na::convert(nsubdiv as f64); let mut points: Vec<Point2<N>> = Vec::with_capacity(nsubdiv as usize); utils::push_xy_arc(self.radius(), nsubdiv, dtheta, &mut points); let npoints = points.len(); for i in 0..npoints { let new_point = points[i] + Vector2::new(na::zero(), self.half_height()); points.push(-new_point); points[i] = new_point; } Polyline::new(points, None) } }