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