Index: src_plugins/rbs_routing/stretch.c =================================================================== --- src_plugins/rbs_routing/stretch.c (revision 38811) +++ src_plugins/rbs_routing/stretch.c (revision 38812) @@ -28,12 +28,37 @@ htpp_set(&rbss->removes, obj->orig, NULL); } +RND_INLINE void stretch_get_addr(rbsr_stretch_t *rbss, grbs_addr_t *dst, grbs_arc_t *arc, grbs_arc_t **rem) +{ + grbs_arc_t *target; + + if (arc->r == 0) { + /* incident */ + dst->type = ADDR_POINT; + dst->obj.pt = arc->parent_pt; + } + else { + rbss->from.type = ADDR_ARC_END | ADDR_ARC_CONVEX; + target = arc->link_point.prev; + arc->in_use = 0; + gdl_remove(arc->link_2net.parent, arc, link_2net); + dst->obj.arc = target; + target->new_r = arc->r; + target->new_sa = arc->sa; + target->new_adir = (arc->da >= 0) ? +1 : -1; + target->new_da = 0; + target->new_in_use = 1; + *rem = arc; + } + dst->last_real = NULL; +} + int rbsr_stretch_line_begin(rbsr_stretch_t *rbss, pcb_board_t *pcb, pcb_line_t *line) { 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; + grbs_arc_t *rem1 = NULL, *rem2 = NULL; htpp_init(&rbss->removes, ptrhash, ptrkeyeq); @@ -53,46 +78,9 @@ } orig_tn = grbs_arc_parent_2net(gl->a1); + stretch_get_addr(rbss, &rbss->from, gl->a1, &rem1); + stretch_get_addr(rbss, &rbss->to, gl->a2, &rem2); - if (gl->a1->r == 0) { - rbss->from.type = ADDR_POINT; - rbss->from.obj.pt = gl->a1->parent_pt; - } - else { - rbss->from.type = ADDR_ARC_END | ADDR_ARC_CONVEX; - 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; - - - if (gl->a2->r == 0) { - rbss->to.type = ADDR_POINT; - rbss->to.obj.pt = gl->a2->parent_pt; - } - else { - rbss->to.type = ADDR_ARC_START | ADDR_ARC_CONVEX; - 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; - rbss->tn = grbs_2net_new(&rbss->map.grbs, orig_tn->copper, orig_tn->clearance); htpp_pop(&rbss->map.robj2grbs, line); @@ -108,7 +96,6 @@ grbs_path_remove_arc(&rbss->map.grbs, rem2); } - rbsr_map_debug_draw(&rbss->map, "rbss2.svg"); rbsr_map_debug_dump(&rbss->map, "rbss2.dump");