Index: trunk/src_plugins/rbs_routing/seq.c =================================================================== --- trunk/src_plugins/rbs_routing/seq.c (revision 38871) +++ trunk/src_plugins/rbs_routing/seq.c (revision 38872) @@ -242,9 +242,29 @@ return 0; /* do not redraw if there's no change */ } - TODO("step back if end:dir matches the previous"); + if ((rbsq->used > 2) && (end == rbsq->path[rbsq->used-2].pt)) { + int res; + grbs_arc_t *arc; + rnd_trace("jajj ------------------------------!\n"); + rbsq->consider.dir = RBS_ADIR_invalid; + + + *need_redraw_out = 1; + res = rbsr_seq_redraw(rbsq); + arc = gdl_first(&rbsq->tn->arcs); + if (arc != NULL) { + arc->RBSR_WIREFRAME_FLAG = 1; + if (arc->eline != NULL) + arc->eline->RBSR_WIREFRAME_FLAG = 1; + } + + rbsq->consider_step_back = 1; + return res; + } + rbsq->consider_step_back = 0; + rbsq->consider.pt = end; rbsq->consider.dir = dir; @@ -256,6 +276,12 @@ { rbsr_seq_accept_t res = RBSR_SQA_CONTINUE; + if (rbsq->consider_step_back) { + rbsr_seq_step_back(rbsq); + rbsq->consider_step_back = 0; + return res; + } + if (rbsq->used >= RBSR_SEQ_MAX) { rnd_message(RND_MSG_ERROR, "rbsr_seq_accept(): path too long\n"); return res; Index: trunk/src_plugins/rbs_routing/seq.h =================================================================== --- trunk/src_plugins/rbs_routing/seq.h (revision 38871) +++ trunk/src_plugins/rbs_routing/seq.h (revision 38872) @@ -26,6 +26,8 @@ rnd_coord_t rlast_x, rlast_y; /* last points realized in the last redraw */ grbs_snapshot_t *snap; + + unsigned consider_step_back:1; /* accept() should step back one */ } rbsr_seq_t; typedef enum rbsr_seq_accept_e {