Index: trunk/src_plugins/rbs_routing/map.c =================================================================== --- trunk/src_plugins/rbs_routing/map.c (revision 38814) +++ trunk/src_plugins/rbs_routing/map.c (revision 38815) @@ -193,8 +193,7 @@ #define FIND_PT_DELTA 2 #define FIND_PT_DELTA2 RBSR_R2G(FIND_PT_DELTA * FIND_PT_DELTA) -/* Return the point that's close enough to cx;cy or NULL if nothing is close */ -RND_INLINE grbs_point_t *find_point_by_center(rbsr_map_t *rbs, rnd_coord_t cx_, rnd_coord_t cy_) +RND_INLINE grbs_point_t *rbsr_find_point_by_center(rbsr_map_t *rbs, rnd_coord_t cx_, rnd_coord_t cy_) { double cx = RBSR_R2G(cx_), cy = RBSR_R2G(cy_), bestd2 = FIND_PT_DELTA2+1; grbs_point_t *pt, *best= NULL; @@ -241,7 +240,7 @@ if (arc == NULL) return -32; - pt = find_point_by_center(rbs, arc->X, arc->Y); + pt = rbsr_find_point_by_center(rbs, arc->X, arc->Y); if (pt == NULL) return -64; Index: trunk/src_plugins/rbs_routing/map.h =================================================================== --- trunk/src_plugins/rbs_routing/map.h (revision 38814) +++ trunk/src_plugins/rbs_routing/map.h (revision 38815) @@ -37,3 +37,9 @@ void rbsr_map_debug_draw(rbsr_map_t *rbs, const char *fn); void rbsr_map_debug_dump(rbsr_map_t *rbs, const char *fn); + +/*** utility ***/ + +/* Return the point that's close enough to cx;cy or NULL if nothing is close */ +RND_INLINE grbs_point_t *rbsr_find_point_by_center(rbsr_map_t *rbs, rnd_coord_t cx, rnd_coord_t cy); + Index: trunk/src_plugins/rbs_routing/rbs_routing.c =================================================================== --- trunk/src_plugins/rbs_routing/rbs_routing.c (revision 38814) +++ trunk/src_plugins/rbs_routing/rbs_routing.c (revision 38815) @@ -38,9 +38,11 @@ #include "map.h" #include "stretch.h" +#include "seq.h" #include "map.c" #include "stretch.c" +#include "seq.c" static const char pcb_acts_RbsConnect[] = "RbsConnect()"; static const char pcb_acth_RbsConnect[] = "Make a new rubber band stretch connection between two points"; Index: trunk/src_plugins/rbs_routing/seq.c =================================================================== --- trunk/src_plugins/rbs_routing/seq.c (nonexistent) +++ trunk/src_plugins/rbs_routing/seq.c (revision 38815) @@ -0,0 +1,40 @@ +int rbsr_seq_begin_at(rbsr_seq_t *rbsq, pcb_board_t *pcb, rnd_layer_id_t lid, rnd_coord_t tx, rnd_coord_t ty, rnd_coord_t copper, rnd_coord_t clearance) +{ + grbs_point_t *start; + + rbsr_map_pcb(&rbsq->map, pcb, lid); + rbsr_map_debug_draw(&rbsq->map, "rbsq1.svg"); + rbsr_map_debug_dump(&rbsq->map, "rbsq1.dump"); + + rbsq->map.grbs.user_data = rbsq; +#if 0 + rbsq->map.grbs.coll_ingore_tn_line = coll_ingore_tn_line; + rbsq->map.grbs.coll_ingore_tn_arc = coll_ingore_tn_arc; + rbsq->map.grbs.coll_ingore_tn_point = coll_ingore_tn_point; +#endif + + start = rbsr_find_point_by_center(&rbsq->map, tx, ty); + if (start == NULL) { + rnd_message(RND_MSG_ERROR, "No suitable starting point\n"); + return -1; + } + + rbsq->tn = grbs_2net_new(&rbsq->map.grbs, RBSR_R2G(copper), RBSR_R2G(clearance)); + + rbsq->snap = grbs_snapshot_save(&rbsq->map.grbs); + + return 0; +} + + +int rbsr_seq_consider(rbsr_seq_t *rbsq, rnd_coord_t tx, rnd_coord_t ty) +{ + grbs_point_t *end; + + end = rbsr_find_point_by_center(&rbsq->map, tx, ty); + if (end != NULL) { + + } + + return -1; +} Index: trunk/src_plugins/rbs_routing/seq.h =================================================================== --- trunk/src_plugins/rbs_routing/seq.h (nonexistent) +++ trunk/src_plugins/rbs_routing/seq.h (revision 38815) @@ -0,0 +1,21 @@ +#define RBSR_SEQ_MAX 256 + +typedef struct rbsr_seq_s { + rbsr_map_t map; + grbs_2net_t *tn; + + grbs_addr_t path[RBSR_SEQ_MAX]; + long used; /* number of path items already accepted */ + grbs_addr_t consider; + + grbs_snapshot_t *snap; +} rbsr_seq_t; + + +/* Start seqing a routing from tx;ty; returns 0 on success */ +int rbsr_seq_begin_at(rbsr_seq_t *rbss, pcb_board_t *pcb, rnd_layer_id_t lid, rnd_coord_t tx, rnd_coord_t ty, rnd_coord_t copper, rnd_coord_t clearance); +void rbsr_seq_end(rbsr_seq_t *rbss); + +int rbsr_seq_consider(rbsr_seq_t *rbss, rnd_coord_t tx, rnd_coord_t ty); +void rbsr_seq_accept(rbsr_seq_t *rbss); +