diff --git a/rogueviz/sag/annealing.cpp b/rogueviz/sag/annealing.cpp index f9be9741..82fb8c08 100644 --- a/rogueviz/sag/annealing.cpp +++ b/rogueviz/sag/annealing.cpp @@ -47,6 +47,8 @@ void saiter() { for(int ii=0; ii= 0 && fixed_position[t2])) return; sagnode[sid1] = -1; sagid[t1] = -1; sagnode[sid2] = -1; if(t2 >= 0) sagid[t2] = -1; diff --git a/rogueviz/sag/data.cpp b/rogueviz/sag/data.cpp index 1ebda6b1..1631e60b 100644 --- a/rogueviz/sag/data.cpp +++ b/rogueviz/sag/data.cpp @@ -28,6 +28,8 @@ vector sagedges; vector> edges_yes, edges_no; vector>> edge_weights; +vector fixed_position; + ld edgepower=1, edgemul=1; void init(); @@ -46,6 +48,8 @@ void prepare_graph() { edges_yes.clear(); edges_yes.resize(DN); edges_no.clear(); edges_no.resize(DN); + + fixed_position.clear(); fixed_position.resize(DN); for(int i=0; i= isize(sagid)) throw hr_exception("bad id in -sag-fix"); + fixed_position[id] = true; + } + + else if(argis("-sag-move-to")) { + shift(); int sid1 = getid(args()); + if(sid1 < 0 || sid1 >= isize(sagid)) throw hr_exception("bad id in -sag-move-to"); + shift(); int t2 = argi(); + if(t2 < 0 || t2 >= isize(sagnode)) throw hr_exception("bad id in -sag-move-to"); + int sid2 = sagid[t2]; + int t1 = allow_doubles ? -1 : sagnode[sid1]; + sagnode[sid1] = t2; sagid[t2] = sid1; + if(sid2 >= 0) sagnode[sid2] = t1; sagid[t1] = sid2; + compute_cost(); + create_viz(); + } + + else return 1; #endif return 0;