portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

ALR - Narzedzia do budowania grafów i wizualizacji graficznej

# UWAGA, 2.10.2017, ten opis jest niedokończony !

source symul_graf_lib.tcl

# budujemy graf...
set liczbaWierz 0
array unset sasiedzi
G::kraw 0 1
G::kraw 1 2
G::pokazGraf

G::rysujGraf
#G::rysujGraf -zero 1
#G::rysujGraf -zero 0 -opcje {node [shape=octagon]}
  # + "graficzna" wizualizacja grafu

# umieszczanie informacji na grafie
# + oznaczenia elem canvasa .t.c:
#   0$tc_node(X) - tekst (id wierz)
#   1$tc_node(X) - owal
#   1$tc_edge(X->Y) - linia/strzałka kraw; musi być X<Y
.t.c itemconf 0$tc_node(1) -fill red
.t.c itemconf 0$tc_node(1) -fill red -text "inny tekst"
.t.c itemconf 1$tc_node(1) -fill yellow
  # ^ modyfikowanie wierz, np. ich koloru
.t.c itemconf [tc_edge_nrPol 1 0] -fill red
.t.c itemconf [tc_edge_nrPol 1 1] -fill blue
.t.c itemconf [tc_edge_nrPol 1 0] -text "0; ????"
.t.c itemconf [tc_edge_nrPol 1 1] -text "1; !!!!!!!!"
  # ^ "tc_edge_nrPol ID X" udostępnia napis zawierający nr poł.
  #   dla wierz ID i jego połączenia nr X
  #   (tzn. ze mozna zmodyfikowac ten napis)
.t.c itemconf [tc_edge_srodek 1 0] -text "dowolny tekst"
.t.c itemconf [tc_edge_srodek 1 1] -text "321 321"
  # ^ "tc_edge_srodek ID X" udostępnia napis na srodku krawedzi
.t.c itemconf 1$tc_edge(1->2) -width 1
.t.c itemconf 1$tc_edge(1->2) -width 4
tc_strzalka_kolor 1->2 blue
tc_strzalka_kolor 1->2 red
  # ^ zmienia kolor całej strzałki
  #   "A->B" oznacza polaczenie od wierz A do wierz B, A<B

# budujemy inny graf...
set liczbaWierz 0
array unset sasiedzi
#G::gwiazda [G::ciag 0 2] 3
G::gwiazda2 0 2 3
G::kraw 3 4
G::pokazGraf

G::rysujGraf -zero 1
#G::rysujGraf

tc_strzalka_kolor 2->3 blue
.t.c itemconf 1$tc_edge(2->3) -width 3

# budujemy jeszcze inny graf...
set liczbaWierz 0
array unset sasiedzi
G::sciezka2 0 3
G::gwiazda2 4 7 3
  # + ramiona gwiazdy 4,5,6,7 centrum 3
#G::gwiazda2 4 7 8
G::gwiazda {4 5 6} 8
  # + ramiona gwiazdy 4,5,6 centrum 3
G::pokazGraf

G::rysujGraf
#G::rysujGraf -zero 1


# sposób na konfig. połączeń na podstawie ID i nr_połączenia
proc tc_pol {id pol} {
  global sasiedzi
  set l1 "$id [lindex $sasiedzi($id) $pol]"
  set l1 [lsort -integer $l1]
  return "[lindex $l1 0]->[lindex $l1 1]"
}
.t.c itemconf 1$tc_edge([tc_pol 1 1]) -fill green -width 4
.t.c itemconf 1$tc_edge([tc_pol 1 1]) -fill red -width 4
.t.c itemconf 1$tc_edge([tc_pol 1 0]) -fill green -width 4
.t.c itemconf 1$tc_edge([tc_pol 1 0]) -fill red -width 4
  # ^ konfig. poł. nr 0 i 1 dla wierz z ID=1

proc tc_pol_conf {id pol args} {
  global tc_edge
  eval .t.c itemconf 1\$tc_edge([tc_pol $id $pol]) $args
}
tc_pol_conf 1 0 -fill green -width 1
tc_pol_conf 1 0 -fill green -width 4
  # ^ uproszczenie poprzedniego

# drzewo losowe nieukorzenione, 5.11.2019
# + uwaga: tu NIE ma konwencji, że "do parenta przez poł. nr 0" !!
set G [exec ./drzewolosowe01 50]
set EG [lindex $G 1]
set liczbaWierz 0
array unset sasiedzi
foreach e $EG {eval G::kraw $e}
G::pokazGraf
G::rysujGraf

# drzewo losowe za pomocą DodajKraw z symul_lib.tcl, 08.11.2021
# + uwaga 1: tu chyba JEST konwencja, że "do parenta przez poł. nr 0" !!
# + uwaga 2: zmodyfikowałem symul_graf_lib.tcl tak, że działa dla 50 wierz!! 15.03.2023
set G [exec ./drzewolosowe01 50]
set VG [lindex $G 0]
set EG [lindex $G 1]
source symul_lib.tcl
array unset sasiedzi
set liczbaWierz [llength $VG]
#iterate i $liczbaWierz {set sasiedzi($i) {}}
foreach v $VG {set sasiedzi($v) {}}
foreach e $EG {DodajKraw {*}$e}



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