Index: trunk/src/plugins/rt_topo/crbs.c =================================================================== --- trunk/src/plugins/rt_topo/crbs.c (revision 1378) +++ trunk/src/plugins/rt_topo/crbs.c (revision 1379) @@ -65,7 +65,20 @@ return lctn->net == tctn->net; } +static int crbs_coll_ingore_tn_point_cb(grbs_t *grbs, grbs_2net_t *tn, grbs_point_t *pt) +{ + crbs_point_t *p = pt->user_data; + crbs_2net_t *tctn = tn->user_data; + assert(tctn != NULL); + + if (p == NULL) + return 0; + + return p->net == tctn->net; +} + + crbs_point_t *crbs_point_new(crbs_t *crbs) { crbs_point_t *p = calloc(sizeof(crbs_point_t), 1); @@ -76,7 +89,7 @@ #include GRBS_ADDR_HASH(htad_hash); -point_t *crbs_make_point(crbs_t *crbs, double x, double y, double cop, double clr, rtrnd_via_t *via) +point_t *crbs_make_point(crbs_t *crbs, double x, double y, double cop, double clr, rtrnd_via_t *via, rtrnd_net_t *net) { grbs_point_t *gpt; point_t *cpt; @@ -102,6 +115,7 @@ p->cpt = cpt; p->gpt = gpt; p->obj = via; + p->net = net; return cpt; } @@ -113,6 +127,7 @@ crbs->ctx = ctx; crbs->grbs.coll_report_cb = crbs_coll_report_cb; crbs->grbs.coll_ingore_tn_line= crbs_coll_ingore_tn_line_cb; + crbs->grbs.coll_ingore_tn_point = crbs_coll_ingore_tn_point_cb; crbs->grbs.user_data = crbs; htad_init(&crbs->addrs, htad_hash, grbs_addr_hash_keyeq); Index: trunk/src/plugins/rt_topo/crbs.h =================================================================== --- trunk/src/plugins/rt_topo/crbs.h (revision 1378) +++ trunk/src/plugins/rt_topo/crbs.h (revision 1379) @@ -37,6 +37,7 @@ rtrnd_any_obj_t *obj; point_t *cpt; grbs_point_t *gpt; + rtrnd_net_t *net; } crbs_point_t; typedef struct crbs_edge_s { @@ -69,7 +70,7 @@ extern grbs_2net_t tn_unknown; /* create a new point (e.g. for a via) in the triangulation and in grbs */ -point_t *crbs_make_point(crbs_t *crbs, double x, double y, double cop, double clr, rtrnd_via_t *via); +point_t *crbs_make_point(crbs_t *crbs, double x, double y, double cop, double clr, rtrnd_via_t *via, rtrnd_net_t *net); #define DIST_HEUR_MULT 1000.0 Index: trunk/src/plugins/rt_topo/crbs_cdt.c =================================================================== --- trunk/src/plugins/rt_topo/crbs_cdt.c (revision 1378) +++ trunk/src/plugins/rt_topo/crbs_cdt.c (revision 1379) @@ -54,7 +54,7 @@ } while(0) \ -static void long_constrained_edge(crbs_t *crbs, point_t *p1, point_t *p2, double maxlen2, double maxlen, double cop, double clr, int add_grbs, rtrnd_any_obj_t *obj) +static void long_constrained_edge(crbs_t *crbs, point_t *p1, point_t *p2, double maxlen2, double maxlen, double cop, double clr, int add_grbs, rtrnd_any_obj_t *obj, rtrnd_net_t *net) { edge_t *e; double dx = p2->pos.x - p1->pos.x, dy = p2->pos.y - p1->pos.y; @@ -78,7 +78,7 @@ for(n = 0; n < spn; n++) { x += dx; y += dy; - p = crbs_make_point(crbs, x, y, cop, clr, NULL); + p = crbs_make_point(crbs, x, y, cop, clr, NULL, net); if (p == NULL) continue; ADD_C_EDGE(lp, p); @@ -110,7 +110,7 @@ cdt_init(cdt, ctx->board->hdr.bbox.x1, ctx->board->hdr.bbox.y1, ctx->board->hdr.bbox.x2, ctx->board->hdr.bbox.y2); for(via = rtrnd_rtree_all_first(&it, &ctx->board->vias); via != NULL; via = rtrnd_rtree_all_next(&it)) - crbs_make_point(crbs, via->x, via->y, via->dia/2, via->clearance, via); + crbs_make_point(crbs, via->x, via->y, via->dia/2, via->clearance, via, via->hdr.net); for(obj = rtrnd_rtree_all_first(&it, &ly->objs); obj != NULL; obj = rtrnd_rtree_all_next(&it)) { switch(obj->hdr.type) { @@ -118,19 +118,19 @@ cop = obj->line.thickness/2; clr = obj->line.clearance; if (clr < 0) clr = 0; - p1 = crbs_make_point(crbs, obj->line.cline.p1.x, obj->line.cline.p1.y, cop, clr, NULL); + p1 = crbs_make_point(crbs, obj->line.cline.p1.x, obj->line.cline.p1.y, cop, clr, NULL, obj->hdr.net); if ((obj->line.cline.p1.x != obj->line.cline.p2.x) || (obj->line.cline.p1.y != obj->line.cline.p2.y)) { - p2 = crbs_make_point(crbs, obj->line.cline.p2.x, obj->line.cline.p2.y, cop, clr, NULL); - long_constrained_edge(crbs, p1, p2, maxl2, maxlen, cop, clr, 1, obj); + p2 = crbs_make_point(crbs, obj->line.cline.p2.x, obj->line.cline.p2.y, cop, clr, NULL, obj->hdr.net); + long_constrained_edge(crbs, p1, p2, maxl2, maxlen, cop, clr, 1, obj, obj->hdr.net); } break; case RTRND_POLY: clr = 0/*obj->poly.clearance*/; v = gdl_last(&obj->poly.rtpoly.lst); - p2 = crbs_make_point(crbs, v->x, v->y, 0, clr, NULL); + p2 = crbs_make_point(crbs, v->x, v->y, 0, clr, NULL, obj->hdr.net); for(v = gdl_first(&obj->poly.rtpoly.lst); v != NULL; v = gdl_next(&obj->poly.rtpoly.lst, v)) { - p1 = crbs_make_point(crbs, v->x, v->y, 0, clr, NULL); - long_constrained_edge(crbs, p1, p2, maxl2, maxlen, 0, clr, 1, obj); + p1 = crbs_make_point(crbs, v->x, v->y, 0, clr, NULL, obj->hdr.net); + long_constrained_edge(crbs, p1, p2, maxl2, maxlen, 0, clr, 1, obj, obj->hdr.net); p2 = p1; } break; @@ -177,7 +177,7 @@ } #warning TODO: this should be 0,0 for copper and clearance once grbs supports convex implicit attachments for(n = 0; n < np.used; n+=2) - crbs_make_point(crbs, np.array[n], np.array[n+1], rt_topo_cfg.wire_thick/2, rt_topo_cfg.wire_clr, NULL); + crbs_make_point(crbs, np.array[n], np.array[n+1], rt_topo_cfg.wire_thick/2, rt_topo_cfg.wire_clr, NULL, NULL); vtd0_uninit(&np); }