Switching Animation On & Off in 3D
All of the titles for the robot demo operations will be shown here in bold beginning with the operation number followed by the title itself. The operations for this tutorial are from 0 to 8 only. Operations from 9 onwards are for follow up tutorials which are more advanced.
0. Create a new Seamless file
The button is clicked to create a new smls file.
1. Build a box
While the part
node is selected, the
button is clicked from the horizontal toolbar to create a BoxBuild node that references
the selected part. The part is the node that contains the triangles while the BoxBuild
is the node that generates the triangles for the part.
The BoxBuild's yCentred field is ticked so that
the box's pivot point will be in the box's center.
2. Add Anim node
An Anim node is added to the Scene node. The Anim node is set to loop and play endlessly. It does not yet animate anything but we can see the slider move for each cycle.
3. Add Function for Anim
The onFrame function is added to the Anim node. The onFrame function runs shortly before each frame is displayed in the 3d window and so this is the function we will add our animation script to. In the beeline to animation tutorial this function gets added automatically as a result from dragging the anim control points for the parts. It is fine to add animation this way and so if we do we can bypass this operation and jump to operation 5, however to make an object continuously spin evenly it is probably easier to manually drag in a function and a CodeLine and then paste in the line of script.
4. Add spin script
A CodeLine node is added to the onFrame function and then the line of script:
p.rotation = Rotation(0, 0, 1, PI * 2 * v)
is entered into the CodeLine node.
There is no need to understand how this line works if we accept it makes the specified part "p" spin.
The line we use rotates our box on the Z axis but any axis can be specified for the Rotation value:
For the X axis:
p.rotation = Rotation(1, 0, 0, PI * 2 *
v)
For the Y axis:
p.rotation = Rotation(0, 1, 0, PI * 2 * v)
For the Z axis:
p.rotation = Rotation(0, 0, 1, PI * 2 * v)
5. Add TouchSensor
A TouchSensor node is added to the Scene. A TouchSensor watches out for any geometry that gets clicked on if the geometry belongs to a node that is a sibling of the TouchSensor and or a descendent of a node that is a sibling of the TouchSensor. Because both our TouchSensor node and our Seamless node (which contains the box) are direct descendents of the Scene node, they are siblings.
6. Add Function for TouchSensor
The onTouchTime function is added to the TouchSensor. This function runs it's script when the box is clicked.
7. Add toggle script
A CodeLine node is added to the onTouchTime function and then the line of script:
spin.pause = spin.play
is entered into the CodeLine node.
This single line of script is so simple anyone can understand it no matter how little programming experience one has had.
"spin" refers to our Anim node's name, so what ever we name our Anim node, we must use in our script too.
We know when using the anim bar we can directly "pause"(and resume) the animation using the button and "play" the animation using the button.
= play.
= pause
The play button is always in the opposite logical state to the pause button. That is when the animation is playing the play button will be red (true) and the pause button will be black (false) and when the pause button is red (true) the play button is black (false).
So by making pause = play for our script we create a toggle switch. (alternates between true and false)
8. Click box to switch off & on
To test our theory click the box to switch the animation on and off. This completes our tutorial switching animation on and off in 3d. We can apply this single line of script to any geometry we make and get the same results.
To see the 2 short follow up tutorials that show how an "if" statement can be used with ease go to:
Play for a Specified Number of Times
[3d Modelling Software] [Tutorials] [Forum] [Features] [Download] [Gallery] [FAQ] [Worlds] [Avatars] [Links] [Thyme]