Index: trunk/src_plugins/rbs_routing/seq.c =================================================================== --- trunk/src_plugins/rbs_routing/seq.c (revision 38830) +++ trunk/src_plugins/rbs_routing/seq.c (revision 38831) @@ -161,12 +161,22 @@ return rbsr_seq_redraw(rbsq); } -int rbsr_seq_accept(rbsr_seq_t *rbsq) +rbsr_seq_accept_t rbsr_seq_accept(rbsr_seq_t *rbsq) { + rbsr_seq_accept_t res = RBSR_SQA_CONTINUE; + + rbsq->path[rbsq->used] = rbsq->consider; rbsq->used++; rbsq->last_x = rbsq->rlast_x; rbsq->last_y = rbsq->rlast_y; - return 0; + + if (rbsq->consider.dir == GRBS_ADIR_INC) { + res = RBSR_SQA_TERMINATE; + TODO("copy back"); + rbsq->consider.dir = 0; + } + + return res; } Index: trunk/src_plugins/rbs_routing/seq.h =================================================================== --- trunk/src_plugins/rbs_routing/seq.h (revision 38830) +++ trunk/src_plugins/rbs_routing/seq.h (revision 38831) @@ -28,6 +28,10 @@ grbs_snapshot_t *snap; } rbsr_seq_t; +typedef enum rbsr_seq_accept_e { + RBSR_SQA_CONTINUE, /* intermediate point go on with routing */ + RBSR_SQA_TERMINATE /* finished a twonet, terminate routing */ +} rbsr_seq_accept_t; /* Start seqing a routing from tx;ty; returns 0 on success */ int rbsr_seq_begin_at(rbsr_seq_t *rbss, pcb_board_t *pcb, rnd_layer_id_t lid, rnd_coord_t tx, rnd_coord_t ty, rnd_coord_t copper, rnd_coord_t clearance); @@ -34,5 +38,5 @@ void rbsr_seq_end(rbsr_seq_t *rbss); int rbsr_seq_consider(rbsr_seq_t *rbss, rnd_coord_t tx, rnd_coord_t ty, int *need_redraw_out); -int rbsr_seq_accept(rbsr_seq_t *rbss); +rbsr_seq_accept_t rbsr_seq_accept(rbsr_seq_t *rbss); Index: trunk/src_plugins/rbs_routing/tool_seq.c =================================================================== --- trunk/src_plugins/rbs_routing/tool_seq.c (revision 38830) +++ trunk/src_plugins/rbs_routing/tool_seq.c (revision 38831) @@ -82,7 +82,9 @@ case PCB_CH_STATE_SECOND: /* TODO: if (pcb_crosshair.X == pcb_crosshair.AttachedLine.Point1.X && pcb_crosshair.Y == pcb_crosshair.AttachedLine.Point1.Y) rnd_tool_select_by_name(hl, "line"); */ - rbsr_seq_accept(&seq); + if (rbsr_seq_accept(&seq) == RBSR_SQA_TERMINATE) { + pcb_crosshair.AttachedLine.State = PCB_CH_STATE_FIRST; + } break; } }