Trait parry2d::query::QueryDispatcher[][src]

pub trait QueryDispatcher: Send + Sync {
    fn intersection_test(
        &self,
        pos12: &Isometry<Real>,
        g1: &dyn Shape,
        g2: &dyn Shape
    ) -> Result<bool, Unsupported>;
fn distance(
        &self,
        pos12: &Isometry<Real>,
        g1: &dyn Shape,
        g2: &dyn Shape
    ) -> Result<Real, Unsupported>;
fn contact(
        &self,
        pos12: &Isometry<Real>,
        g1: &dyn Shape,
        g2: &dyn Shape,
        prediction: Real
    ) -> Result<Option<Contact>, Unsupported>;
fn closest_points(
        &self,
        pos12: &Isometry<Real>,
        g1: &dyn Shape,
        g2: &dyn Shape,
        max_dist: Real
    ) -> Result<ClosestPoints, Unsupported>;
fn time_of_impact(
        &self,
        pos12: &Isometry<Real>,
        local_vel12: &Vector<Real>,
        g1: &dyn Shape,
        g2: &dyn Shape,
        max_toi: Real
    ) -> Result<Option<TOI>, Unsupported>;
fn nonlinear_time_of_impact(
        &self,
        motion1: &NonlinearRigidMotion,
        g1: &dyn Shape,
        motion2: &NonlinearRigidMotion,
        g2: &dyn Shape,
        start_time: Real,
        end_time: Real,
        stop_at_penetration: bool
    ) -> Result<Option<TOI>, Unsupported>; fn chain<U: QueryDispatcher>(
        self,
        other: U
    ) -> QueryDispatcherChain<Self, U>
    where
        Self: Sized
, { ... } }

Dispatcher for pairwise queries.

Custom implementations allow crates that support an abstract QueryDispatcher to handle custom shapes.

The pos12 argument to most queries is the transform from the local space of g2 to that of g1.

Required methods

fn intersection_test(
    &self,
    pos12: &Isometry<Real>,
    g1: &dyn Shape,
    g2: &dyn Shape
) -> Result<bool, Unsupported>
[src]

Tests whether two shapes are intersecting.

fn distance(
    &self,
    pos12: &Isometry<Real>,
    g1: &dyn Shape,
    g2: &dyn Shape
) -> Result<Real, Unsupported>
[src]

Computes the minimum distance separating two shapes.

Returns 0.0 if the objects are touching or penetrating.

fn contact(
    &self,
    pos12: &Isometry<Real>,
    g1: &dyn Shape,
    g2: &dyn Shape,
    prediction: Real
) -> Result<Option<Contact>, Unsupported>
[src]

Computes one pair of contact points point between two shapes.

Returns None if the objects are separated by a distance greater than prediction.

fn closest_points(
    &self,
    pos12: &Isometry<Real>,
    g1: &dyn Shape,
    g2: &dyn Shape,
    max_dist: Real
) -> Result<ClosestPoints, Unsupported>
[src]

Computes the pair of closest points between two shapes.

Returns ClosestPoints::Disjoint if the objects are separated by a distance greater than max_dist.

fn time_of_impact(
    &self,
    pos12: &Isometry<Real>,
    local_vel12: &Vector<Real>,
    g1: &dyn Shape,
    g2: &dyn Shape,
    max_toi: Real
) -> Result<Option<TOI>, Unsupported>
[src]

Computes the smallest time when two shapes under translational movement are separated by a distance smaller or equal to distance.

Returns 0.0 if the objects are touching or penetrating.

Parameters

  • pos12: the position of the second shape relative to the first shape.
  • local_vel12: the relative velocity between the two shapes, expressed in the local-space of the first shape. In other world: pos1.inverse() * (vel2 - vel1).
  • g1: the first shape involved in the TOI computation.
  • g2: the second shape involved in the TOI computation.
  • max_toi: the maximum allowed TOI. This method returns None if the time-of-impact detected is theater than this value.

fn nonlinear_time_of_impact(
    &self,
    motion1: &NonlinearRigidMotion,
    g1: &dyn Shape,
    motion2: &NonlinearRigidMotion,
    g2: &dyn Shape,
    start_time: Real,
    end_time: Real,
    stop_at_penetration: bool
) -> Result<Option<TOI>, Unsupported>
[src]

Computes the smallest time of impact of two shapes under translational and rotational movement.

Parameters

  • motion1 - The motion of the first shape.
  • g1 - The first shape involved in the query.
  • motion2 - The motion of the second shape.
  • g2 - The second shape involved in the query.
  • start_time - The starting time of the interval where the motion takes place.
  • end_time - The end time of the interval where the motion takes place.
  • stop_at_penetration - If the casted shape starts in a penetration state with any collider, two results are possible. If stop_at_penetration is true then, the result will have a toi equal to start_time. If stop_at_penetration is false then the nonlinear shape-casting will see if further motion wrt. the penetration normal would result in tunnelling. If it does not (i.e. we have a separating velocity along that normal) then the nonlinear shape-casting will attempt to find another impact, at a time > start_time that could result in tunnelling.
Loading content...

Provided methods

fn chain<U: QueryDispatcher>(self, other: U) -> QueryDispatcherChain<Self, U> where
    Self: Sized
[src]

Construct a QueryDispatcher that falls back on other for cases not handled by self

Loading content...

Implementors

impl QueryDispatcher for DefaultQueryDispatcher[src]

fn distance(
    &self,
    pos12: &Isometry<Real>,
    shape1: &dyn Shape,
    shape2: &dyn Shape
) -> Result<Real, Unsupported>
[src]

Computes the minimum distance separating two shapes.

Returns 0.0 if the objects are touching or penetrating.

impl<T, U> QueryDispatcher for QueryDispatcherChain<T, U> where
    T: QueryDispatcher,
    U: QueryDispatcher
[src]

Loading content...