#
# space shuttle launch ANIMATION
# syntax: demo scale capture
# e.g.: demo 0.8
# demo 0.5 capture
#
proc demo {{scale 0.5} {capture {}}} {
global demo
catch "destroy .demo"
foreach img { {shuttle shuttle.jpg} {backSmoke
KSC-97EC-1209.jpg} \
{frontSmoke KSC-97EC-1209.jpg}
{backCloud cloud1.jpg} \
{frontCloud cloud2.jpg}
} {
set tag [lindex $img
0]
set file [lindex $img
1]
catch "image delete
$tag"
image create gimg $tag
-file $file -comb 1/2/3 -palette 8/8/4 \\
-dither 1 -mx $scale -my $scale
}
backCloud mask data {off 0-255} {on 220-255}
frontCloud mask data {off 0-255} {on 220-255}
shuttle mask clip pl [shuttle.mask]
backSmoke mask clip pl [backSmoke.mask]
frontSmoke mask clip pl [frontSmoke.mask]
set width [backSmoke cget -width]
set height [expr 100+[backSmoke cget -height]]
toplevel .demo
set canv [canvas .demo.canv -bg navy -width
$width -height $height]
$canv create image 0 100 -image backSmoke -anchor
nw
$canv create image [expr 50 * $scale] [expr
40 * $scale] \
-image backCloud
-anchor nw -tag backCloud
$canv create image [expr 260 * $scale] [expr
550 * $scale + 100] \
-image shuttle
-tag shuttle
$canv create image 0 100 -image frontSmoke -anchor
nw
$canv create image [expr 150 * $scale] [expr
100 * $scale] \
-image frontCloud
-anchor nw -tag frontCloud
pack $canv -expand 1 -fill both
if {$capture == "capture"} {
set demo(capture) "capture
$canv"
} else {
set demo(capture) ""
}
set demo(id) 0
set demo(shuttle) 0
set id0 [timer.start 10 shuttle.move $canv shuttle
$scale]
set id1 [timer.start 500 cloud.move $canv frontCloud
100 $scale]
set id2 [timer.start 3000 cloud.move $canv backCloud
40 $scale]
bind $canv <Destroy> "timer.stop $id0; timer.stop
$id1; timer.stop $id2"
}
proc shuttle.move {canv shuttle scale} {
global demo
if {$demo($shuttle) > 0} {
incr demo($shuttle)
-1
set demo(id) 0
return
}
set pt [$canv coord $shuttle]
set x [lindex $pt 0]
set y [lindex $pt 1]
if {$y < -200} {
set dx [expr (0.5 -
[calc rrand]) * 500 * $scale]
$canv coords $shuttle
[expr 260*$scale+$dx] [expr 550 * $scale + 100]
set demo($shuttle) 20
} else {
set dy [expr (1000.0
- $y) / 600.0 ]
set dy [expr $dy * $dy
* $dy]
$canv move $shuttle
0 -[expr 1 + $dy * $dy]
}
catch $demo(capture)
}
proc cloud.move {canv cloud height scale} {
set pt [$canv coord $cloud]
set x [lindex $pt 0]
set y [lindex $pt 1]
if {$x < -200} {
$canv coords
$cloud [expr 650 * $scale] [expr $height * $scale]
} else {
$canv move $cloud
-1 0
}
}
proc capture canv {
global demo
set id [expr $demo(id) % 128]
incr demo(id)
rimage canvas $canv canv.$id 0 0 [winfo width
$canv] [winfo height $canv]
}
proc shuttle.mask {} {
return {32.000 210.000 43.000 197.000 46.000
191.000 \
46.000 104.000 47.000
96.000 53.000 80.000 55.000 77.000 61.000 \
90.000 62.000 64.000
65.000 53.000 69.000 43.000 74.000 36.000 \
82.000 26.000 90.000
35.000 95.000 43.000 99.000 52.000 101.000 \
62.000 102.000 79.000
102.000 80.000 107.000 71.000 110.000 68.000 \
118.000 89.000 118.000
92.000 118.000 221.000 119.000 226.000 \
120.000 232.000 119.000
235.000 119.000 235.000 119.000 266.000 \
123.000 278.000 123.000
282.000 120.000 283.000 123.000 302.000 \
123.000 310.000 121.000
317.000 117.000 323.000 114.000 329.000 \
112.000 334.000 111.000
337.000 111.000 339.000 110.000 335.000 \
101.000 323.000 96.000
317.000 94.000 312.000 93.000 299.000 \
97.000 281.000 93.000
280.000 94.000 276.000 98.000 267.000 \
98.000 242.000 82.000
248.000 80.000 261.000 75.000 262.000 \
71.000 264.000 69.000
264.000 64.000 263.000 64.000 273.000 \
67.000 284.000 68.000
286.000 68.000 289.000 65.000 290.000 \
66.000 295.000 67.000
307.000 65.000 316.000 61.000 322.000 \
58.000 328.000 56.000
332.000 55.000 330.000 52.000 325.000 \
47.000 320.000 42.000
312.000 41.000 308.000 41.000 299.000 \
42.000 289.000 41.000
288.000 40.000 286.000 45.000 272.000 \
44.000 255.000 34.000
260.000 34.000 248.000 15.000 246.000 \
16.000 235.000 18.000
227.000 23.000 221.000}
}
proc backSmoke.mask {} {
return {0.000 117.000 9.000 119.000 12.000 124.000
14.000 \
127.000 14.000 131.000
12.000 134.000 11.000 136.000 12.000 \
137.000 12.000 140.000
11.000 142.000 10.000 143.000 10.000 \
145.000 8.000 145.000
4.000 147.000 4.000 150.000 8.000 \
150.000 11.000 152.000
11.000 155.000 10.000 159.000 8.000 \
162.000 8.000 165.000
6.000 168.000 5.000 170.000 8.000 \
173.000 7.000 177.000
2.000 180.000 5.000 183.000 7.000 \
188.000 7.000 192.000
7.000 196.000 6.000 199.000 9.000 \
202.000 9.000 204.000
13.000 208.000 12.000 210.000 12.000 \
213.000 12.000 215.000
10.000 217.000 7.000 219.000 10.000 \
224.000 10.000 230.000
8.000 233.000 8.000 237.000 14.000 \
237.000 17.000 236.000
18.000 239.000 21.000 237.000 23.000 \
235.000 26.000 235.000
25.000 232.000 23.000 231.000 23.000 \
229.000 24.000 227.000
25.000 224.000 28.000 224.000 29.000 \
223.000 33.000 221.000
35.000 223.000 36.000 227.000 42.000 \
228.000 43.000 226.000
46.000 226.000 47.000 228.000 50.000 \
229.000 51.000 232.000
50.000 235.000 48.000 237.000 52.000 \
237.000 57.000 240.000
59.000 245.000 59.000 248.000 62.000 \
248.000 63.000 252.000
62.000 254.000 64.000 257.000 62.000 \
259.000 64.000 261.000
62.000 263.000 62.000 266.000 64.000 \
268.000 63.000 270.000
68.000 269.000 70.000 268.000 71.000 \
268.000 73.000 271.000
73.000 273.000 74.000 277.000 74.000 \
279.000 73.000 281.000
71.000 285.000 70.000 286.000 70.000 \
288.000 73.000 290.000
74.000 293.000 77.000 291.000 79.000 \
293.000 80.000 299.000
78.000 302.000 79.000 306.000 78.000 \
308.000 76.000 312.000
74.000 316.000 77.000 313.000 81.000 \
312.000 86.000 306.000
89.000 304.000 93.000 304.000 96.000 \
301.000 100.000 299.000
104.000 302.000 107.000 307.000 110.000 \
310.000 110.000 315.000
112.000 320.000 114.000 320.000 115.000 \
317.000 116.000 314.000
119.000 312.000 122.000 308.000 125.000 \
305.000 128.000 306.000
131.000 308.000 137.000 310.000 140.000 \
311.000 140.000 316.000
143.000 316.000 146.000 314.000 151.000 \
314.000 152.000 317.000
158.000 319.000 162.000 319.000 161.000 \
306.000 157.000 306.000
156.000 299.000 156.000 296.000 156.000 \
290.000 158.000 286.000
181.000 285.000 183.000 281.000 186.000 \
281.000 188.000 281.000
190.000 285.000 195.000 275.000 199.000 \
272.000 201.000 269.000
201.000 262.000 202.000 161.000 206.000 \
160.000 210.000 161.000
210.000 261.000 210.000 263.000 210.000 \
269.000 213.000 269.000
213.000 273.000 214.000 276.000 217.000 \
276.000 219.000 278.000
222.000 278.000 223.000 277.000 230.000 \
281.000 229.000 299.000
240.000 303.000 242.000 301.000 246.000 \
302.000 248.000 305.000
248.000 322.000 251.000 323.000 253.000 \
321.000 254.000 325.000
255.000 326.000 255.000 336.000 255.000 \
349.000 258.000 350.000
258.000 358.000 253.000 361.000 246.000 \
367.000 246.000 410.000
250.000 410.000 250.000 415.000 273.000 \
413.000 277.000 411.000
282.000 409.000 286.000 413.000 287.000 \
408.000 293.000 403.000
301.000 407.000 305.000 413.000 305.000 \
426.000 308.000 430.000
308.000 420.000 312.000 413.000 315.000 \
411.000 321.000 411.000
325.000 413.000 329.000 418.000 330.000 \
421.000 330.000 426.000
329.000 429.000 331.000 428.000 334.000 \
427.000 338.000 428.000
340.000 430.000 340.000 429.000 343.000 \
422.000 347.000 418.000
356.000 417.000 366.000 421.000 370.000 \
429.000 370.000 434.000
368.000 440.000 371.000 437.000 379.000 \
437.000 383.000 441.000
384.000 448.000 384.000 453.000 383.000 \
455.000 388.000 453.000
395.000 456.000 396.000 459.000 397.000 \
464.000 397.000 467.000
399.000 466.000 402.000 468.000 402.000 \
467.000 404.000 467.000
406.000 462.000 412.000 460.000 414.000 \
462.000 415.000 466.000
415.000 468.000 416.000 467.000 418.000 \
467.000 420.000 469.000
420.000 465.000 422.000 460.000 424.000 \
458.000 428.000 456.000
439.000 457.000 441.000 457.000 443.000 \
452.000 453.000 448.000
454.000 446.000 452.000 444.000 449.000 \
441.000 449.000 439.000
449.000 437.000 452.000 435.000 453.000 \
435.000 455.000 431.000
457.000 431.000 459.000 432.000 461.000 \
432.000 465.000 432.000
471.000 432.000 474.000 430.000 476.000 \
421.000 479.000 421.000
482.000 422.000 484.000 419.000 491.000 \
417.000 492.000 415.000
499.000 410.000 506.000 411.000 510.000 \
414.000 511.000 417.000
513.000 419.000 515.000 418.000 517.000 \
419.000 518.000 419.000
519.000 420.000 521.000 419.000 524.000 \
421.000 526.000 424.000
529.000 426.000 529.000 429.000 531.000 \
430.000 533.000 433.000
532.000 435.000 533.000 438.000 535.000 \
442.000 534.000 446.000
534.000 447.000 538.000 446.000 541.000 \
447.000 542.000 449.000
542.000 453.000 545.000 453.000 545.000 \
449.000 543.000 444.000
545.000 441.000 547.000 440.000 550.000 \
437.000 553.000 437.000
558.000 439.000 558.000 436.000 562.000 \
435.000 566.000 435.000
569.000 433.000 575.000 433.000 583.000 \
432.000 585.000 429.000
590.000 429.000 595.000 433.000 599.000 \
437.000 601.000 433.000
599.000 430.000 601.000 426.000 603.000 \
426.000 605.000 425.000 606.000
767.000 0.000 767.000 0.000 206.000}
}
proc frontSmoke.mask {} {
return {0.000 385.000 5.000 386.000 9.000 391.000
13.000 \
381.000 17.000 377.000 17.000
373.000 18.000 366.000 22.000 \
362.000 27.000 360.000 30.000
360.000 34.000 363.000 36.000 \
366.000 42.000 365.000 45.000
365.000 50.000 366.000 52.000 \
369.000 56.000 368.000 61.000
369.000 65.000 369.000 67.000 \
368.000 71.000 365.000 74.000
365.000 77.000 366.000 78.000 \
368.000 77.000 373.000 77.000
375.000 77.000 378.000 78.000 \
380.000 83.000 381.000 88.000
387.000 89.000 393.000 89.000 \
396.000 93.000 395.000 97.000
395.000 103.000 400.000 105.000 \
406.000 104.000 413.000 104.000
418.000 107.000 419.000 112.000 \
419.000 116.000 416.000 122.000
416.000 125.000 417.000 128.000 \
420.000 129.000 425.000 134.000
429.000 140.000 431.000 146.000 \
431.000 149.000 428.000 152.000
428.000 158.000 429.000 164.000 \
432.000 167.000 432.000 170.000
435.000 176.000 435.000 182.000 \
431.000 186.000 428.000 191.000
425.000 197.000 419.000 203.000 \
419.000 206.000 419.000 211.000
421.000 215.000 426.000 220.000 \
428.000 221.000 433.000 220.000
436.000 225.000 436.000 230.000 \
439.000 231.000 442.000 236.000
444.000 239.000 447.000 238.000 \
450.000 234.000 454.000 233.000
456.000 230.000 458.000 223.000 \
458.000 212.000 459.000 210.000
458.000 206.000 461.000 202.000 \
462.000 202.000 467.000 200.000
471.000 195.000 473.000 191.000 \
473.000 185.000 470.000 178.000
470.000 174.000 470.000 170.000 \
471.000 166.000 472.000 162.000
474.000 158.000 481.000 156.000 \
485.000 153.000 489.000 146.000
492.000 140.000 495.000 133.000 \
497.000 141.000 499.000 148.000
497.000 152.000 497.000 155.000 \
500.000 156.000 504.000 158.000
506.000 161.000 506.000 164.000 \
507.000 166.000 510.000 167.000
512.000 173.000 513.000 178.000 \
511.000 187.000 509.000 191.000
507.000 195.000 508.000 197.000 \
511.000 201.000 509.000 206.000
510.000 208.000 515.000 220.000 \
516.000 224.000 519.000 224.000
524.000 224.000 528.000 225.000 \
531.000 228.000 534.000 233.000
534.000 238.000 530.000 244.000 \
530.000 246.000 533.000 248.000
537.000 248.000 542.000 256.000 \
545.000 260.000 549.000 261.000
555.000 265.000 555.000 266.000 \
551.000 266.000 545.000 269.000
542.000 275.000 542.000 281.000 \
542.000 284.000 545.000 288.000
551.000 290.000 557.000 290.000 \
568.000 290.000 573.000 296.000
577.000 300.000 582.000 303.000 \
571.000 303.000 563.000 305.000
559.000 310.000 557.000 308.000 \
551.000 308.000 544.000 310.000
542.000 310.000 533.000 313.000 \
530.000 317.000 525.000 320.000
521.000 320.000 517.000 320.000 \
511.000 321.000 506.000 326.000
503.000 326.000 500.000 326.000 \
491.000 330.000 483.000 333.000
481.000 336.000 476.000 343.000 \
474.000 351.000 474.000 356.000
471.000 359.000 469.000 366.000 \
470.000 371.000 476.000 375.000
478.000 380.000 476.000 386.000 \
474.000 393.000 474.000 398.000
471.000 406.000 469.000 416.000 \
469.000 425.000 473.000 431.000
476.000 432.000 470.000 437.000 \
464.000 446.000 462.000 452.000
460.000 455.000 454.000 458.000 \
451.000 465.000 449.000 473.000
449.000 480.000 453.000 486.000 \
458.000 496.000 462.000 501.000
471.000 506.000 479.000 511.000 \
484.000 518.000 491.000 521.000
497.000 527.000 500.000 532.000 \
503.000 539.000 503.000 545.000
506.000 548.000 511.000 555.000 \
510.000 559.000 513.000 559.000
519.000 563.000 520.000 566.000 \
522.000 568.000 525.000 572.000
527.000 576.000 530.000 578.000 \
532.000 581.000 535.000 583.000
538.000 584.000 544.000 584.000 \
549.000 584.000 553.000 583.000
557.000 583.000 558.000 582.000 \
563.000 579.000 565.000 583.000
568.000 587.000 570.000 591.000 \
566.000 596.000 560.000 599.000
557.000 605.000 557.000 605.000 \
767.000 40.000 767.000 0.000
767.000 }
}