Tcl struct::graph
имеет команду walk
, и я хотел бы использовать ее для удаления узлов и очистки данных, доступных по атрибутам узлов, например именам виджетов.В документации ничего не сказано о том, что можно и что нельзя делать во время обхода графика, поэтому мне было интересно, как это работает, если я начну удалять дуги, примыкающие к узлу, по которому идет шаг.
Вот моя предполагаемая команда обхода (почти закончена, можетбыть в нем ошибки):
proc csp_scene_walk_remove {mode g n} {
set canvas [$g get canvas]
foreach arc [$g arcs -adj $n] {
$canvas delete [$g arc get $arc widget]
}
$canvas delete [$g node get $n widget] [$g node get $n widgetanno] [$g node get $n widgetanno].bg
$g node delete $n
}
Я думаю, это может сработать, ЕСЛИ walk
работает с реальным графическим объектом, а не с копией, данные копируются изнутри в нужный момент и т. д. и т. д.
В: Каково поведение stuct :: graph walk
при изменении графика во время его обхода?
РЕДАКТИРОВАТЬ: Кажется, что команда делает то, что делаетЯ хочу использовать это так:
# destroy all nodes downstream with associated widgets
mygraph walk $node -order post -type dfs -dir forward -command csp_scene_walk_remove;
Но я не могу сказать, является ли это поведением, определяемым реализацией, как замечено Tcllib.