the_object = bind(the_object);
You can LINK several objects together before binding but the object that is linked to a chain must not be part of a chain. The object that it is linked to can be a chain.
For example
This show the correct order to link objects together.
LINK(obj1, PLUS, obj2); LINK(obj1, PLUS, obj3); LINK(obj1, PLUS, obj4); LINK(the_scene, PLUS, shift(4, 3, 5, bind(the_object);
But this attempts to link a chain onto another object.
LINK(obj1, PLUS, obj2); LINK(obj3, PLUS, obj1); LINK(the_scene, PLUS, obj3);
When obj1 is linked to obj3 it is an ``impure object'' as it is part of a chain. Similarly obj3 is impure when it is linked to the scene.
The warning produced is:
*** WARNING *** link: attempt to link impure object\index{impure object} (Objects are linked in a chain. The link command when applied to a (possibly already chained) object adds the object you pass it to the end of the chain and returns the new end of the chain. This means that the object to be added must not be part of a chain (a 'pure' object). To turn a chain of objects into a pure object, use the bind() command to create a pointer that points to the chain as a single object.)
Instead the objects could be combined like this:
LINK(obj1, PLUS, obj2); LINK(obj3, PLUS, bind(obj1)); LINK(the_scene, PLUS, bind(obj3));
If a material, texture or transformation is applied to an unbound object, then the move will only apply to the object at the front of the list. Fig 8 shows the scene for examples 1, 2 and 3 below.
\\example 1; object obj1 = new_sphere(); object obj2 = shift(1,1,1, new_cube()); LINK(obj1, PLUS, obj2); LINK(the_scene, PLUS, bind(obj1)); \\example 2; object obj1 = new_sphere(); object obj2 = shift(1,1,1, new_cube()); LINK(obj1, PLUS, obj2); obj1->material = dkblue; obj1 = shift(1, 1, 1, obj1); LINK(the_scene, PLUS, bind(obj1)); \\example 3; object obj1 = new_sphere(); object obj2 = shift(1,1,1, new_cube()); LINK(obj1, PLUS, obj2); obj1 = bind(obj1); obj1->material = dkblue; obj1 = shift(1, 1, 1, obj1); LINK(the_scene, PLUS, obj1);
Figure 8: When to Bind an Object
\