1package require Tk
2package require Diagrams
3namespace import ::Diagrams::*
4
5proc ::Diagrams::bracket {dir dist begin end} {
6    variable state
7
8    # Ad hoc!
9    set coords [lrange $begin 1 2]
10    if { $dir == "west" } {
11       lappend coords [expr {[lindex $begin 1]-$dist}] [lindex $begin 2]
12       lappend coords [expr {[lindex $begin 1]-$dist}] [lindex $end 2]
13    }
14    if { $dir == "east" } {
15       lappend coords [expr {[lindex $begin 1]+$dist}] [lindex $begin 2]
16       lappend coords [expr {[lindex $begin 1]+$dist}] [lindex $end 2]
17    }
18    if { $dir == "south" } {
19       lappend coords [lindex $begin 1] [expr {[lindex $begin 2]+$dist}]
20       lappend coords [lindex $end 1]   [expr {[lindex $begin 2]+$dist}]
21    }
22    if { $dir == "north" } {
23       lappend coords [lindex $begin 1] [expr {[lindex $begin 2]-$dist}]
24       lappend coords [lindex $end 1]   [expr {[lindex $begin 2]-$dist}]
25    }
26    lappend coords [lindex $end 1] [lindex $end 2]
27
28    $state(canvas) create line $coords -arrow last
29    # TODO: nice diagram object
30}
31namespace eval ::Diagrams {
32    namespace export bracket
33}
34namespace import ::Diagrams::bracket
35
36pack [canvas .c -width 300 -height 300 -bg white]
37drawin .c
38
39currentpos [position 100 20]
40circle "Start"
41direction south
42arrow "" 40
43
44#
45# Store the object for later reference
46#
47set d [diamond "T > Tset?"]
48arrow "no" 40
49set b [box "Heat during\n1 minute"]
50#
51# Note: the order of direction/currentpos is important :(
52#
53direction east
54currentpos [getpos E $d]
55
56arrow "yes" 40
57circle "Stop"
58
59bracket west 30 [getpos W $b] [getpos W $d]
60
61saveps heater.ps
62