[][src]Trait oxygengine_physics_2d::prelude::object::Body

pub trait Body<N>: Send + Sync + Downcast where
    N: RealField
{ fn update_kinematics(&mut self);
fn update_dynamics(&mut self, dt: N);
fn update_acceleration(
        &mut self,
        gravity: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
        parameters: &IntegrationParameters<N>
    );
fn clear_forces(&mut self);
fn clear_update_flags(&mut self);
fn update_status(&self) -> BodyUpdateStatus;
fn apply_displacement(&mut self, disp: &[N]);
fn status(&self) -> BodyStatus;
fn set_status(&mut self, status: BodyStatus);
fn activation_status(&self) -> &ActivationStatus<N>;
fn set_deactivation_threshold(&mut self, threshold: Option<N>);
fn ndofs(&self) -> usize;
fn generalized_acceleration(
        &self
    ) -> Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>;
fn generalized_velocity(
        &self
    ) -> Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>;
fn companion_id(&self) -> usize;
fn set_companion_id(&mut self, id: usize);
fn generalized_velocity_mut(
        &mut self
    ) -> Matrix<N, Dynamic, U1, SliceStorageMut<N, Dynamic, U1, U1, Dynamic>>;
fn integrate(&mut self, parameters: &IntegrationParameters<N>);
fn activate_with_energy(&mut self, energy: N);
fn deactivate(&mut self);
fn num_parts(&self) -> usize;
fn part(&self, i: usize) -> Option<&(dyn BodyPart<N> + 'static)>;
fn deformed_positions(&self) -> Option<(DeformationsType, &[N])>;
fn deformed_positions_mut(&mut self) -> Option<(DeformationsType, &mut [N])>;
fn fill_constraint_geometry(
        &self,
        part: &(dyn BodyPart<N> + 'static),
        ndofs: usize,
        center: &Point<N, U2>,
        dir: &ForceDirection<N>,
        j_id: usize,
        wj_id: usize,
        jacobians: &mut [N],
        inv_r: &mut N,
        ext_vels: Option<&Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>>,
        out_vel: Option<&mut N>
    );
fn world_point_at_material_point(
        &self,
        part: &(dyn BodyPart<N> + 'static),
        point: &Point<N, U2>
    ) -> Point<N, U2>;
fn position_at_material_point(
        &self,
        part: &(dyn BodyPart<N> + 'static),
        point: &Point<N, U2>
    ) -> Isometry<N, U2, Unit<Complex<N>>>;
fn material_point_at_world_point(
        &self,
        part: &(dyn BodyPart<N> + 'static),
        point: &Point<N, U2>
    ) -> Point<N, U2>;
fn has_active_internal_constraints(&mut self) -> bool;
fn setup_internal_velocity_constraints(
        &mut self,
        ext_vels: &Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>,
        parameters: &IntegrationParameters<N>
    );
fn warmstart_internal_velocity_constraints(
        &mut self,
        dvels: &mut Matrix<N, Dynamic, U1, SliceStorageMut<N, Dynamic, U1, U1, Dynamic>>
    );
fn step_solve_internal_velocity_constraints(
        &mut self,
        dvels: &mut Matrix<N, Dynamic, U1, SliceStorageMut<N, Dynamic, U1, U1, Dynamic>>
    );
fn step_solve_internal_position_constraints(
        &mut self,
        parameters: &IntegrationParameters<N>
    );
fn gravity_enabled(&self) -> bool;
fn enable_gravity(&mut self, enabled: bool);
fn velocity_at_point(
        &self,
        part_id: usize,
        point: &Point<N, U2>
    ) -> Velocity2<N>;
fn apply_force(
        &mut self,
        part_id: usize,
        force: &Force2<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_local_force(
        &mut self,
        part_id: usize,
        force: &Force2<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_force_at_point(
        &mut self,
        part_id: usize,
        force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
        point: &Point<N, U2>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_local_force_at_point(
        &mut self,
        part_id: usize,
        force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
        point: &Point<N, U2>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_force_at_local_point(
        &mut self,
        part_id: usize,
        force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
        point: &Point<N, U2>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_local_force_at_local_point(
        &mut self,
        part_id: usize,
        force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
        point: &Point<N, U2>,
        force_type: ForceType,
        auto_wake_up: bool
    ); fn is_ground(&self) -> bool { ... }
fn update_activation_status(&mut self) { ... }
fn advance(&mut self, _time_ratio: N) { ... }
fn validate_advancement(&mut self) { ... }
fn clamp_advancement(&mut self) { ... }
fn part_motion(
        &self,
        _part_id: usize,
        _time_origin: N
    ) -> Option<BodyPartMotion<N>> { ... }
fn step_started(&mut self) { ... }
fn add_local_inertia_and_com(
        &mut self,
        _part_index: usize,
        _com: Point<N, U2>,
        _inertia: Inertia2<N>
    ) { ... }
fn status_dependent_ndofs(&self) -> usize { ... }
fn status_dependent_body_part_velocity(
        &self,
        part: &(dyn BodyPart<N> + 'static)
    ) -> Velocity2<N> { ... }
fn is_active(&self) -> bool { ... }
fn is_dynamic(&self) -> bool { ... }
fn is_kinematic(&self) -> bool { ... }
fn is_static(&self) -> bool { ... }
fn activate(&mut self) { ... } }

Trait implemented by all bodies supported by nphysics.

Required methods

fn update_kinematics(&mut self)

Updates the kinematics, e.g., positions and jacobians, of this body.

fn update_dynamics(&mut self, dt: N)

Update the dynamics property of this body.

fn update_acceleration(
    &mut self,
    gravity: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
    parameters: &IntegrationParameters<N>
)

Update the acceleration of this body given the forces it is subject to and the gravity.

fn clear_forces(&mut self)

Reset the timestep-specific dynamic information of this body.

fn clear_update_flags(&mut self)

Clear all the update flags of this body.

fn update_status(&self) -> BodyUpdateStatus

The flags tracking what modifications were applied to a body.

fn apply_displacement(&mut self, disp: &[N])

Applies a generalized displacement to this body.

fn status(&self) -> BodyStatus

The status of this body.

fn set_status(&mut self, status: BodyStatus)

Set the status of this body.

fn activation_status(&self) -> &ActivationStatus<N>

Information regarding activation and deactivation (sleeping) of this body.

fn set_deactivation_threshold(&mut self, threshold: Option<N>)

Sets the energy bellow which this body is put to sleep.

If set to None the body will never sleep.

fn ndofs(&self) -> usize

The number of degrees of freedom of this body.

fn generalized_acceleration(
    &self
) -> Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>

The generalized accelerations at each degree of freedom of this body.

fn generalized_velocity(
    &self
) -> Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>

The generalized velocities of this body.

fn companion_id(&self) -> usize

The companion ID of this body.

fn set_companion_id(&mut self, id: usize)

Set the companion ID of this body (may be reinitialized by nphysics).

fn generalized_velocity_mut(
    &mut self
) -> Matrix<N, Dynamic, U1, SliceStorageMut<N, Dynamic, U1, U1, Dynamic>>

The mutable generalized velocities of this body.

fn integrate(&mut self, parameters: &IntegrationParameters<N>)

Integrate the position of this body.

fn activate_with_energy(&mut self, energy: N)

Force the activation of this body with the given level of energy.

fn deactivate(&mut self)

Put this body to sleep.

fn num_parts(&self) -> usize

The number of parts of this body.

fn part(&self, i: usize) -> Option<&(dyn BodyPart<N> + 'static)>

A reference to the specified body part.

fn deformed_positions(&self) -> Option<(DeformationsType, &[N])>

If this is a deformable body, returns its deformed positions.

fn deformed_positions_mut(&mut self) -> Option<(DeformationsType, &mut [N])>

If this is a deformable body, returns a mutable reference to its deformed positions.

fn fill_constraint_geometry(
    &self,
    part: &(dyn BodyPart<N> + 'static),
    ndofs: usize,
    center: &Point<N, U2>,
    dir: &ForceDirection<N>,
    j_id: usize,
    wj_id: usize,
    jacobians: &mut [N],
    inv_r: &mut N,
    ext_vels: Option<&Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>>,
    out_vel: Option<&mut N>
)

Fills all the jacobians (and the jacobians multiplied by the inverse augmented mass matrix) for a constraint applying a force at the point center (relative to the body part's center of mass) and the direction dir.

If the force is a torque, it is applied at the center of mass of the body part.

fn world_point_at_material_point(
    &self,
    part: &(dyn BodyPart<N> + 'static),
    point: &Point<N, U2>
) -> Point<N, U2>

Transform the given point expressed in material coordinates to world-space.

fn position_at_material_point(
    &self,
    part: &(dyn BodyPart<N> + 'static),
    point: &Point<N, U2>
) -> Isometry<N, U2, Unit<Complex<N>>>

Transform the given point expressed in material coordinates to world-space.

fn material_point_at_world_point(
    &self,
    part: &(dyn BodyPart<N> + 'static),
    point: &Point<N, U2>
) -> Point<N, U2>

Transform the given point expressed in material coordinates to world-space.

fn has_active_internal_constraints(&mut self) -> bool

Returns true if this bodies contains internal constraints that need to be solved.

fn setup_internal_velocity_constraints(
    &mut self,
    ext_vels: &Matrix<N, Dynamic, U1, SliceStorage<N, Dynamic, U1, U1, Dynamic>>,
    parameters: &IntegrationParameters<N>
)

Initializes the internal velocity constraints of a body.

fn warmstart_internal_velocity_constraints(
    &mut self,
    dvels: &mut Matrix<N, Dynamic, U1, SliceStorageMut<N, Dynamic, U1, U1, Dynamic>>
)

For warmstarting the solver, modifies the delta velocity applied by the internal constraints of this body.

fn step_solve_internal_velocity_constraints(
    &mut self,
    dvels: &mut Matrix<N, Dynamic, U1, SliceStorageMut<N, Dynamic, U1, U1, Dynamic>>
)

Execute one step for the iterative resolution of this body's internal velocity constraints.

fn step_solve_internal_position_constraints(
    &mut self,
    parameters: &IntegrationParameters<N>
)

Execute one step for the iterative resolution of this body's internal position constraints.

fn gravity_enabled(&self) -> bool

Whether this body is affected by gravity.

fn enable_gravity(&mut self, enabled: bool)

Enable or disable gravity for this body.

fn velocity_at_point(
    &self,
    part_id: usize,
    point: &Point<N, U2>
) -> Velocity2<N>

Gets the velocity of the given point of this body.

fn apply_force(
    &mut self,
    part_id: usize,
    force: &Force2<N>,
    force_type: ForceType,
    auto_wake_up: bool
)

Apply a force at the center of mass of a part of this body.

fn apply_local_force(
    &mut self,
    part_id: usize,
    force: &Force2<N>,
    force_type: ForceType,
    auto_wake_up: bool
)

Apply a local force at the center of mass of a part of this body.

fn apply_force_at_point(
    &mut self,
    part_id: usize,
    force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
    point: &Point<N, U2>,
    force_type: ForceType,
    auto_wake_up: bool
)

Apply a force at a given point of a part of this body.

fn apply_local_force_at_point(
    &mut self,
    part_id: usize,
    force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
    point: &Point<N, U2>,
    force_type: ForceType,
    auto_wake_up: bool
)

Apply a local force at a given point of a part of this body.

fn apply_force_at_local_point(
    &mut self,
    part_id: usize,
    force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
    point: &Point<N, U2>,
    force_type: ForceType,
    auto_wake_up: bool
)

Apply a force at a given local point of a part of this body.

fn apply_local_force_at_local_point(
    &mut self,
    part_id: usize,
    force: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
    point: &Point<N, U2>,
    force_type: ForceType,
    auto_wake_up: bool
)

Apply a local force at a given local point of a part of this body.

Loading content...

Provided methods

fn is_ground(&self) -> bool

Returns true if this body is the ground.

fn update_activation_status(&mut self)

Update whether this body needs to be waken up after a user-interaction.

fn advance(&mut self, _time_ratio: N)

fn validate_advancement(&mut self)

fn clamp_advancement(&mut self)

fn part_motion(
    &self,
    _part_id: usize,
    _time_origin: N
) -> Option<BodyPartMotion<N>>

fn step_started(&mut self)

fn add_local_inertia_and_com(
    &mut self,
    _part_index: usize,
    _com: Point<N, U2>,
    _inertia: Inertia2<N>
)

Add the given inertia to the local inertia of this body part.

fn status_dependent_ndofs(&self) -> usize

The number of degrees of freedom (DOF) of this body, taking its status into account.

In particular, this returns 0 for any body with a status different than BodyStatus::Dynamic.

fn status_dependent_body_part_velocity(
    &self,
    part: &(dyn BodyPart<N> + 'static)
) -> Velocity2<N>

The velocity of the specified body part, taking this body status into account.

This will return a zero velocity for any body with a status different than BodyStatus::Dynamic.

fn is_active(&self) -> bool

Check if this body is active.

fn is_dynamic(&self) -> bool

Whether or not the status of this body is dynamic.

fn is_kinematic(&self) -> bool

Whether or not the status of this body is kinematic.

fn is_static(&self) -> bool

Whether or not the status of this body is static.

fn activate(&mut self)

Force the activation of this body.

Loading content...

Implementations

impl<N> dyn Body<N> + 'static where
    N: Any + 'static + RealField

pub fn is<__T>(&self) -> bool where
    __T: Body<N>, 

Returns true if the trait object wraps an object of type __T.

pub fn downcast<__T>(
    self: Box<dyn Body<N> + 'static>
) -> Result<Box<__T>, Box<dyn Body<N> + 'static>> where
    __T: Body<N>, 

Returns a boxed object from a boxed trait object if the underlying object is of type __T. Returns the original boxed trait if it isn't.

pub fn downcast_rc<__T>(
    self: Rc<dyn Body<N> + 'static>
) -> Result<Rc<__T>, Rc<dyn Body<N> + 'static>> where
    __T: Body<N>, 

Returns an Rc-ed object from an Rc-ed trait object if the underlying object is of type __T. Returns the original Rc-ed trait if it isn't.

pub fn downcast_ref<__T>(&self) -> Option<&__T> where
    __T: Body<N>, 

Returns a reference to the object within the trait object if it is of type __T, or None if it isn't.

pub fn downcast_mut<__T>(&mut self) -> Option<&mut __T> where
    __T: Body<N>, 

Returns a mutable reference to the object within the trait object if it is of type __T, or None if it isn't.

Implementors

impl<N> Body<N> for FEMSurface<N> where
    N: RealField
[src]

fn update_dynamics(&mut self, dt: N)[src]

Update the dynamics property of this deformable surface.

fn update_acceleration(
    &mut self,
    gravity: &Matrix<N, U2, U1, <DefaultAllocator as Allocator<N, U2, U1>>::Buffer>,
    parameters: &IntegrationParameters<N>
)
[src]

Update the dynamics property of this deformable surface.

impl<N> Body<N> for Ground<N> where
    N: RealField
[src]

impl<N> Body<N> for MassConstraintSystem<N> where
    N: RealField
[src]

impl<N> Body<N> for MassSpringSystem<N> where
    N: RealField
[src]

impl<N> Body<N> for Multibody<N> where
    N: RealField
[src]

impl<N> Body<N> for RigidBody<N> where
    N: RealField
[src]

Loading content...