Struct parry2d_f64::shape::Polyline
source · pub struct Polyline { /* private fields */ }Expand description
A polyline.
Implementations§
source§impl Polyline
impl Polyline
sourcepub fn bounding_sphere(&self, pos: &Isometry<Real>) -> BoundingSphere
pub fn bounding_sphere(&self, pos: &Isometry<Real>) -> BoundingSphere
Computes the world-space bounding sphere of this polyline, transformed by pos.
sourcepub fn local_bounding_sphere(&self) -> BoundingSphere
pub fn local_bounding_sphere(&self) -> BoundingSphere
Computes the local-space bounding sphere of this polyline.
source§impl Polyline
impl Polyline
sourcepub fn new(vertices: Vec<Point<Real>>, indices: Option<Vec<[u32; 2]>>) -> Self
pub fn new(vertices: Vec<Point<Real>>, indices: Option<Vec<[u32; 2]>>) -> Self
Creates a new polyline from a vertex buffer and an index buffer.
sourcepub fn aabb(&self, pos: &Isometry<Real>) -> Aabb
pub fn aabb(&self, pos: &Isometry<Real>) -> Aabb
Compute the axis-aligned bounding box of this polyline.
sourcepub fn local_aabb(&self) -> &Aabb
pub fn local_aabb(&self) -> &Aabb
Gets the local axis-aligned bounding box of this polyline.
sourcepub fn num_segments(&self) -> usize
pub fn num_segments(&self) -> usize
The number of segments forming this polyline.
sourcepub fn segments(&self) -> impl ExactSizeIterator<Item = Segment> + '_
pub fn segments(&self) -> impl ExactSizeIterator<Item = Segment> + '_
An iterator through all the segments of this mesh.
sourcepub fn segment_feature_to_polyline_feature(
&self,
segment: u32,
_feature: FeatureId
) -> FeatureId
pub fn segment_feature_to_polyline_feature( &self, segment: u32, _feature: FeatureId ) -> FeatureId
Transforms the feature-id of a segment to the feature-id of this polyline.
sourcepub fn flat_indices(&self) -> &[u32]
pub fn flat_indices(&self) -> &[u32]
A flat view of the index buffer of this mesh.
sourcepub fn reverse(&mut self)
pub fn reverse(&mut self)
Reverse the orientation of this polyline by swapping the indices of all its segments and reverting its index buffer.
sourcepub fn extract_connected_components(&self) -> Vec<Polyline>
pub fn extract_connected_components(&self) -> Vec<Polyline>
Extracts the connected components of this polyline, consuming self.
This method is currently quite restrictive on the kind of allowed input. The polyline
represented by self must already have an index buffer sorted such that:
- Each connected component appears in the index buffer one after the other, i.e., a connected component of this polyline must be a contiguous range of this polyline’s index buffer.
- Each connected component is closed, i.e., each range of this polyline index buffer
self.indices[i_start..=i_end]forming a complete connected component, we must haveself.indices[i_start][0] == self.indices[i_end][1]. - The indices for each component must already be in order, i.e., if the segments
self.indices[i]andself.indices[i + 1]are part of the same connected component then we must haveself.indices[i][1] == self.indices[i + 1][0].
§Output
Returns the set of polylines. If the inputs fulfill the constraints mentioned above, each
polyline will be a closed loop with consistent edge orientations, i.e., for all indices i,
we have polyline.indices[i][1] == polyline.indices[i + 1][0].
The orientation of each closed loop (clockwise or counterclockwise) are identical to their
original orientation in self.
sourcepub fn project_local_point_assuming_solid_interior_ccw(
&self,
point: Point<Real>
) -> (PointProjection, (u32, SegmentPointLocation))
pub fn project_local_point_assuming_solid_interior_ccw( &self, point: Point<Real> ) -> (PointProjection, (u32, SegmentPointLocation))
Perform a point projection assuming a solid interior based on a counter-clock-wise orientation.
This is similar to self.project_local_point_and_get_location except that the resulting
PointProjection::is_inside will be set to true if the point is inside of the area delimited
by this polyline, assuming that:
- This polyline isn’t self-crossing.
- This polyline is closed with
self.indices[i][1] == self.indices[(i + 1) % num_indices][0]wherenum_indices == self.indices.len(). - This polyline is oriented counter-clockwise.
- In 3D, the polyline is assumed to be fully coplanar, on a plane with normal given by These properties are not checked.
Trait Implementations§
source§impl PointQuery for Polyline
impl PointQuery for Polyline
source§fn project_local_point(
&self,
point: &Point<Real>,
solid: bool
) -> PointProjection
fn project_local_point( &self, point: &Point<Real>, solid: bool ) -> PointProjection
self. Read moresource§fn project_local_point_and_get_feature(
&self,
point: &Point<Real>
) -> (PointProjection, FeatureId)
fn project_local_point_and_get_feature( &self, point: &Point<Real> ) -> (PointProjection, FeatureId)
self and returns the id of the
feature the point was projected on.source§fn contains_local_point(&self, point: &Point<Real>) -> bool
fn contains_local_point(&self, point: &Point<Real>) -> bool
self.source§fn project_local_point_with_max_dist(
&self,
pt: &Point<Real>,
solid: bool,
max_dist: Real
) -> Option<PointProjection>
fn project_local_point_with_max_dist( &self, pt: &Point<Real>, solid: bool, max_dist: Real ) -> Option<PointProjection>
self, unless the projection lies further than the given max distance. Read moresource§fn project_point_with_max_dist(
&self,
m: &Isometry<Real>,
pt: &Point<Real>,
solid: bool,
max_dist: Real
) -> Option<PointProjection>
fn project_point_with_max_dist( &self, m: &Isometry<Real>, pt: &Point<Real>, solid: bool, max_dist: Real ) -> Option<PointProjection>
self transformed by m, unless the projection lies further than the given max distance.source§fn distance_to_local_point(&self, pt: &Point<Real>, solid: bool) -> Real
fn distance_to_local_point(&self, pt: &Point<Real>, solid: bool) -> Real
self.source§fn project_point(
&self,
m: &Isometry<Real>,
pt: &Point<Real>,
solid: bool
) -> PointProjection
fn project_point( &self, m: &Isometry<Real>, pt: &Point<Real>, solid: bool ) -> PointProjection
self transformed by m.source§fn distance_to_point(
&self,
m: &Isometry<Real>,
pt: &Point<Real>,
solid: bool
) -> Real
fn distance_to_point( &self, m: &Isometry<Real>, pt: &Point<Real>, solid: bool ) -> Real
self transformed by m.source§fn project_point_and_get_feature(
&self,
m: &Isometry<Real>,
pt: &Point<Real>
) -> (PointProjection, FeatureId)
fn project_point_and_get_feature( &self, m: &Isometry<Real>, pt: &Point<Real> ) -> (PointProjection, FeatureId)
self transformed by m and returns the id of the
feature the point was projected on.source§impl PointQueryWithLocation for Polyline
impl PointQueryWithLocation for Polyline
§type Location = (u32, SegmentPointLocation)
type Location = (u32, SegmentPointLocation)
source§fn project_local_point_and_get_location(
&self,
point: &Point<Real>,
solid: bool
) -> (PointProjection, Self::Location)
fn project_local_point_and_get_location( &self, point: &Point<Real>, solid: bool ) -> (PointProjection, Self::Location)
self.source§fn project_point_and_get_location(
&self,
m: &Isometry<Real>,
pt: &Point<Real>,
solid: bool
) -> (PointProjection, Self::Location)
fn project_point_and_get_location( &self, m: &Isometry<Real>, pt: &Point<Real>, solid: bool ) -> (PointProjection, Self::Location)
self transformed by m.source§fn project_local_point_and_get_location_with_max_dist(
&self,
pt: &Point<Real>,
solid: bool,
max_dist: Real
) -> Option<(PointProjection, Self::Location)>
fn project_local_point_and_get_location_with_max_dist( &self, pt: &Point<Real>, solid: bool, max_dist: Real ) -> Option<(PointProjection, Self::Location)>
self, with a maximum projection distance.source§impl RayCast for Polyline
impl RayCast for Polyline
source§fn cast_local_ray(&self, ray: &Ray, max_toi: Real, solid: bool) -> Option<Real>
fn cast_local_ray(&self, ray: &Ray, max_toi: Real, solid: bool) -> Option<Real>
source§fn cast_local_ray_and_get_normal(
&self,
ray: &Ray,
max_toi: Real,
solid: bool
) -> Option<RayIntersection>
fn cast_local_ray_and_get_normal( &self, ray: &Ray, max_toi: Real, solid: bool ) -> Option<RayIntersection>
source§fn intersects_local_ray(&self, ray: &Ray, max_toi: Real) -> bool
fn intersects_local_ray(&self, ray: &Ray, max_toi: Real) -> bool
source§fn cast_ray(
&self,
m: &Isometry<Real>,
ray: &Ray,
max_toi: Real,
solid: bool
) -> Option<Real>
fn cast_ray( &self, m: &Isometry<Real>, ray: &Ray, max_toi: Real, solid: bool ) -> Option<Real>
source§fn cast_ray_and_get_normal(
&self,
m: &Isometry<Real>,
ray: &Ray,
max_toi: Real,
solid: bool
) -> Option<RayIntersection>
fn cast_ray_and_get_normal( &self, m: &Isometry<Real>, ray: &Ray, max_toi: Real, solid: bool ) -> Option<RayIntersection>
source§impl Shape for Polyline
impl Shape for Polyline
source§fn compute_local_aabb(&self) -> Aabb
fn compute_local_aabb(&self) -> Aabb
Aabb of this shape.source§fn compute_local_bounding_sphere(&self) -> BoundingSphere
fn compute_local_bounding_sphere(&self) -> BoundingSphere
source§fn compute_aabb(&self, position: &Isometry<Real>) -> Aabb
fn compute_aabb(&self, position: &Isometry<Real>) -> Aabb
Aabb of this shape with the given position.source§fn mass_properties(&self, _density: Real) -> MassProperties
fn mass_properties(&self, _density: Real) -> MassProperties
source§fn shape_type(&self) -> ShapeType
fn shape_type(&self) -> ShapeType
source§fn as_typed_shape(&self) -> TypedShape<'_>
fn as_typed_shape(&self) -> TypedShape<'_>
fn ccd_thickness(&self) -> Real
fn ccd_angular_thickness(&self) -> Real
fn as_composite_shape(&self) -> Option<&dyn SimdCompositeShape>
source§fn compute_bounding_sphere(&self, position: &Isometry<Real>) -> BoundingSphere
fn compute_bounding_sphere(&self, position: &Isometry<Real>) -> BoundingSphere
source§fn as_support_map(&self) -> Option<&dyn SupportMap>
fn as_support_map(&self) -> Option<&dyn SupportMap>
source§fn as_polygonal_feature_map(&self) -> Option<(&dyn PolygonalFeatureMap, Real)>
fn as_polygonal_feature_map(&self) -> Option<(&dyn PolygonalFeatureMap, Real)>
source§impl SimdCompositeShape for Polyline
impl SimdCompositeShape for Polyline
source§impl TypedSimdCompositeShape for Polyline
impl TypedSimdCompositeShape for Polyline
type PartShape = Segment
type PartId = u32
type QbvhStorage = DefaultStorage
fn map_typed_part_at( &self, i: u32, f: impl FnMut(Option<&Isometry<Real>>, &Self::PartShape) )
fn map_untyped_part_at( &self, i: u32, f: impl FnMut(Option<&Isometry<Real>>, &dyn Shape) )
fn typed_qbvh(&self) -> &Qbvh<u32>
Auto Trait Implementations§
impl Freeze for Polyline
impl RefUnwindSafe for Polyline
impl Send for Polyline
impl Sync for Polyline
impl Unpin for Polyline
impl UnwindSafe for Polyline
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moresource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.