MAXScript Language Reference > 3ds Max Objects > Animation Controllers > Constraints >

# Path_Constraint - superclass: PositionController

    Path_Constraint - superclass: PositionController; super-superclass:MAXWrapper - 12:0 - classID: #(8209, 0)

Value > MAXWrapper > PositionController > Path_Constraint

| Animation Controllers - Quick Navigation

A PathConstraint restricts an object’s movement along a spline or at an averaged distance between multiple splines.

Constructor

    Path_Constraint ... path ...

Properties

    <Path_Constraint>.path UndefinedClass default: undefined -- node; Path_Constraint

Get/set the first path on the list of paths to constrain to.

Note

This property is exposed mainly for backwards compatibility with the legacy PathPositionController available in 3ds Max prior to version 4 before the Path_Constraint was introduced. The old controller supported only one path which could be get and set via the .path property.

The .path property in the Path_Constraint always returns the first object from the list of paths.

Setting the .path property will always replace the top path on the list with a new one.

If there are twoor moreobjects on the list and the object assigned to the .path property isalreadyon the listbut not the first one, the new object will replace the firstentry on the listand since the path can only be on the list once, the second entry will be removed.

To set and manage multiple paths, use the methods exposed by the constraints interface described at the bottom of this page!

    <Path_Constraint>.percent Float default: 0.0 -- animatable; percentage

Sets the percent that the object is positioned along the path.Corresponds tothe % Along Path spinner

    <Path_Constraint>.follow Boolean default: false -- boolean

Alignsoneobjectaxisto thetangent at the current position along the spline. The axis to follow with can be specified using the . axis and . axisflip properties.

    <Path_Constraint>.bank Boolean default: false -- boolean

Allows the object to bank (rollabout the follow axis) as it negotiates the curves of the spline.This property only has effect when the .follow property is set to true .The axis to roll about when banking is the same as for the follow behavior.

    <Path_Constraint>.bankAmount Float default: 0.5 -- animatable; float; Bank_Amount

Adjusts the amount of the banking to one side or the other, depending on whether the value is positive or negative.

    <Path_Constraint>.smoothness Float default: 0.5 -- animatable; float

Controls how rapidly the roll angle changes as the object moves through bends in the trajectory. Smaller values will make the object more responsive to subtle changes in the curve, while larger values smooth out jerking. The default value is a good value for general damping along the curve. Values below 2 tend to make the action jerky, but values around 3 can be very useful for simulating a certain degree of realistic instability.

    <Path_Constraint>.allowUpsideDown Boolean default: false -- boolean; Allow_Upside_Down

Set to true to avoid the situation in which an object flips when going around a vertically oriented path.

    <Path_Constraint>.constantVel Boolean default: false -- boolean; Constant_Velocity

When set to true, provides a constant velocity along the path using path length interpolation. Whenset to false, the velocity of the object along the path varies depending on the distance between the vertices on the path.

See notes and examples in SplineShape-VertexandLengthInterpolationMethods for details on the two interpolation methods.

    <Path_Constraint>.loop Boolean default: true -- boolean

If set to false , when the constrained object reaches the end of a path it can no longer move past the end point. When set to true (default),when the constrained object reaches the end of the path it loops back to the starting point.

    <Path_Constraint>.relative Boolean default: false -- boolean

When set to true , the constrained object willmaintainitsoriginal position. The object will follow the path(s)with an offset distance based on its original world space position. When set to false (default), the object will be moved to the path or the weighted position between the multiple paths.

    <Path_Constraint>.axis Integer default: 0 -- integer

Get/setwhich axis of the object is aligned to the tangent of the path when the .follow property is set to true .

Possible values are:

0 - X axis

1 - Y axis

2 - Z axis

    <Path_Constraint>.axisFlip Boolean default: false -- boolean; Axis_Flip

When set to false , the axis specified by the .axis property will be used. When set to true , the axis specified by the .axis property will be taken with negative sign (flipped).

Path_Constraint interfaces:

    Interface:constraints

Methods

    <integer>getNumTargets ()

Returns the number of target nodes(paths)in theTarget list.

    <node>getNode <index>targetNumber

Returns the indexed node from the list of paths.

    <float>getWeight <index>targetNumber

Gets the weight ofthe indexed pathnodefrom the list of Targets. Returns the target'sweightvalue at the current timeif the targetNumber isless then the number of targets, 0.0 otherwise.

    <boolean>setWeight <index>targetNumber<float>weight

Sets the weight of the indexed node specified by targetNumber to the given value.Returns true on success, false otherwise.

    <boolean>appendTarget <node>target<float>weight

Appends the specified node to the list. The default weight is 50.0. Returns true on success, false otherwise.

    <boolean>deleteTarget <index>targetNumber

Delete the indexed target. Returns true on success, false otherwise.

NOTES ON PATH TARGET OBJECTS:
A path target can be any type of Shape. The spline curve (target) defines a path of motion for the constrained object. Targets can be animated using any of the standard translation, rotation, scale tools.
Setting keys on the path's sub object level, such as vertex or segment or deforming the path using modifiers and space warps will animate the path while affecting the constrained object.
If the shape contains multiple splines (for example like the Donut Shape), the first spline from the shape will be used.

EXAMPLE
    path1 = Circle()--create a circular path
    $Circle:Circle01 @ [0.000000,0.000000,0.000000]
    path2 = Ellipse length:20 width:200--create another path
    $Ellipse:Ellipse01 @ [0.000000,0.000000,0.000000]
    s = sphere radius:5--create a sphere
    $Sphere:Sphere01 @ [0.000000,0.000000,0.000000]
    pc = path_constraint()--create a path constraint
    Controller:Path_Constraint
    s.position.controller = pc--assign it to the sphere's position
    Controller:Path_Constraint
    pc.path = path1--assign the first path to the path property
    $Circle:Circle01 @ [0.000000,0.000000,0.000000]
    pc.path = path2--assign the second path - it replaces the first
    $Ellipse:Ellipse01 @ [0.000000,0.000000,0.000000]
    pc.appendTarget path2 50--try to append the second path
    false--you cannot because it is already assigned!
    pc.appendTarget path1 50--try to append the first path
    true--you can because it was not assigned to the list yet
    pc.getNumTargets()--see how many paths there are on the list
    2
    pc.getWeight 1--get the weight of the first path
    50.0
    pc.getWeight 2--get the weight of the first path
    50.0
    pc.getWeight 3--get the weight of thethirdpath
    0.0--returns zero because there is no such path!
    pc.setWeight 1 100--set the weight of the first path to 100
    true--success, the sphere moves closer to the ellipse
    pc.setWeight 2 0--set the weight of the second path to 0
    true--success, the sphere moves to the ellipse
    pc.path = path1--try to assign the circle to the path
    --At this point, the Circle replaces the Ellispe on the list,
    --and the second entry which used to be the Curcle is removed
    --because "There can be only one"!
    $Circle:Circle01 @ [0.000000,0.000000,0.000000]
    pc.deleteTarget 2--try to delete the second path
    false--you cannot, there is no second path anymore
    pc.deleteTarget 1--try to delete the first path (the Circle)
    true

#### See Also

- Link_Constraint : Matrix3Controller

- LookAt_Constraint : RotationController

- Position_Constraint : PositionController

- Orientation_Constraint : RotationController

- Controller Functions for Use with Constraint Assignments