No registered users in community Materiały
in last 10 minutes
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}