[HOME] [CONTENTS][DOWNLOAD]


#
# 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 }
}

[HOME] [CONTENTS][DOWNLOAD] 1