## graphviz/dot2tk
# + skrypt rysujacy graf na canvasie .c
# + jest mozliwosc modyfikowania wierzcholkow, krawedzi itp
# mozna np. zmieniac napisy w wierzcholkach,
# kolor wierzcholkow, grubosc krawedzi itp
# ... patrz przyklady nizej
#
package re http
# webserwis obudowany w proc dot2tk...
proc dot2tk kod {
set q [http::formatQuery dot $kod]
# parametr "dot" powinien sie nazywac troche inaczej...
# (pelni role hasla; prosze sie zwrocic do prowadzacego)
set h [http::geturl http://faculty.wmi.amu.edu.pl:20002/acs01d2?$q]
set r [http::data $h]
http::cleanup $h
set r
}
destroy .c; canvas .c
eval [dot2tk {digraph mojgraf1 {
node [width=1]
1 -> 2 -> 3
2 -> "3a"
2 -> "3b"
"3b" -> "4a"
"3b" -> "4b"
"3b" -> "4c"
"3b" -> "4d"
}}]
pack .c -fill both -expand 1
.c conf -bg pink
# metadane w zmiennch .c_* ...
array unset node edge
array set node ${.c_nodes}
array set edge ${.c_edges}
# zmiana czcionek przesuwanie obrazu i zoom
foreach e [array names node] {
.c itemconf 0$node($e) -font {Helvetica 14}
}
set bb 0
bind .c <Button-1> {set bb 1; set xx %x; set yy %y}
bind .c <ButtonRelease-1> {set bb 0}
bind .c <Motion> {
if {!$bb} continue
.c move all [expr %x-$xx] [expr %y-$yy]
set xx %x; set yy %y
}
bind .c <Button-3> {.c scale all %x %y .9 .9}
bind .c <Control-Button-3> {.c scale all %x %y 1.1 1.1}
# ... do tego miejsca wykonac !!!!!!!!!!!!!!!!!!!!!!!
# modyfikowanie rysunku:
.c itemconf 0$node(3b) -text "??? 213" -fill red
.c itemconf 1$node(4a) -fill yellow
# przedrostek: 0 - text, 1 - oval
.c itemconf 1$edge(3b->4d) -width 1
.c itemconf 1$edge(3b->4c) -width 3
array names edge 2->*
#% 2->3 2->3a 2->3b
array names edge 3b->*
#% 3b->4d 3b->4a 3b->4b 3b->4c