Index: trunk/src/plugins/rt_topo/crbs.c =================================================================== --- trunk/src/plugins/rt_topo/crbs.c (revision 1361) +++ trunk/src/plugins/rt_topo/crbs.c (revision 1362) @@ -196,10 +196,10 @@ if (f == NULL) return -1; - grbs_svg_begin(&crbs->grbs, f); - grbs_svg_draw_points(&crbs->grbs, f); - grbs_svg_draw_wires(&crbs->grbs, f); - grbs_svg_end(&crbs->grbs, f); + grbs_draw_begin(&crbs->grbs, f); + grbs_draw_points(&crbs->grbs, f); + grbs_draw_wires(&crbs->grbs, f); + grbs_draw_end(&crbs->grbs, f); fclose(f); @@ -213,8 +213,8 @@ if (f == NULL) return -1; - grbs_svg_dump_points(&crbs->grbs, f); - grbs_svg_dump_wires(&crbs->grbs, f); + grbs_dump_points(&crbs->grbs, f); + grbs_dump_wires(&crbs->grbs, f); fclose(f); Index: trunk/src/plugins/rt_topo/crbs_cdt.c =================================================================== --- trunk/src/plugins/rt_topo/crbs_cdt.c (revision 1361) +++ trunk/src/plugins/rt_topo/crbs_cdt.c (revision 1362) @@ -122,9 +122,9 @@ if (crbs->enable_mid_virt) { vtd0_t np = {0}; - double minlen2 = (rt_topo_cfg.wire_thick + rt_topo_cfg.wire_clr/2) * 16; /* minimum length of an edge to split */ + double minlen2, minlen = (rt_topo_cfg.wire_thick + rt_topo_cfg.wire_clr/2) * 16; /* minimum length of an edge to split */ - minlen2 = minlen2 * minlen2; + minlen2 = minlen * minlen; for(n = 0; n < cdt->edges.used; n++) { double len; @@ -138,8 +138,21 @@ dy = e->endp[0]->pos.y - e->endp[1]->pos.y; len2 = dx*dx + dy*dy; if (len2 > minlen2) { - vtd0_append(&np, (e->endp[0]->pos.x + e->endp[1]->pos.x)/2); - vtd0_append(&np, (e->endp[0]->pos.y + e->endp[1]->pos.y)/2); + long i; + int bad = 0; + double x = (e->endp[0]->pos.x + e->endp[1]->pos.x)/2, y = (e->endp[0]->pos.y + e->endp[1]->pos.y)/2; + + /* avoid multiple splits too close */ + for(i = 0; i < np.used; i++) { + if ((fabs(x - np.array[i]) < minlen) && (fabs(y - np.array[i+1]) < minlen)) { + bad = 1; + break; + } + } + if (!bad) { + vtd0_append(&np, x); + vtd0_append(&np, y); + } } } #warning TODO: this should be 0,0 for copper and clearance once grbs supports convex implicit attachments Index: trunk/src/plugins/rt_topo/crbs_route.c =================================================================== --- trunk/src/plugins/rt_topo/crbs_route.c (revision 1361) +++ trunk/src/plugins/rt_topo/crbs_route.c (revision 1362) @@ -551,6 +551,7 @@ return 0; /* nothing to rip up */ printf(" ripping up %s\n", best->tn->net->hdr.oid); + printf("GT 2net_del %s\n", best->tn->net->hdr.oid); sprintf(tmp, "3_GRBS_routed_%d_rip1.svg", cnt_grbs); crbs_grbs_draw(crbs, tmp);