arc.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file creates a visual test for arcs.  It is part of the Tk
  2. # visual test suite, which is invoked via the "visual" script.
  3. #
  4. # RCS: @(#) $Id: arc.tcl,v 1.3 1999/04/16 01:51:33 stanton Exp $
  5. catch {destroy .t}
  6. toplevel .t
  7. wm title .t "Visual Tests for Canvas Arcs"
  8. wm iconname .t "Arcs"
  9. wm geom .t +0+0
  10. wm minsize .t 1 1
  11. canvas .t.c -width 650 -height 600 -relief raised
  12. pack .t.c -expand yes -fill both
  13. button .t.quit -text Quit -command {destroy .t}
  14. pack .t.quit -side bottom -pady 3 -ipadx 4 -ipady 2
  15. puts "depth is [winfo depth .t]"
  16. if {[winfo depth .t] > 1} {
  17.     set fill1 aquamarine3
  18.     set fill2 aquamarine3
  19.     set fill3 IndianRed1
  20.     set outline2 IndianRed3
  21. } else {
  22.     set fill1 black
  23.     set fill2 white
  24.     set fill3 Black
  25.     set outline2 white
  26. }
  27. set outline black
  28. .t.c create arc 20 20 220 120 -start 30 -extent 270 -outline $fill1 -width 14 
  29. -style arc
  30. .t.c create arc 260 20 460 120 -start 30 -extent 270 -fill $fill2 -width 14 
  31. -style chord -outline $outline
  32. .t.c create arc 500 20 620 160 -start 30 -extent 270 -fill {} -width 14 
  33. -style chord -outline $outline -outlinestipple gray50
  34. .t.c create arc 20 260 140 460 -start 45 -extent 90 -fill $fill2 -width 14 
  35. -style pieslice -outline $outline
  36. .t.c create arc 180 260 300 460 -start 45 -extent 90 -fill {} -width 14 
  37. -style pieslice -outline $outline
  38. .t.c create arc 340 260 460 460 -start 30 -extent 150 -fill $fill2 -width 14 
  39. -style chord -outline $outline -stipple gray50 -outlinestipple gray25
  40. .t.c create arc 500 260 620 460 -start 30 -extent 150 -fill {} -width 14 
  41. -style chord -outline $outline
  42. .t.c create arc 20 450 140 570 -start 135 -extent 270 -fill $fill1 -width 14 
  43. -style pieslice -outline {}
  44. .t.c create arc 180 450 300 570 -start 30 -extent -90 -fill $fill1 -width 14 
  45. -style pieslice -outline {}
  46. .t.c create arc 340 450 460 570 -start 320 -extent 270 -fill $fill1 -width 14 
  47. -style chord -outline {}
  48. .t.c create arc 500 450 620 570 -start 350 -extent -110 -fill $fill1 -width 14 
  49. -style chord -outline {}
  50. .t.c addtag arc withtag all
  51. .t.c addtag circle withtag [.t.c create oval 320 200 340 220 -fill MistyRose3]
  52. .t.c bind arc <Any-Enter> {
  53.     set prevFill [lindex [.t.c itemconf current -fill] 4]
  54.     set prevOutline [lindex [.t.c itemconf current -outline] 4]
  55.     if {($prevFill != "") || ($prevOutline == "")} {
  56. .t.c itemconf current -fill $fill3
  57.     }
  58.     if {$prevOutline != ""} {
  59. .t.c itemconf current -outline $outline2
  60.     }
  61. }
  62. .t.c bind arc <Any-Leave> {.t.c itemconf current -fill $prevFill -outline $prevOutline}
  63. bind .t.c <1> {markarea %x %y}
  64. bind .t.c <B1-Motion> {strokearea %x %y}
  65. proc markarea {x y} {
  66.     global areaX1 areaY1
  67.     set areaX1 $x
  68.     set areaY1 $y
  69. }
  70. proc strokearea {x y} {
  71.     global areaX1 areaY1 areaX2 areaY2
  72.     if {($areaX1 != $x) && ($areaY1 != $y)} {
  73. .t.c delete area
  74. .t.c addtag area withtag [.t.c create rect $areaX1 $areaY1 $x $y 
  75. -outline black]
  76. set areaX2 $x
  77. set areaY2 $y
  78.     }
  79. }
  80. bind .t.c <Control-f> {
  81.     puts stdout "Enclosed: [.t.c find enclosed $areaX1 $areaY1 $areaX2 $areaY2]"
  82.     puts stdout "Overlapping: [.t.c find overl $areaX1 $areaY1 $areaX2 $areaY2]"
  83. }
  84. bind .t.c <3> {puts stdout "%x %y"}
  85. # The code below allows the circle to be move by shift-dragging.
  86. bind .t.c <Shift-1> {
  87.     set curx %x
  88.     set cury %y
  89. }
  90. bind .t.c <Shift-B1-Motion> {
  91.     .t.c move circle [expr %x-$curx] [expr %y-$cury]
  92.     set curx %x
  93.     set cury %y
  94. }
  95. # The binding below flashes the closest item to the mouse.
  96. bind .t.c <Control-c> {
  97.     set closest [.t.c find closest %x %y]
  98.     set oldfill [lindex [.t.c itemconf $closest -fill] 4]
  99.     .t.c itemconf $closest -fill IndianRed1
  100.     after 200 [list .t.c itemconfig $closest -fill $oldfill]
  101. }
  102. proc c {option value} {.t.c itemconf 2 $option $value}
  103. bind .t.c a {
  104.     set go 1
  105.     set i 1
  106.     while {$go} {
  107. if {$i >= 50} {
  108.     set delta -5
  109. }
  110. if {$i <= 5} {
  111.     set delta 5
  112. }
  113. incr i $delta
  114. c -start $i
  115. c -extent [expr 360-2*$i]
  116. after 20
  117. update
  118.     }
  119. }
  120. bind .t.c b {set go 0}
  121. bind .t.c <Control-x> {.t.c delete current}