aboutsummaryrefslogtreecommitdiff
path: root/demos/contours.tcl
diff options
context:
space:
mode:
authorlecoanet2004-05-07 10:51:56 +0000
committerlecoanet2004-05-07 10:51:56 +0000
commit0c518c95e4d1c3270fbc67143a6351ee81bb68f0 (patch)
tree3801ddfa41a67c88f216698d1e96257c2ee2a598 /demos/contours.tcl
parent1761ee2e8ad9f23ef9231ec9952c25ab2ac88439 (diff)
downloadtkzinc-0c518c95e4d1c3270fbc67143a6351ee81bb68f0.zip
tkzinc-0c518c95e4d1c3270fbc67143a6351ee81bb68f0.tar.gz
tkzinc-0c518c95e4d1c3270fbc67143a6351ee81bb68f0.tar.bz2
tkzinc-0c518c95e4d1c3270fbc67143a6351ee81bb68f0.tar.xz
Switched from pack to grid; Demos are put in a namespace
Diffstat (limited to 'demos/contours.tcl')
-rw-r--r--demos/contours.tcl359
1 files changed, 186 insertions, 173 deletions
diff --git a/demos/contours.tcl b/demos/contours.tcl
index b9ead37..a3f941a 100644
--- a/demos/contours.tcl
+++ b/demos/contours.tcl
@@ -5,23 +5,21 @@ if {![info exists zincDemo]} {
error "This script should be run from the zinc-widget demo."
}
-set w .contours
-catch {destroy $w}
-toplevel $w
-wm title $w "Zinc Curve contours Demonstration"
-wm iconname $w Curve
-frame $w.buttons
-
-pack $w.buttons -side bottom -fill x -pady 2m
-button $w.buttons.dismiss -text Dismiss -command "destroy $w"
-button $w.buttons.code -text "See Code" -command "showCode $w"
-pack $w.buttons.dismiss $w.buttons.code -side left -expand 1
-
-# The explanation displayed when running this demo
-text $w.text -relief sunken -borderwidth 2 -setgrid true -height 9
-pack $w.text -expand yes -fill both
-
-$w.text insert end "All visibles items are made by combining 2 items using contours:
+namespace eval contoursDemo {
+ variable w .contours
+ catch {destroy $w}
+ toplevel $w
+ wm title $w "Zinc Curve contours Demonstration"
+ wm iconname $w Curve
+
+ grid [button $w.dismiss -text Dismiss -command "destroy $w"] -row 2 -column 0 -pady 10
+ grid [button $w.code -text "See Code" -command "showCode $w"] -row 2 -column 1 -pady 10
+
+ # The explanation displayed when running this demo
+ grid [text $w.text -relief sunken -borderwidth 2 -setgrid true -height 9] \
+ -row 0 -column 0 -columnspan 2 -sticky ew
+
+ $w.text insert end "All visibles items are made by combining 2 items using contours:
- the firebrick curve1 has been holed using a addhole with a circle,
- the lightblue curve2 has been mickey-moused by adding two circles,
- the yellow curve3 is the union with a disjoint circle,
@@ -30,160 +28,175 @@ The following operations are possible:
- Mouse Button 1 for dragging objects.
- Mouse Button 1 for dragging the black handle and
modifying the grey curve contour."
-
-# Creating the zinc widget
-zinc $w.zinc -width 600 -height 500 -font 10x20 -borderwidth 3 -relief sunken
-pack $w.zinc
-set top 1
-
-# Creation of 2 items NOT visible, but used for creating visible
-# curves[1-5] with more than one contours.
-# The center of these 2 items is 200,100
-
-set curve0 [$w.zinc add curve $top {
- {300 0} {400 100 c} {300 200} {200 300 c} {100 200} {0 100 c} {100 0}
-} -closed 1 -visible 0 -filled 1]
-set cercle100 [$w.zinc add arc 1 {130 30 280 180} -visible 0]
-
-
-# cloning curve0 as curve1 and moving it
-set curve1 [$w.zinc clone $curve0 -visible 1 -fillcolor firebrick1]
-# adding a 'difference' contour to the curve1
-$w.zinc contour $curve1 add 1 $cercle100
-
-
-# cloning curve0 as curve2 and moving it
-# creating a curve without contour to control contour clockwise/counterclockwise
-set curve2 [$w.zinc add curve $top {} -closed 1 -filled 1 \
- -fillcolor lightblue2 -fillrule positive]
-$w.zinc contour $curve2 add +1 $curve0
-$w.zinc translate $curve2 100 90
-
-# adding the left ear of mickey mouse!
-$w.zinc contour $curve2 add +1 $cercle100
-$w.zinc translate $curve2 -200 0
-
-# adding the right ear of mickey mouse!
-$w.zinc contour $curve2 add +1 $cercle100
-
-# ... translate to make it more visible
-$w.zinc translate $curve2 320 20
-
-# cloning curve0 as curve3 and moving it
-set curve3 [$w.zinc clone $curve0 -visible 1 -fillcolor yellow3]
-$w.zinc translate $curve3 0 290
-
-# adding an nion' contour to the curve3
-$w.zinc contour $curve3 add +1 $cercle100
-# ... translate to make it more visible
-$w.zinc translate $curve3 -130 0
-
-
-
-
-# cloning curve0 as curve4 and moving it slightly
-set curve4 [$w.zinc clone $curve0 -visible 1 -fillcolor grey50 \
- -tags grouped -fillrule positive]
-# the tag "grouped" is used for both curve4 and
-# a handle (see just below)
-# It is used for translating both easily
-
-
-set index 2; ## index of the vertex associated to the handle
-set coord [$w.zinc coords $curve4 0 $index]
-set x [lindex $coord 0]
-set y [lindex $coord 1]
-set handle [$w.zinc add rectangle $top "[expr $x-5] [expr $y-5] [expr $x+5] [expr $y+5]" \
- -fillcolor black -filled 1 -tags {grouped}]
-
-
-# adding a 'difference' contour to the curve4
-$w.zinc contour $curve4 add +1 $cercle100
-$w.zinc translate grouped 110 0
-$w.zinc contour $curve4 add +1 $cercle100
-$w.zinc translate grouped -220 0
-$w.zinc contour $curve4 add +1 $cercle100
-$w.zinc translate grouped 10 80
-$w.zinc contour $curve4 add -1 $cercle100
-$w.zinc translate grouped 0 -10
-$w.zinc contour $curve4 add +1 $cercle100
-
-$w.zinc translate grouped 200 80
-$w.zinc contour $curve4 add +1 $cercle100
-$w.zinc translate grouped -350 0
-$w.zinc contour $curve4 add +1 $cercle100
-
-$w.zinc translate grouped 350 250
-#$zinc->lower(grouped);
-
-# Deleting no more usefull items: curve0 and cercle10:
-$w.zinc remove $curve0 $cercle100
-
-$w.zinc raise $curve1
-
-# adding drag and drop callback to each visible curve!
-foreach item "$curve1 $curve2 $curve3 $curve4" {
- # Some bindings for dragging the items
- $w.zinc bind $item <ButtonPress-1> "press $item motion %x %y"
- $w.zinc bind $item <ButtonRelease-1> release
-}
-
-# adding drag and drop on curve4 which also moves handle
-$w.zinc bind $curve4 <ButtonPress-1> "press $curve4 motionWithHandle %x %y"
-$w.zinc bind $curve4, <ButtonRelease-1> release
-
-# adding drag and drop on handle which also modify curve4
-$w.zinc bind $handle <ButtonPress-1> "press $handle moveHandle %x %y"
-$w.zinc bind $handle <ButtonRelease-1> release
-
-# callback for starting a drag
-set xOrig 0
-set yOrig 0
-
-proc press {item action x y} {
- global w xOrig yOrig
-
- set xOrig $x
- set yOrig $y
- bind $w.zinc <Motion> "$action $item %x %y"
-}
-
-# Callback for moving an item
-proc motion {item x y} {
- global w xOrig yOrig
-
- $w.zinc translate $item [expr $x - $xOrig] [expr $y - $yOrig]
- set xOrig $x
- set yOrig $y
-}
-
-# Callback for moving an item and its handle
-proc motionWithHandle {item x y} {
- global w xOrig yOrig
-
- set tag [lindex [$w.zinc itemcget $item -tags] 0]
- $w.zinc translate $tag [expr $x-$xOrig] [expr $y-$yOrig]
- set xOrig $x;
- set yOrig $y;
-}
-
-# Callback for moving the handle and modifying curve4
-# this code is far from being generic. Only for demonstrating how we can
-# modify a contour with a unique handle!
-proc moveHandle {handle x y} {
- global w xOrig yOrig curve4 index
-
- $w.zinc translate $handle [expr $x - $xOrig] [expr $y - $yOrig];
-
- foreach {vertxX vertxY} [$w.zinc coords $curve4 0 $index] break
- $w.zinc coords $curve4 0 $index "[expr $vertxX+($x-$xOrig)] [expr $vertxY+($y-$yOrig)]"
- set xOrig $x
- set yOrig $y
-}
-
-
-proc release {} {
- global w
-
- bind $w.zinc <Motion> {}
+
+ # Creating the zinc widget
+ grid [zinc $w.zinc -width 600 -height 500 -font 10x20 -borderwidth 3 \
+ -relief sunken] -row 1 -column 0 -columnspan 2 -sticky news
+ grid columnconfigure $w 0 -weight 1
+ grid columnconfigure $w 1 -weight 1
+ grid rowconfigure $w 1 -weight 2
+
+ variable top 1
+
+ # Creation of 2 items NOT visible, but used for creating visible
+ # curves[1-5] with more than one contours.
+ # The center of these 2 items is 200,100
+
+ variable curve0 [$w.zinc add curve $top {
+ {300 0} {400 100 c} {300 200} {200 300 c} {100 200} {0 100 c} {100 0}
+ } -closed 1 -visible 0 -filled 1]
+ variable cercle100 [$w.zinc add arc 1 {130 30 280 180} -visible 0]
+
+
+ # cloning curve0 as curve1 and moving it
+ variable curve1 [$w.zinc clone $curve0 -visible 1 -fillcolor firebrick1]
+ # adding a 'difference' contour to the curve1
+ $w.zinc contour $curve1 add 1 $cercle100
+
+
+ # cloning curve0 as curve2 and moving it
+ # creating a curve without contour to control contour clockwise/counterclockwise
+ variable curve2 [$w.zinc add curve $top {} -closed 1 -filled 1 \
+ -fillcolor lightblue2 -fillrule positive]
+ $w.zinc contour $curve2 add +1 $curve0
+ $w.zinc translate $curve2 100 90
+
+ # adding the left ear of mickey mouse!
+ $w.zinc contour $curve2 add +1 $cercle100
+ $w.zinc translate $curve2 -200 0
+
+ # adding the right ear of mickey mouse!
+ $w.zinc contour $curve2 add +1 $cercle100
+
+ # ... translate to make it more visible
+ $w.zinc translate $curve2 320 20
+
+ # cloning curve0 as curve3 and moving it
+ variable curve3 [$w.zinc clone $curve0 -visible 1 -fillcolor yellow3]
+ $w.zinc translate $curve3 0 290
+
+ # adding an nion' contour to the curve3
+ $w.zinc contour $curve3 add +1 $cercle100
+ # ... translate to make it more visible
+ $w.zinc translate $curve3 -130 0
+
+
+
+
+ # cloning curve0 as curve4 and moving it slightly
+ variable curve4 [$w.zinc clone $curve0 -visible 1 -fillcolor grey50 \
+ -tags grouped -fillrule positive]
+ # the tag "grouped" is used for both curve4 and
+ # a handle (see just below)
+ # It is used for translating both easily
+
+
+ variable index 2; ## index of the vertex associated to the handle
+ variable coord [$w.zinc coords $curve4 0 $index]
+ variable x [lindex $coord 0]
+ variable y [lindex $coord 1]
+ variable handle [$w.zinc add rectangle $top "[expr $x-5] [expr $y-5] [expr $x+5] [expr $y+5]" \
+ -fillcolor black -filled 1 -tags {grouped}]
+
+
+ # adding a 'difference' contour to the curve4
+ $w.zinc contour $curve4 add +1 $cercle100
+ $w.zinc translate grouped 110 0
+ $w.zinc contour $curve4 add +1 $cercle100
+ $w.zinc translate grouped -220 0
+ $w.zinc contour $curve4 add +1 $cercle100
+ $w.zinc translate grouped 10 80
+ $w.zinc contour $curve4 add -1 $cercle100
+ $w.zinc translate grouped 0 -10
+ $w.zinc contour $curve4 add +1 $cercle100
+
+ $w.zinc translate grouped 200 80
+ $w.zinc contour $curve4 add +1 $cercle100
+ $w.zinc translate grouped -350 0
+ $w.zinc contour $curve4 add +1 $cercle100
+
+ $w.zinc translate grouped 350 250
+ #$zinc->lower(grouped);
+
+ # Deleting no more usefull items: curve0 and cercle10:
+ $w.zinc remove $curve0 $cercle100
+
+ $w.zinc raise $curve1
+
+ # adding drag and drop callback to each visible curve!
+ foreach item "$curve1 $curve2 $curve3 $curve4" {
+ # Some bindings for dragging the items
+ $w.zinc bind $item <ButtonPress-1> "::contoursDemo::press $item motion %x %y"
+ $w.zinc bind $item <ButtonRelease-1> ::contoursDemo::release
+ }
+
+ # adding drag and drop on curve4 which also moves handle
+ $w.zinc bind $curve4 <ButtonPress-1> "::contoursDemo::press $curve4 motionWithHandle %x %y"
+ $w.zinc bind $curve4, <ButtonRelease-1> ::contoursDemo::release
+
+ # adding drag and drop on handle which also modify curve4
+ $w.zinc bind $handle <ButtonPress-1> "::contoursDemo::press $handle moveHandle %x %y"
+ $w.zinc bind $handle <ButtonRelease-1> ::contoursDemo::release
+
+ # callback for starting a drag
+ variable xOrig 0
+ variable yOrig 0
+
+ proc press {item action x y} {
+ variable w
+ variable xOrig
+ variable yOrig
+
+ set xOrig $x
+ set yOrig $y
+ bind $w.zinc <Motion> "::contoursDemo::$action $item %x %y"
+ }
+
+ # Callback for moving an item
+ proc motion {item x y} {
+ variable w
+ variable xOrig
+ variable yOrig
+
+ $w.zinc translate $item [expr $x - $xOrig] [expr $y - $yOrig]
+ set xOrig $x
+ set yOrig $y
+ }
+
+ # Callback for moving an item and its handle
+ proc motionWithHandle {item x y} {
+ variable w
+ variable xOrig
+ variable yOrig
+
+ set tag [lindex [$w.zinc itemcget $item -tags] 0]
+ $w.zinc translate $tag [expr $x-$xOrig] [expr $y-$yOrig]
+ set xOrig $x;
+ set yOrig $y;
+ }
+
+ # Callback for moving the handle and modifying curve4
+ # this code is far from being generic. Only for demonstrating how we can
+ # modify a contour with a unique handle!
+ proc moveHandle {handle x y} {
+ variable w
+ variable xOrig
+ variable yOrig
+ variable curve4
+ variable index
+
+ $w.zinc translate $handle [expr $x - $xOrig] [expr $y - $yOrig];
+
+ foreach {vertxX vertxY} [$w.zinc coords $curve4 0 $index] break
+ $w.zinc coords $curve4 0 $index "[expr $vertxX+($x-$xOrig)] [expr $vertxY+($y-$yOrig)]"
+ set xOrig $x
+ set yOrig $y
+ }
+
+
+ proc release {} {
+ variable w
+
+ bind $w.zinc <Motion> {}
+ }
}