Index: trunk/src/search.c =================================================================== --- trunk/src/search.c (revision 29787) +++ trunk/src/search.c (revision 29788) @@ -903,9 +903,22 @@ /* --------------------------------------------------------------------------- * checks if an gfx crosses a rectangle (or gfx is within the rectangle) */ -pcb_bool pcb_is_gfx_in_rectangle(pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_gfx_t *gfx) +pcb_bool pcb_is_gfx_in_rectangle(const pcb_box_t *b, const pcb_gfx_t *gfx) { - TODO("gfx"); + pcb_line_t l; + int n, m; + + l.Thickness = 1; + for(n = 0; n < 4; n++) { + m = n+1; + if (m == 4) + m = 0; + l.Point1.X = gfx->cox[n]; l.Point1.Y = gfx->coy[n]; + l.Point2.X = gfx->cox[m]; l.Point2.Y = gfx->coy[m]; + if (PCB_LINE_TOUCHES_BOX(&l, b)) + return pcb_true; + } + return pcb_false; } Index: trunk/src/search.h =================================================================== --- trunk/src/search.h (revision 29787) +++ trunk/src/search.h (revision 29788) @@ -135,7 +135,7 @@ (pcb_is_arc_in_rectangle((b)->X2, (b)->Y2, (b)->X1, (b)->Y1, (a))) #define PCB_GFX_TOUCHES_BOX(a,b) \ - (pcb_is_gfx_in_rectangle((b)->X2, (b)->Y2, (b)->X1, (b)->Y1, (a))) + (pcb_is_gfx_in_rectangle((b), (a))) /* == the combination of *_IN_* and *_TOUCHES_*: use IN for positive boxes == */ @@ -179,7 +179,7 @@ pcb_bool pcb_is_line_in_rectangle(pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_line_t *Line); pcb_bool pcb_is_line_in_quadrangle(pcb_point_t p[4], pcb_line_t *Line); pcb_bool pcb_is_arc_in_rectangle(pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_arc_t *Arc); -pcb_bool pcb_is_gfx_in_rectangle(pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_gfx_t *gfx); +pcb_bool pcb_is_gfx_in_rectangle(const pcb_box_t *b, const pcb_gfx_t *gfx); pcb_bool pcb_is_point_in_line(pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Radius, pcb_any_line_t *Pad); pcb_bool pcb_is_point_in_box(pcb_coord_t X, pcb_coord_t Y, pcb_box_t *box, pcb_coord_t Radius);