This expression sets the position of a spline point and/or its tangents dependent of the position of another object (per point/tangent, that means a maximum of three controlling objects). Move a controller, and the point or the tangent will move along. This is similar to the tag "Copy Transformation" where only the translation is used, applied to a single point.
Why is it necessary for you to be able to control a spline point through an object? Very simple: If the spline is supposed to be movable, for example a rubber hose connecting two machines, then one of its end points has to be attached to one target object, but the other end point must be attached to the other. If you now move the target objects relative to each other, the rubber hose / pipe / spline has to deform accordingly. That cannot be done by using standard functionality: a spline can only be the kinematic child of one object at a time, and the tag "Copy Transformation" (which is the natural solution for problems with the kinematic hierarchy) will only affect the whole spline object.
Although XPresso can help as well with most of the problems that the kinematic tools have been designed for, that concept fails here as well: XPresso cannot control tangents! (As of Release 9, even!) Controlling the tangents is necessary however to determine the direction of the hose/pipe. A constant tangent length and direction is not always the way to go.
There are already several solutions of this problem in form of other plugins. But these have, to my knowledge, not been adapted to Release 8/9. Although they probably do work, they cannot use the special Release 8 features. To offer a complete solution through the Collie Tools, the tag has been integrated here again in this form.
The tag only works when assigned to a spline. With all other objects, it will write an error message to the console output. Each tag controls exactly one spline point, but it is possible to set several tags on a single spline to control more than one point. It doesn't matter how many points are controlled; the spline works fine with controlled and uncontrolled points at the same time.
First you have to set the index of the controlled point. How do you find that index? Either you count the spline points from the beginning, or you select that spline point in the point mode, and then look up the index of the selected point in the structure manager.
Note: You should set the controlled point first, before you select the source (the controller object). As soon as the controller is set, the tag starts to work and moves the spline point. If you now change the index, the previously controlled point stays in its place (the tag doesn't store the original position for controlled points!) and the new controlled point jumps to the same spot! That is logical, but in most cases undesired.
Both the point and its tangents have their own controller (their own source object) which can be set independently. The controllers must be identified either by a link or a local name search (you find details about name searching on the kinematic tools page). The flag "Active" decides whether the expression is applied at all, and the mode finally determines whether the values are taken from the local or the global coordinate system (and are written back there). If you don't have very special applications for the tag, you should use the global system, which is preselected.
Tips: The controllers should be null objects, because it is the origin of the controller's coordinate system which is applied to the spline point or the tangent. If you use an object with geometry, the spline point would rest in its origin, that means: its center. This is probably not what you want. If you hook the spline point to a null object, which you may in turn set as a child of the actual target, you have better control over the spline because you can set a certain offset.
If you use the tangent controllers, it is recommended that you set the tangent controllers as child objects of the spline point controller. That kind of hierarchy results in a natural behaviour of the whole spline if, e.g., you rotate the controller. (Otherwise, if the tangent controllers are independent objects, the tag will not react to rotation at all, only the translation will be transferred.)
Moreover, if you want both tangents to be of equal length and direction (the keyword here is "continuity of the curve"), you can tie one tangent to the other by using a "Copy Transformation" tag. In this tag, you choose "Translation" for x, y, and z, and set a factor of -1 so the tied tangent will show into the opposite direction.
And a final tip. The tag controls only the spline point, it is not a physical simulation of a hose. If you drag a point, the "hose" will get shorter or longer. That is acceptable at best for rubber bands. To achieve a higher degree of realism, several spline points should be controlled, which then can optically emulate a "hanging" and "bending" of the hose. In the simplest case, you can use "Copy Transformation", "Point At", and/or "Distance" to get satisfying results. If the situation is more complex, you may need to use XPresso to program a simulation.
In the demo scene "spline_controller.c4d" a complete setup for such a connection has been realized, including a control for the tangent length.
Rotate "Arm2" around the blue axis B and watch how the hose "Pipe" changes. The pipe spline, which contains three points, has been equipped with three controllers. The end points are attached to the "arms", while the mid point is connected to a special controller structure made up from null objects ("Midpoint"). This structure has been designed in this way to ensure:
This construction ensures that the bend in the hose becomes sharper when the angle gets smaller. We could move the point controller closer to the joint as well, to simulate a constant hose length, but I have not included that detail here.
Additionally, "Arm2" has a limit tag which constrains the rotation to a meaningful range. Outside of this range, the hose is either squeezed between the arms, or is stretched beyond its endurance.
Please not that the sequence of objects in the tree hierarchy is relevant! The tags are evaluated from top to bottom by Cinema's expression evaluator. The object which initiates the kinematic - that is "Arm2" here - must be at the top. "Midpoint" depends on "Arm2" and therefore follows it. "Pipe" finally is controlled by the nine null object controllers in the hierarchy above, and thus follows last. If you don't adhere to this sequence, it is possible that a tag calculates values from a previous transformation step, and the controlled object stays behind one step (or frame).