Index: src_plugins/rbs_routing/stretch.c =================================================================== --- src_plugins/rbs_routing/stretch.c (revision 38806) +++ src_plugins/rbs_routing/stretch.c (revision 38807) @@ -24,6 +24,7 @@ grbs_line_t *gl; grbs_2net_t *orig_tn; rnd_layer_id_t lid = pcb_layer_id(pcb->Data, line->parent.layer); + grbs_arc_t *target, *rem1 = NULL, *rem2 = NULL; rbsr_map_pcb(&rbss->map, pcb, lid); rbsr_map_debug_draw(&rbss->map, "rbss1.svg"); @@ -40,6 +41,8 @@ return -1; } + orig_tn = grbs_arc_parent_2net(gl->a1); + if (gl->a1->r == 0) { rbss->from.type = ADDR_POINT; rbss->from.obj.pt = gl->a1->parent_pt; @@ -46,17 +49,20 @@ } else { rbss->from.type = ADDR_ARC_END | ADDR_ARC_CONVEX; - rbss->from.obj.arc = gl->a1; + target = gl->a1->link_point.prev; + gl->a1->in_use = 0; + gdl_remove(gl->a1->link_2net.parent, gl->a1, link_2net); + rbss->from.obj.arc = target; + target->new_r = gl->a1->r; + target->new_sa = gl->a1->sa; + target->new_adir = (gl->a1->da >= 0) ? +1 : -1; + target->new_da = 0; + target->new_in_use = 1; + rem1 = gl->a1; } rbss->from.last_real = NULL; - gl->a1->new_r = gl->a1->r; - gl->a1->new_sa = gl->a1->sa; - gl->a1->new_adir = (gl->a1->da >= 0) ? +1 : -1; - gl->a1->new_da = 0; - gl->a1->new_in_use = 1; - if (gl->a2->r == 0) { rbss->to.type = ADDR_POINT; rbss->to.obj.pt = gl->a2->parent_pt; @@ -63,21 +69,30 @@ } else { rbss->to.type = ADDR_ARC_START | ADDR_ARC_CONVEX; - rbss->to.obj.arc = gl->a2; + target = gl->a2->link_point.prev; + gl->a2->in_use = 0; + gdl_remove(gl->a2->link_2net.parent, gl->a2, link_2net); + rbss->to.obj.arc = target; + target->new_r = gl->a2->r; + target->new_sa = gl->a2->sa; + target->new_adir = (gl->a2->da >= 0) ? +1 : -1; + target->new_da = 0; + target->new_in_use = 1; + rem2 = gl->a2; } rbss->to.last_real = NULL; - gl->a2->new_r = gl->a2->r; - gl->a2->new_sa = gl->a2->sa; - gl->a2->new_adir = (gl->a2->da >= 0) ? +1 : -1; - gl->a2->new_da = 0; - gl->a2->new_in_use = 1; - orig_tn = grbs_arc_parent_2net(gl->a1); rbss->tn = grbs_2net_new(&rbss->map.grbs, orig_tn->copper, orig_tn->clearance); htpp_pop(&rbss->map.robj2grbs, line); grbs_path_remove_line(&rbss->map.grbs, gl); + if (rem1 != NULL) + grbs_path_remove_arc(&rbss->map.grbs, rem1); + if (rem2 != NULL) + grbs_path_remove_arc(&rbss->map.grbs, rem2); + + rbsr_map_debug_draw(&rbss->map, "rbss2.svg"); rbsr_map_debug_dump(&rbss->map, "rbss2.dump");