Struct iron_shapes::path::Path
source · pub struct Path<T> {
pub points: PointString<T>,
pub width: T,
pub path_type: PathEndType<T>,
}Expand description
Path is essentially a chain of line segments but with a possibly a non-zero width.
It can be thought of the shape resulting by a stroke of a thick pen along the line segments.
Fields§
§points: PointString<T>The vertices of the path which define the sequence of line segments.
width: TWidth of the path.
path_type: PathEndType<T>Type of the path endings.
Implementations§
source§impl<T: Copy> Path<T>
impl<T: Copy> Path<T>
sourcepub fn new<I>(i: I, width: T) -> Selfwhere
I: Into<PointString<T>>,
pub fn new<I>(i: I, width: T) -> Selfwhere I: Into<PointString<T>>,
Create new path by taking vertices from a type that implements Into<PointString<T>>.
sourcepub fn new_extended<I>(i: I, width: T, ext_begin: T, ext_end: T) -> Selfwhere
I: Into<PointString<T>>,
pub fn new_extended<I>(i: I, width: T, ext_begin: T, ext_end: T) -> Selfwhere I: Into<PointString<T>>,
Create a path with extended beginning and end.
sourcepub fn new_rounded<I>(i: I, width: T) -> Selfwhere
I: Into<PointString<T>>,
pub fn new_rounded<I>(i: I, width: T) -> Selfwhere I: Into<PointString<T>>,
Create a path with rounded beginning and end.
source§impl<T: CoordinateType> Path<T>
impl<T: CoordinateType> Path<T>
sourcepub fn rotate_ortho(&self, angle: Angle) -> Self
pub fn rotate_ortho(&self, angle: Angle) -> Self
Rotate the path by a multiple of 90 degrees around the origin (0, 0).
sourcepub fn transform(&self, tf: &SimpleTransform<T>) -> Self
pub fn transform(&self, tf: &SimpleTransform<T>) -> Self
Get the transformed version of this path by applying tf.
source§impl<T: CoordinateType + NumCast> Path<T>
impl<T: CoordinateType + NumCast> Path<T>
sourcepub fn area_approx<F: Float>(&self) -> F
pub fn area_approx<F: Float>(&self) -> F
Compute approximate area occupied by the path. Simply computes length*width.
Examples
use iron_shapes::prelude::*;
let path = Path::new(&[(0, 0), (0, 2)], 1);
assert_eq!(path.area_approx::<f64>(), 2f64);sourcepub fn to_polygon_approx(&self) -> SimplePolygon<f64>
pub fn to_polygon_approx(&self) -> SimplePolygon<f64>
Convert the path into a polygon. The polygon can be self-intersecting.
Examples
use iron_shapes::prelude::*;
let path = Path::new(&[(0, 0), (10, 0), (10, 20)], 4);
let polygon = path.to_polygon_approx();
assert_eq!(polygon, SimplePolygon::from(&[(0., 2.), (0., -2.), (12., -2.), (12., 20.), (8., 20.), (8., 2.)]));Trait Implementations§
source§impl<'de, T> Deserialize<'de> for Path<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Path<T>where T: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
source§impl<T: PartialEq> PartialEq<Path<T>> for Path<T>
impl<T: PartialEq> PartialEq<Path<T>> for Path<T>
source§impl<T: Copy + PartialOrd + Num> TryBoundingBox<T> for Path<T>
impl<T: Copy + PartialOrd + Num> TryBoundingBox<T> for Path<T>
source§fn try_bounding_box(&self) -> Option<Rect<T>>
fn try_bounding_box(&self) -> Option<Rect<T>>
Compute the bounding box of this path. The returned bounding box is not necessarily the smallest bounding box.
TODO: Find a better approximation.