Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 12163) +++ trunk/src/board.c (revision 12164) @@ -323,7 +323,7 @@ pcb_box_t b; int chg = 0; - if (pcb_data_bbox(&b, pcb->Data) == NULL) + if (pcb_data_bbox(&b, pcb->Data, pcb_false) == NULL) return -1; if ((b.X2 - b.X1) > pcb->MaxWidth) { Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 12163) +++ trunk/src/buffer.c (revision 12164) @@ -93,7 +93,7 @@ */ int pcb_set_buffer_bbox(pcb_buffer_t *Buffer) { - pcb_box_t tmp, *box = pcb_data_bbox(&tmp, Buffer->Data); + pcb_box_t tmp, *box = pcb_data_bbox(&tmp, Buffer->Data, pcb_false); if (box) { Buffer->BoundingBox = *box; Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 12163) +++ trunk/src/data.c (revision 12164) @@ -284,7 +284,7 @@ return (hasNoObjects); } -pcb_box_t *pcb_data_bbox(pcb_box_t *out, pcb_data_t *Data) +pcb_box_t *pcb_data_bbox(pcb_box_t *out, pcb_data_t *Data, pcb_bool ignore_floaters) { /* preset identifiers with highest and lowest possible values */ out->X1 = out->Y1 = PCB_MAX_COORD; @@ -294,43 +294,50 @@ PCB_VIA_LOOP(Data); { pcb_pin_bbox(via); - pcb_box_bump_box(out, &via->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, via)) + pcb_box_bump_box(out, &via->BoundingBox); } PCB_END_LOOP; PCB_ELEMENT_LOOP(Data); { pcb_element_bbox(Data, element, pcb_font(PCB, 0, 0)); - pcb_box_bump_box(out, &element->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, element)) + pcb_box_bump_box(out, &element->BoundingBox); } PCB_END_LOOP; PCB_SUBC_LOOP(Data); { pcb_subc_bbox(subc); - pcb_box_bump_box(out, &subc->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, subc)) + pcb_box_bump_box(out, &subc->BoundingBox); } PCB_END_LOOP; PCB_LINE_ALL_LOOP(Data); { pcb_line_bbox(line); - pcb_box_bump_box(out, &line->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, line)) + pcb_box_bump_box(out, &line->BoundingBox); } PCB_ENDALL_LOOP; PCB_ARC_ALL_LOOP(Data); { pcb_arc_bbox(arc); - pcb_box_bump_box(out, &arc->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, arc)) + pcb_box_bump_box(out, &arc->BoundingBox); } PCB_ENDALL_LOOP; PCB_TEXT_ALL_LOOP(Data); { pcb_text_bbox(pcb_font(PCB, text->fid, 1), text); - pcb_box_bump_box(out, &text->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, text)) + pcb_box_bump_box(out, &text->BoundingBox); } PCB_ENDALL_LOOP; PCB_POLY_ALL_LOOP(Data); { pcb_poly_bbox(polygon); - pcb_box_bump_box(out, &polygon->BoundingBox); + if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, polygon)) + pcb_box_bump_box(out, &polygon->BoundingBox); } PCB_ENDALL_LOOP; return (pcb_data_is_empty(Data) ? NULL : out); @@ -423,7 +430,7 @@ if (data_bbox == NULL) { data_bbox = &tmp; - if (pcb_data_bbox(data_bbox, data) == NULL) + if (pcb_data_bbox(data_bbox, data, pcb_false) == NULL) return -1; } Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 12163) +++ trunk/src/data.h (revision 12164) @@ -128,7 +128,7 @@ /* gets minimum and maximum coordinates * returns NULL if layout is empty */ -pcb_box_t *pcb_data_bbox(pcb_box_t *out, pcb_data_t *Data); +pcb_box_t *pcb_data_bbox(pcb_box_t *out, pcb_data_t *Data, pcb_bool ignore_floaters); /* Make sure all layers of data has their .parent field pointing to the data */ void pcb_data_set_layer_parents(pcb_data_t *data); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 12163) +++ trunk/src/obj_subc.c (revision 12164) @@ -704,7 +704,7 @@ void pcb_subc_bbox(pcb_subc_t *sc) { - pcb_data_bbox(&sc->BoundingBox, sc->data); + pcb_data_bbox(&sc->BoundingBox, sc->data, pcb_true); } Index: trunk/src_plugins/autocrop/autocrop.c =================================================================== --- trunk/src_plugins/autocrop/autocrop.c (revision 12163) +++ trunk/src_plugins/autocrop/autocrop.c (revision 12164) @@ -191,7 +191,7 @@ pcb_coord_t dx, dy, pad; pcb_box_t tmp, *box; - box = pcb_data_bbox(&tmp, PCB->Data); /* handy! */ + box = pcb_data_bbox(&tmp, PCB->Data, pcb_false); /* handy! */ if (!box || (box->X1 == box->X2 || box->Y1 == box->Y2)) { /* board would become degenerate */ return 0; Index: trunk/src_plugins/export_png/png.c =================================================================== --- trunk/src_plugins/export_png/png.c (revision 12163) +++ trunk/src_plugins/export_png/png.c (revision 12164) @@ -548,7 +548,7 @@ region.Y2 = PCB->MaxHeight; if (options[HA_only_visible].int_value) - bounds = pcb_data_bbox(&tmp, PCB->Data); + bounds = pcb_data_bbox(&tmp, PCB->Data, pcb_false); else bounds = ®ion; @@ -783,7 +783,7 @@ /* figure out width and height of the board */ if (options[HA_only_visible].int_value) { - bbox = pcb_data_bbox(&tmp, PCB->Data); + bbox = pcb_data_bbox(&tmp, PCB->Data, pcb_false); x_shift = bbox->X1; y_shift = bbox->Y1; h = bbox->Y2 - bbox->Y1; Index: trunk/src_plugins/export_ps/eps.c =================================================================== --- trunk/src_plugins/export_ps/eps.c (revision 12163) +++ trunk/src_plugins/export_ps/eps.c (revision 12164) @@ -200,7 +200,7 @@ region.Y2 = PCB->MaxHeight; if (options[HA_only_visible].int_value) - bounds = pcb_data_bbox(&tmp, PCB->Data); + bounds = pcb_data_bbox(&tmp, PCB->Data, pcb_false); else bounds = ®ion; Index: trunk/src_plugins/io_autotrax/read.c =================================================================== --- trunk/src_plugins/io_autotrax/read.c (revision 12163) +++ trunk/src_plugins/io_autotrax/read.c (revision 12164) @@ -1081,7 +1081,7 @@ pcb_hid_actionl("ElementList", "Done", NULL); } fclose(FP); - box = pcb_data_bbox(&board_size, Ptr->Data); + box = pcb_data_bbox(&board_size, Ptr->Data, pcb_false); if (st.ignored_keepout_element) { pcb_message(PCB_MSG_ERROR, "Ignored %d keepout track(s) on auto/easytrax layer 12\n", st.ignored_keepout_element); } Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 12163) +++ trunk/src_plugins/io_lihata/read.c (revision 12164) @@ -829,7 +829,7 @@ for(n = 0; n < sc->data->LayerN; n++) sc->data->Layer[n].is_bound = 1; - pcb_data_bbox(&sc->BoundingBox, sc->data); + pcb_data_bbox(&sc->BoundingBox, sc->data, pcb_false); if (!dt->subc_tree) dt->subc_tree = pcb_r_create_tree(NULL, 0, 0);