pe_action_add_constraint

pe_action_add_constraint

#include

Inherits pe_action.

Public Types

enum entype { type_id = ePE_action_add_constraint }

Public Attributes

int id
if not set, will be auto-assigned; return value of Action()
IPhysicalEntity * pBuddy
the second constrained entity; can be WORLD_ENTITY for static attachments
Vec3 pt [2]
pt[0] must be set; if pt[1] is not set, assumed to be equal to pt[1]
int partid [2]
if not set, the first part is assumed
quaternionf qframe [2]
constraint frames for constraint angles computation; if not set, identity in the specified frame is assumed
float xlimits [2]
rotation limits around x axis ("twist"); if xlimits[0]>=[1], x axis is locked
float yzlimits [2]
combined yz-rotation - "bending" of x axis; yzlimits[0] is ignored and assumed to be 0 during simulation
unsigned int flags
see enum constrflags
float damping
internal constraint damping
float sensorRadius
used for sampling environment and re-attaching the constraint when something breaks
float maxPullForce
float maxBendTorque
positional and rotational force limits
float hardnessLin
float hardnessAng
sets how fast the solver tries to resolve positional and rotational drift
IPhysicalEntity * pConstraintEntity
used internally for creating dynamic rope constraints

Detailed Description

Adds a physical constraint on an entity

#include 

// Constrains an entity to the specified point
void AddPointConstraint(IPhysicalEntity& physicalEntity)
{
    // Specify the world-space position where the entity will be constrained
    const Vec3 constraintPosition(ZERO);
    // Specify the axis that our constraint will enforce limits on, in our case up.
    const Vec3 constraintAxis(0, 0, 1);

    // Set the minimum rotation angle along the specified axis (in our case, up) to be 0 degrees
    const float minRotationForAxis = 0.f;
    // Set the maximum rotation angle along the specified axis (in our case, up) to be 45 degrees
    const float maxRotationForAxis = DEG2RAD(45);
    // Disallow rotation on the other axes
    const float minRotationOtherAxis = 0.f;
    // Disallow rotation on the other axes
    const float maxRotationOtherAxis = 0.f;

    // Define the constraint
    pe_action_add_constraint constraint;
    // Create a constraint using world coordinates
    constraint.flags = world_frames;
    // Constrain the entity to the specified point
    constraint.pt[0] = constraintPosition;
    // Set the rotational frame for the constraint, based on the specified axis
    constraint.qframe[0] = constraint.qframe[1] = Quat::CreateRotationV0V1(Vec3(1, 0, 0), constraintAxis);
    
    // Now apply the constraint limits defined above
    // Note that if the max