Index: rubberband.c =================================================================== --- rubberband.c (revision 14955) +++ rubberband.c (revision 14956) @@ -387,6 +387,7 @@ pcb_layergrp_id_t group; pcb_pin_t *pin; pcb_pad_t *pad; + pcb_pstk_t *pstk; pcb_point_t *point; rubber_ctx_t *rbnd; int delta_index; @@ -423,6 +424,12 @@ rat->Point2.Y == (i->pad->Point1.Y + i->pad->Point2.Y) / 2 && rat->group2 == i->group) pcb_rubber_band_create(rbnd, NULL, (pcb_line_t *) rat, 1,i->delta_index); break; + case PCB_TYPE_PSTK: + if (rat->Point1.X == i->pstk->x && rat->Point1.Y == i->pstk->y) + pcb_rubber_band_create(rbnd, NULL, (pcb_line_t *) rat, 0,i->delta_index); + else if (rat->Point2.X == i->pstk->x && rat->Point2.Y == i->pstk->y) + pcb_rubber_band_create(rbnd, NULL, (pcb_line_t *) rat, 1,i->delta_index); + break; case PCB_TYPE_LINE_POINT: if (rat->group1 == i->group && rat->Point1.X == i->point->X && rat->Point1.Y == i->point->Y) pcb_rubber_band_create(rbnd, NULL, (pcb_line_t *) rat, 0,i->delta_index); @@ -464,6 +471,17 @@ pcb_r_search(PCB->Data->rat_tree, &Pin->BoundingBox, NULL, rat_callback, &info, NULL); } +static void CheckPadstackForRat(rubber_ctx_t *rbnd, pcb_pstk_t *pstk) +{ + struct rinfo info; + + info.type = PCB_TYPE_PSTK; + info.pstk = pstk; + info.rbnd = rbnd; + info.delta_index = 0; + pcb_r_search(PCB->Data->rat_tree, &pstk->BoundingBox, NULL, rat_callback, &info, NULL); +} + static void CheckLinePointForRat(rubber_ctx_t *rbnd, pcb_layer_t *Layer, pcb_point_t *Point) { struct rinfo info; @@ -1085,6 +1103,18 @@ break; } + case PCB_TYPE_SUBC: + { + pcb_subc_t *subc = (pcb_subc_t *) Ptr1; + + PCB_PADSTACK_LOOP(subc->data); + { + CheckPadstackForRat(rbnd, padstack); + } + PCB_END_LOOP; + break; + } + case PCB_TYPE_LINE: { pcb_layer_t *layer = (pcb_layer_t *) Ptr1;