Positioning the figure. The joint-lengths in the figure are constant, so to position the figure one simply sets the 3-D direction of all the limbs. To set the direction of a limb, first select it by clicking near its outer end ('outer' means furthest from the head in the chain of limbs.) This causes two labels, one marking the outer and one the inner joint on the chosen limb (the 'parent' of the outer joint in the logical tree structure of the figure) to appear. Then click and drag on the sphere at the bottom left of the figure to set the limb direction. This will cause a segment running from the center of the sphere to the mouse position to appear. This segment is understood to be the projection of a 3-D sphere radius, which defines a 3-D direction. To get the back of the sphere (to enter backward-pointing limb positions) press the shift key while click-dragging on the sphere. The back of the sphere is then shown in a fainter color than its front.
The selected limb is set to point in the sphere direction chosen. All other limbs retain their lengths and directions. The topmost point in the figure (generally the top of the figure head, but perhaps the highest point on a raised limb) retains its position, and all other joints are positioned accordingly. The figure is then dynamically redrawn. As the figure's knees are bent, the animator software automatically adjusts the figure position to keep its bottom-most point on the ground (but see 'Jumps', below.)
The structural links (limbs, spine, neck etc.) of the figure are drawn using thick lines. A few other lines drawn to give the figure a less skeletal appearance are drawn thinner.
Viewing the figure in rotated positions and anaglyphically. To rotate the position from which the puppet is viewed, drag the red dot on the circle surrounding the sphere at the bottom left around the circle. Node selection and figure position adjustment works in the same way in rotated views as in the default 'front' view of the figure.
The figure can also be viewed anaglyphically, that is in a representation set up for viewing through red-blue anaglyphic glasses, which generate a useful 3-D image view. For this, click on the 'Anag' button, which toggles anaglyphic viewing on and off. Anaglyphic images should be viewed with the blue filter of the anaglyphic glasses over the right eye.
Special positioning modes. The dance puppet software provides three special positioning modes, 'Hand', 'Projection', and 'Jump'.
'Hand' mode. Hand mode is designed to facilitate positioning of the figure's hands on a part of its body, as in the 'heel slapping' used in various Russian, Greek, and Turkish dances. To use hand mode, first select an arm by clicking near it. Once the corresponding joint labels have appeared, hand mode can be toggled on by clicking on the 'Hand' button. Then indicate the desired hand position (which must lie on one of the figure's principal lines) by moving the mouse near it. This will bring up a green dot and label indicating the target chosen, and will position the selected hand accordingly in 3-D.
'Projection' mode. [Still to be implemented] Projection mode is designed to facilitate positioning of the figure's hands and feet to positions in 3-D space, as for example required to perform the break-dance 'wall'. Before entering this mode a hand or foot should be selected by clicking near the corresponding limb. When projection mode is then entered by clicking on the 'Proj' button, three Cartesian axes and axis planes appear, along with three auxiliary green dots, one on each axis. Projections of the figure onto the three axis planes also appear, making the 3-D position of the figure clearer. Dragging one of the auxiliary dots causes a scale along its axis and a plane through the dot perpendicular to this axis to appear. The plane contains embedded axes corresponding to the positions of the other auxiliary dots. Then, by clicking at any point in this isometrically projected plane or dragging along it, one can position the selected hand or foot to the 3-D position indicated.
'Jump' mode. [Still to be implemented] Since dancers often leap into the air, the dance puppet animator must provide a way of defining positions separated from its virtual 'floor'. Jump mode, toggled on by clicking on the 'Jump' button, is used for this. When jump mode is entered, the same three green auxiliary dots, axes, and planes as described in the preceding paragraph appear, and behave in the same way. But now clicking on a point in the isometrically projected plane though an auxiliary dot positions the topmost point of the dancing figure to this 3-D location.
Animation: entering times, number of repeats, and number of key positions to be repeated. The table at the very left of the Dance puppet area provides space for storing up to 38 figure positions, enough for a short dance sequence. Each table entry has a graphics field containing a label such as ps1,ps2,... and a timing/repeats field giving corresponding time, number of repeats, and number of key positions to be repeated, which is shown in the dot-delimited format time.reptno.reptrange, or simply as '-----' if this data has not been entered.
Initially only the first field of the table is filled in, with the figure in its default forward-facing position and the timing repeat data 1.1.1. The figure position can then be edited using the methods described above. To copy the figure position from one field to another, click on the source graphics field and drag to the target graphics field. To copy the timing/repeats data from one field to another, click on the source data field and drag to the target data field. A moving red rectangle helps you follow these drags.
Clicking on a graphics field causes the graphic state it contains to be drawn. If the graphic state is empty a blank is shown.
A data field can always be edited by using the three columnar value selectors just to the right of the left-hand table. The 'Ticks' selector modifies the timing field, the 'Repts' selector modifies the number of repetitions, and the 'Span' selector modifies the number of preceding graphical states to be included in the repetition.
The time field gives the number of ticks (a tick is 1/60 of a second) that should be filled by interpolation between the graphical state selected and its logical successor. Ignoring interpolated states, the states displayed are always the initial figure state, its successor, the successor of that, etc. until a state with no successors is reached, at which time animation is complete. A full animation consists of these 'key states' plus the interpolated states between them, the number of these interpolated states being determined by the 'Time' field of the state K at which the interpolation begins.
If there are no repetitions, that is if the span size of K's timing/repeats field is 1, this successor is the next non-empty graphic in the table. But if K's span size is n > 1, indicating that the previous n - 1 graphical states are to be repeated, K's logical successor is the (n - 1)-th preceding state K'. So when the interpolations leading to K finish, a sequence of interpolated graphical states leading from K to K' is displayed, following which the keyframes from K' to K are handled.
During animation, each keyframe K carries a 'remaining repetition count' C, initialized from the its associated 'Repts.' field. Each time K is displayed this count is decremented. When C reaches 0, repetition ceases and the logical successor of K becomes the the next non-empty graphic in the table. But whenever repetition of a span of length n > 1 starts, the repetition counts of the first (n - 1) keyframes in the span are re-initialized to the 'Repts.' values given in their associated timing/repeats fields. For example, the sequence of 4 timing/repeats field entries 1.1.1,1.2.2,1.1.1,1.2.4, attached to the keyframes ps1, ps2, ps3, ps4 will display the keyframe sequence ps1, ps2, ps1, ps2, ps3, ps4, ps1, ps2, ps1, ps2, ps3, ps4, since the whole sequence of frames ps1, ps2, ps3, in the range of the final repetition will be repeated ab initio, with their internal repetitions, when ps4 is first encountered.
Animations, like keyframes, can be viewed in rotated positions or anaglyphically.
Saving and reloading animations. To save an animation that you have constructed in the manner explained above, click on the 'Save' button. This writes a complete text representation of the animation into the small rectangular box near the bottom of the animation area labeled 'Load/Save paste area'. Do not be fooled by the apparently small size of this box: it can hold arbitrarily large texts. The Load/Save box supports all basic text-editing operations, including selection, Select All, and Copy/Cut/Paste, so once an animation has been written to the Load/Save area it can be copied by doing a Select All and then a Copy, following which it can be pasted into an editor or database page of your choice and saved to disk.
To reload a previously saved animation, copy it and paste it into the Load/Save box, then click on 'Load'. (The Load/Save box must first be cleared.) This will populate the keyframes table with the previously saved timing and data and figure positions. Once this has been done the animation can be played.
Like other binary representations of graphical data, the saved representation of a dance puppet animation is obscurely numeric and should not be edited manually. Here is a sample saved animation which you can load back into the Dance puppet animator and replay.
1.1.1,10.1.1,1.1.1,10.4.4,1.1.1,1.1.1,10.1.1,1.1.1,10.4.4,1.1.1,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----,-----;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-4.16012646976705,47.8414544023211,-75.457859686226 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,-27.0408220534858,56.1617073418552,-64.1455888671974 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-59.8849627326652,3.86354598275259,-57.4357401880263 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-79.042402925574,39.521201462787,-13.7975785806431 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,85.2825926302245,12.4803794093012,-23.8981071230979 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-79.042402925574,39.521201462787,-13.7975785806431 p6,0,-10,-20 p3,19.5348837209302,55.3488372093023,127.101906113118 p8,40,0,0 p9,10,50,0 p10,-61.3671534975652,34.5190238423804,-42.9244623096836 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,85.2825926302245,12.4803794093012,-23.8981071230979 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-79.042402925574,39.521201462787,-13.7975785806431 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,85.2825926302245,12.4803794093012,-23.8981071230979 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-79.042402925574,39.521201462787,-13.7975785806431 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,85.2825926302245,12.4803794093012,-23.8981071230979 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-4.16012646976705,47.8414544023211,-75.457859686226 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,-27.0408220534858,56.1617073418552,-64.1455888671974 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-59.8849627326652,3.86354598275259,-57.4357401880263 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,58.6950207633673,1.67700059323906,-41.8578810571935 p5,89.1205470703157,7.58472741023964,-1.12611726337199e-6 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,-50.3100177971719,5.03100177971719,-51.4158645783646 p15,-39.521201462787,-68.6420867511563,-41.5492305751205 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-79.042402925574,39.521201462787,-13.7975785806431 p6,0,-10,-20 p3,19.5348837209302,55.3488372093023,127.101906113118 p8,40,0,0 p9,10,50,0 p10,-61.3671534975652,34.5190238423804,-42.9244623096836 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,85.2825926302245,12.4803794093012,-23.8981071230979 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,65.8473091339411,-29.3961201490808,-7.99656197185071e-7 p5,86.0013163567532,24.5718046733581,-1.31209612626799e-6 p6,0,-10,-20 p3,-42.3255813953488,78.1395348837209,108.179287517073 p8,40,0,0 p9,10,50,0 p10,5.75317064039674,46.0253651231739,-68.180398890451 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,-62.1896865866877,-36.5026421269688,-5.6544231964741e-7 p15,-33.2810117581364,14.5604426441847,-81.7335167869351 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,21.2495029051393,40.5672328189022,-69.3019353820762 p20,0,80,20 p21,0,0,-30;p1,30,40,0 p1,-30,40,0 p1,0,80,0 p2,0,20,0 p3,70,0,0 p4,41.9250148309766,46.9560166106938,-35.1770612115145 p5,-79.042402925574,39.521201462787,-13.7975785806431 p6,0,-10,-20 p3,0,140,0 p8,40,0,0 p9,10,50,0 p10,0,80,-20 p11,-10,80,20 p12,0,0,-30 p3,-70,0,0 p14,5.03100177971719,67.0800237295626,-25.9799814767794 p15,85.2825926302245,12.4803794093012,-23.8981071230979 p16,-5.20015808720881,17.68053749651,-12.6632124558716 p8,-40,0,0 p18,-10,50,0 p19,-10,80,-20 p20,0,80,20 p21,0,0,-30;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-