#include 
Inherits pe_action.
| 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 | |
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