[][src]Trait nphysics3d::object::Body

pub trait Body<N: RealField>: Downcast + Send + Sync {
    fn update_kinematics(&mut self);
fn update_dynamics(&mut self, dt: N);
fn update_acceleration(
        &mut self,
        gravity: &Vector<N>,
        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) -> DVectorSlice<N>;
fn generalized_velocity(&self) -> DVectorSlice<N>;
fn companion_id(&self) -> usize;
fn set_companion_id(&mut self, id: usize);
fn generalized_velocity_mut(&mut self) -> DVectorSliceMut<N>;
fn integrate(&mut self, parameters: &IntegrationParameters<N>);
fn activate_with_energy(&mut self, energy: N);
fn deactivate(&mut self);
fn part(&self, i: usize) -> Option<&dyn BodyPart<N>>;
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>,
        ndofs: usize,
        center: &Point<N>,
        dir: &ForceDirection<N>,
        j_id: usize,
        wj_id: usize,
        jacobians: &mut [N],
        inv_r: &mut N,
        ext_vels: Option<&DVectorSlice<N>>,
        out_vel: Option<&mut N>
    );
fn world_point_at_material_point(
        &self,
        part: &dyn BodyPart<N>,
        point: &Point<N>
    ) -> Point<N>;
fn position_at_material_point(
        &self,
        part: &dyn BodyPart<N>,
        point: &Point<N>
    ) -> Isometry<N>;
fn material_point_at_world_point(
        &self,
        part: &dyn BodyPart<N>,
        point: &Point<N>
    ) -> Point<N>;
fn has_active_internal_constraints(&mut self) -> bool;
fn setup_internal_velocity_constraints(
        &mut self,
        ext_vels: &DVectorSlice<N>,
        parameters: &IntegrationParameters<N>
    );
fn warmstart_internal_velocity_constraints(
        &mut self,
        dvels: &mut DVectorSliceMut<N>
    );
fn step_solve_internal_velocity_constraints(
        &mut self,
        dvels: &mut DVectorSliceMut<N>
    );
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>) -> Velocity<N>;
fn apply_force(
        &mut self,
        part_id: usize,
        force: &Force<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_local_force(
        &mut self,
        part_id: usize,
        force: &Force<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_force_at_point(
        &mut self,
        part_id: usize,
        force: &Vector<N>,
        point: &Point<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_local_force_at_point(
        &mut self,
        part_id: usize,
        force: &Vector<N>,
        point: &Point<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_force_at_local_point(
        &mut self,
        part_id: usize,
        force: &Vector<N>,
        point: &Point<N>,
        force_type: ForceType,
        auto_wake_up: bool
    );
fn apply_local_force_at_local_point(
        &mut self,
        part_id: usize,
        force: &Vector<N>,
        point: &Point<N>,
        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>,
        _inertia: Inertia<N>
    ) { ... }
fn status_dependent_ndofs(&self) -> usize { ... }
fn status_dependent_body_part_velocity(
        &self,
        part: &dyn BodyPart<N>
    ) -> Velocity<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: &Vector<N>,
    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) -> DVectorSlice<N>

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

fn generalized_velocity(&self) -> DVectorSlice<N>

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) -> DVectorSliceMut<N>

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 part(&self, i: usize) -> Option<&dyn BodyPart<N>>

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>,
    ndofs: usize,
    center: &Point<N>,
    dir: &ForceDirection<N>,
    j_id: usize,
    wj_id: usize,
    jacobians: &mut [N],
    inv_r: &mut N,
    ext_vels: Option<&DVectorSlice<N>>,
    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>,
    point: &Point<N>
) -> Point<N>

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

fn position_at_material_point(
    &self,
    part: &dyn BodyPart<N>,
    point: &Point<N>
) -> Isometry<N>

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

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

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: &DVectorSlice<N>,
    parameters: &IntegrationParameters<N>
)

Initializes the internal velocity constraints of a body.

fn warmstart_internal_velocity_constraints(
    &mut self,
    dvels: &mut DVectorSliceMut<N>
)

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 DVectorSliceMut<N>
)

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>) -> Velocity<N>

Gets the velocity of the given point of this body.

fn apply_force(
    &mut self,
    part_id: usize,
    force: &Force<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: &Force<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: &Vector<N>,
    point: &Point<N>,
    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: &Vector<N>,
    point: &Point<N>,
    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: &Vector<N>,
    point: &Point<N>,
    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: &Vector<N>,
    point: &Point<N>,
    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>,
    _inertia: Inertia<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>
) -> Velocity<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...

Methods

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

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

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

pub fn downcast<__T: Body<N>>(self: Box<Self>) -> Result<Box<__T>, Box<Self>>

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: Body<N>>(self: Rc<Self>) -> Result<Rc<__T>, Rc<Self>>

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: Body<N>>(&self) -> Option<&__T>

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: Body<N>>(&mut self) -> Option<&mut __T>

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: RealField> Body<N> for FEMVolume<N>[src]

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

Update the dynamics property of this deformable volume.

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

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

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

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

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

Loading content...