pub struct Polyline { /* private fields */ }
Expand description
A polyline.
Implementations§
Source§impl Polyline
impl Polyline
Sourcepub fn bounding_sphere(
&self,
pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
) -> BoundingSphere
pub fn bounding_sphere( &self, pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>, ) -> 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<OPoint<f32, Const<3>>>,
indices: Option<Vec<[u32; 2]>>,
) -> Polyline
pub fn new( vertices: Vec<OPoint<f32, Const<3>>>, indices: Option<Vec<[u32; 2]>>, ) -> Polyline
Creates a new polyline from a vertex buffer and an index buffer.
Sourcepub fn aabb(&self, pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>) -> Aabb
pub fn aabb(&self, pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>) -> 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
pub fn segments(&self) -> impl ExactSizeIterator
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 scaled(
self,
scale: &Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>,
) -> Polyline
pub fn scaled( self, scale: &Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>, ) -> Polyline
Computes a scaled version of this polyline.
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: OPoint<f32, Const<3>>,
axis: u8,
) -> (PointProjection, (u32, SegmentPointLocation))
pub fn project_local_point_assuming_solid_interior_ccw( &self, point: OPoint<f32, Const<3>>, axis: u8, ) -> (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
axis
.
These properties are not checked.
Trait Implementations§
Source§impl PointQuery for Polyline
impl PointQuery for Polyline
Source§fn project_local_point(
&self,
point: &OPoint<f32, Const<3>>,
solid: bool,
) -> PointProjection
fn project_local_point( &self, point: &OPoint<f32, Const<3>>, solid: bool, ) -> PointProjection
self
. Read moreSource§fn project_local_point_and_get_feature(
&self,
point: &OPoint<f32, Const<3>>,
) -> (PointProjection, FeatureId)
fn project_local_point_and_get_feature( &self, point: &OPoint<f32, Const<3>>, ) -> (PointProjection, FeatureId)
self
and returns the id of the
feature the point was projected on.Source§fn contains_local_point(&self, point: &OPoint<f32, Const<3>>) -> bool
fn contains_local_point(&self, point: &OPoint<f32, Const<3>>) -> bool
self
.Source§fn project_local_point_with_max_dist(
&self,
pt: &OPoint<f32, Const<3>>,
solid: bool,
max_dist: f32,
) -> Option<PointProjection>
fn project_local_point_with_max_dist( &self, pt: &OPoint<f32, Const<3>>, solid: bool, max_dist: f32, ) -> Option<PointProjection>
self
, unless the projection lies further than the given max distance. Read moreSource§fn project_point_with_max_dist(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
pt: &OPoint<f32, Const<3>>,
solid: bool,
max_dist: f32,
) -> Option<PointProjection>
fn project_point_with_max_dist( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, pt: &OPoint<f32, Const<3>>, solid: bool, max_dist: f32, ) -> Option<PointProjection>
self
transformed by m
, unless the projection lies further than the given max distance.Source§fn distance_to_local_point(
&self,
pt: &OPoint<f32, Const<3>>,
solid: bool,
) -> f32
fn distance_to_local_point( &self, pt: &OPoint<f32, Const<3>>, solid: bool, ) -> f32
self
.Source§fn project_point(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
pt: &OPoint<f32, Const<3>>,
solid: bool,
) -> PointProjection
fn project_point( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, pt: &OPoint<f32, Const<3>>, solid: bool, ) -> PointProjection
self
transformed by m
.Source§fn distance_to_point(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
pt: &OPoint<f32, Const<3>>,
solid: bool,
) -> f32
fn distance_to_point( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, pt: &OPoint<f32, Const<3>>, solid: bool, ) -> f32
self
transformed by m
.Source§fn project_point_and_get_feature(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
pt: &OPoint<f32, Const<3>>,
) -> (PointProjection, FeatureId)
fn project_point_and_get_feature( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, pt: &OPoint<f32, Const<3>>, ) -> (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
Source§type Location = (u32, SegmentPointLocation)
type Location = (u32, SegmentPointLocation)
Source§fn project_local_point_and_get_location(
&self,
point: &OPoint<f32, Const<3>>,
solid: bool,
) -> (PointProjection, <Polyline as PointQueryWithLocation>::Location)
fn project_local_point_and_get_location( &self, point: &OPoint<f32, Const<3>>, solid: bool, ) -> (PointProjection, <Polyline as PointQueryWithLocation>::Location)
self
.Source§fn project_point_and_get_location(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
pt: &OPoint<f32, Const<3>>,
solid: bool,
) -> (PointProjection, Self::Location)
fn project_point_and_get_location( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, pt: &OPoint<f32, Const<3>>, solid: bool, ) -> (PointProjection, Self::Location)
self
transformed by m
.Source§impl RayCast for Polyline
impl RayCast for Polyline
Source§fn cast_local_ray(
&self,
ray: &Ray,
max_time_of_impact: f32,
solid: bool,
) -> Option<f32>
fn cast_local_ray( &self, ray: &Ray, max_time_of_impact: f32, solid: bool, ) -> Option<f32>
Source§fn cast_local_ray_and_get_normal(
&self,
ray: &Ray,
max_time_of_impact: f32,
solid: bool,
) -> Option<RayIntersection>
fn cast_local_ray_and_get_normal( &self, ray: &Ray, max_time_of_impact: f32, solid: bool, ) -> Option<RayIntersection>
Source§fn intersects_local_ray(&self, ray: &Ray, max_time_of_impact: f32) -> bool
fn intersects_local_ray(&self, ray: &Ray, max_time_of_impact: f32) -> bool
Source§fn cast_ray(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
ray: &Ray,
max_time_of_impact: f32,
solid: bool,
) -> Option<f32>
fn cast_ray( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, ray: &Ray, max_time_of_impact: f32, solid: bool, ) -> Option<f32>
Source§fn cast_ray_and_get_normal(
&self,
m: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
ray: &Ray,
max_time_of_impact: f32,
solid: bool,
) -> Option<RayIntersection>
fn cast_ray_and_get_normal( &self, m: &Isometry<f32, Unit<Quaternion<f32>>, 3>, ray: &Ray, max_time_of_impact: f32, solid: bool, ) -> Option<RayIntersection>
Source§impl Shape for Polyline
impl Shape for Polyline
Source§fn scale_dyn(
&self,
scale: &Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>,
_num_subdivisions: u32,
) -> Option<Box<dyn Shape>>
fn scale_dyn( &self, scale: &Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>, _num_subdivisions: u32, ) -> Option<Box<dyn Shape>>
scale
into a boxed trait-object. Read moreSource§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<f32, Unit<Quaternion<f32>>, 3>,
) -> Aabb
fn compute_aabb( &self, position: &Isometry<f32, Unit<Quaternion<f32>>, 3>, ) -> Aabb
Aabb
of this shape with the given position.Source§fn mass_properties(&self, _density: f32) -> MassProperties
fn mass_properties(&self, _density: f32) -> 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) -> f32
fn ccd_angular_thickness(&self) -> f32
fn as_composite_shape(&self) -> Option<&dyn SimdCompositeShape>
Source§fn clone_box(&self) -> Box<dyn Shape>
fn clone_box(&self) -> Box<dyn Shape>
clone_dyn
Source§fn compute_bounding_sphere(
&self,
position: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
) -> BoundingSphere
fn compute_bounding_sphere( &self, position: &Isometry<f32, Unit<Quaternion<f32>>, 3>, ) -> 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, f32)>
fn as_polygonal_feature_map(&self) -> Option<(&dyn PolygonalFeatureMap, f32)>
Source§fn feature_normal_at_point(
&self,
_feature: FeatureId,
_point: &OPoint<f32, Const<3>>,
) -> Option<Unit<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>>>
fn feature_normal_at_point( &self, _feature: FeatureId, _point: &OPoint<f32, Const<3>>, ) -> Option<Unit<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>>>
Source§fn compute_swept_aabb(
&self,
start_pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
end_pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>,
) -> Aabb
fn compute_swept_aabb( &self, start_pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>, end_pos: &Isometry<f32, Unit<Quaternion<f32>>, 3>, ) -> Aabb
Aabb
of this shape, i.e., the space it would occupy by moving from
the given start position to the given end position.Source§impl SimdCompositeShape for Polyline
impl SimdCompositeShape for Polyline
Source§fn map_part_at(
&self,
i: u32,
f: &mut dyn FnMut(Option<&Isometry<f32, Unit<Quaternion<f32>>, 3>>, &(dyn Shape + 'static), Option<&(dyn NormalConstraints + 'static)>),
)
fn map_part_at( &self, i: u32, f: &mut dyn FnMut(Option<&Isometry<f32, Unit<Quaternion<f32>>, 3>>, &(dyn Shape + 'static), Option<&(dyn NormalConstraints + 'static)>), )
Source§impl TypedSimdCompositeShape for Polyline
impl TypedSimdCompositeShape for Polyline
type PartShape = Segment
type PartNormalConstraints = ()
type PartId = u32
fn map_typed_part_at( &self, i: u32, f: impl FnMut(Option<&Isometry<f32, Unit<Quaternion<f32>>, 3>>, &<Polyline as TypedSimdCompositeShape>::PartShape, Option<&<Polyline as TypedSimdCompositeShape>::PartNormalConstraints>), )
fn map_untyped_part_at( &self, i: u32, f: impl FnMut(Option<&Isometry<f32, Unit<Quaternion<f32>>, 3>>, &(dyn Shape + 'static), Option<&(dyn NormalConstraints + 'static)>), )
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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<T> Pointable for T
impl<T> Pointable for T
Source§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.