Arjen Markus (20 february 2009) When drawing a diagram using the Diagrams package in Tklib, I always use an edit-run-view cycle. As this is slightly annoying (edit the code, restart wish and see if the resulting diagram is to my liking), I thought a simple editor might be called for.
The script below is the barest program I could come up with to illustrate such an application. Just type in small diagram like:
box A arrow "" 40 circle B direction SE
in the text widget in the lower part and then press the Show diagram button, as a demonstration of the idea.
The blue circle and arrow show the "current position" and the direction - two properties used to position the next item in the diagram.
Next step: decorate the program with a proper menubar, perhaps hypertext help. Another idea: add an "animated" display (pause between in the handling of the diagram commands, with proper visual feedback so that you can see what line is responsible for what part of the diagram).
# editdiag.tcl -- # Interactive diagram editor # # TODO: # - Properly reset the diagram stuff # - Nicer GUI # source draw_diagram.tcl package require Diagrams 0.3 namespace import ::Diagrams::* # ShowDiagram -- # Draw the diagram via the commands entered in the text widget # proc ShowDiagram {} { .c delete all array set ::Diagrams::state $::original_state drawin .c eval [.t get 1.0 end] foreach {key x y} [currentpos] {break} .c create oval [expr {$x-3}] [expr {$y-3}] [expr {$x+3}] [expr {$y+3}] \ -outline blue -fill white color blue arrow "" 40 } # main -- # Bring up the main window # grid [canvas .c -height 400 -width 600 -background white] -sticky news grid [label .l -text "Type the commands for the diagram:"] -sticky w grid [text .t -height 15] -sticky news grid [button .b -text "Show diagram" -command ShowDiagram] # # Store the current state for resetting the diagram # set original_state [array get ::Diagrams::state]