portal Michała Hanćkowiaka
Begin main content
kons_font 11

## 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

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...