Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 38446) +++ trunk/src/data.c (revision 38447) @@ -240,10 +240,24 @@ rnd_box_t *pcb_data_bbox(rnd_box_t *out, pcb_data_t *Data, rnd_bool ignore_floaters) { + pcb_layer_t *aux = NULL; + /* preset identifiers with highest and lowest possible values */ out->X1 = out->Y1 = RND_MAX_COORD; out->X2 = out->Y2 = -RND_MAX_COORD; + if (ignore_floaters) { + long n; + + for(n = 0; n < Data->LayerN; n++) { + if (strcmp(Data->Layer[n].name, SUBC_AUX_NAME) == 0) { + aux = Data->Layer + n; + break; + } + } + } + + /* now scan for the lowest/highest X and Y coordinate */ PCB_PADSTACK_LOOP(Data); { @@ -262,6 +276,7 @@ PCB_LINE_ALL_LOOP(Data); { pcb_line_bbox(line); + if (ignore_floaters && (aux != NULL) && (line->parent.layer == aux)) continue; /* ignore aux layer objects */ if (!ignore_floaters || !PCB_FLAG_TEST(PCB_FLAG_FLOATER, line)) rnd_box_bump_box(out, &line->BoundingBox); } Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 38446) +++ trunk/src/data.h (revision 38447) @@ -130,10 +130,11 @@ rnd_bool pcb_data_is_empty(pcb_data_t *); -/* gets minimum and maximum coordinates - * returns NULL if layout is empty */ -rnd_box_t *pcb_data_bbox(rnd_box_t *out, pcb_data_t *Data, rnd_bool ignore_floaters); -rnd_box_t *pcb_data_bbox_naked(rnd_box_t *out, pcb_data_t *Data, rnd_bool ignore_floaters); +/* Gets minimum and maximum coordinates; returns NULL if data is empty; + If ignore_floaters_and_aux is true, floaters and aux layer objects + (unity vectors) are not considered for the bbox. */ +rnd_box_t *pcb_data_bbox(rnd_box_t *out, pcb_data_t *Data, rnd_bool ignore_floaters_and_aux); +rnd_box_t *pcb_data_bbox_naked(rnd_box_t *out, pcb_data_t *Data, rnd_bool ignore_floaters_and_aux); /* Make sure all layers of data has their .parent field pointing to the data */ void pcb_data_set_layer_parents(pcb_data_t *data); @@ -253,4 +254,6 @@ bytes long. Returns NULL if data is not the pcb or a buffer. */ const char *pcb_data_to_name(pcb_board_t *pcb, pcb_data_t *data, char *buf, int buf_len); +#define SUBC_AUX_NAME "subc-aux" + #endif Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 38446) +++ trunk/src/obj_subc.c (revision 38447) @@ -63,8 +63,6 @@ #include #include "extobj.h" -#define SUBC_AUX_NAME "subc-aux" - static const char core_subc_cookie[] = "core-subc"; void pcb_subc_reg(pcb_data_t *data, pcb_subc_t *subc)