Index: trunk/src_plugins/rbs_routing/install.c =================================================================== --- trunk/src_plugins/rbs_routing/install.c (revision 38859) +++ trunk/src_plugins/rbs_routing/install.c (revision 38860) @@ -38,6 +38,9 @@ rnd_coord_t l1x = RBSR_G2R(line->x1), l1y = RBSR_G2R(line->y1); rnd_coord_t l2x = RBSR_G2R(line->x2), l2y = RBSR_G2R(line->y2); + if (line->RBSR_WIREFRAME_COPIED_BACK) + return 0; + line->RBSR_WIREFRAME_COPIED_BACK = 1; if (obj == NULL) { /* create new */ if ((line->x1 == line->x2) && (line->y1 == line->y2)) @@ -75,6 +78,10 @@ double sa, da; rnd_coord_t cx, cy, r; + if (arc->RBSR_WIREFRAME_COPIED_BACK) + return 0; + arc->RBSR_WIREFRAME_COPIED_BACK = 1; + sa = 180.0 - (arc->sa * RND_RAD_TO_DEG); da = - (arc->da * RND_RAD_TO_DEG); cx = RBSR_G2R(arc->parent_pt->x); @@ -124,6 +131,15 @@ } pcb_arc_modify(pa, new_cx, new_cy, new_r, new_r, new_sa, new_da, NULL, NULL, 1); + + /* A change in an arc typically means change in connected lines; the lines + on our target tn are tuned but lines of innocent bystander twonets are + not. Arcs of those bystander twonets are updated and are getting + here because all arcs of an affected point-segment is checked */ + if (arc->sline != NULL) + rbsr_install_line(ly, tn, arc->sline); + if (arc->eline != NULL) + rbsr_install_line(ly, tn, arc->eline); } return 0; } Index: trunk/src_plugins/rbs_routing/map.h =================================================================== --- trunk/src_plugins/rbs_routing/map.h (revision 38859) +++ trunk/src_plugins/rbs_routing/map.h (revision 38860) @@ -32,6 +32,7 @@ #define RBSR_G2R(v) ((rnd_coord_t)rnd_round((v)*1000.0)) #define RBSR_WIREFRAME_FLAG user_flg1 +#define RBSR_WIREFRAME_COPIED_BACK user_flg2 int rbsr_map_pcb(rbsr_map_t *dst, pcb_board_t *pcb, rnd_layer_id_t lid); void rbsr_map_uninit(rbsr_map_t *dst);