Index: trunk/src_plugins/io_pads/delay_create.c =================================================================== --- trunk/src_plugins/io_pads/delay_create.c (revision 33733) +++ trunk/src_plugins/io_pads/delay_create.c (revision 33734) @@ -146,7 +146,9 @@ l->Point2.X = x2; l->Point2.Y = y2; pcb_line_bbox(l); - if (!dlcr->in_subc) + if (dlcr->subc_begin != NULL) + rnd_box_bump_box(&dlcr->subc_begin->val.subc_begin.bbox, &l->bbox_naked); + else rnd_box_bump_box(&dlcr->board_bbox, &l->bbox_naked); return obj; } @@ -165,7 +167,9 @@ a->StartAngle = start_deg; a->Delta = delta_deg; pcb_arc_bbox(a); - if (!dlcr->in_subc) + if (dlcr->subc_begin != NULL) + rnd_box_bump_box(&dlcr->subc_begin->val.subc_begin.bbox, &a->bbox_naked); + else rnd_box_bump_box(&dlcr->board_bbox, &a->bbox_naked); return obj; } @@ -183,7 +187,9 @@ t->Scale = scale; t->TextString = rnd_strdup(str); pcb_text_bbox(pcb_font(PCB, 0, 1), t); - if (!dlcr->in_subc) + if (dlcr->subc_begin != NULL) + rnd_box_bump_box(&dlcr->subc_begin->val.subc_begin.bbox, &t->bbox_naked); + else rnd_box_bump_box(&dlcr->board_bbox, &t->bbox_naked); return obj; } @@ -190,18 +196,17 @@ void pcb_dlcr_subc_begin(pcb_dlcr_t *dlcr) { - dlcr_new(dlcr, DLCR_SUBC_BEGIN); - dlcr->in_subc++; + assert(dlcr->subc_begin == NULL); + dlcr->subc_begin = dlcr_new(dlcr, DLCR_SUBC_BEGIN); } void pcb_dlcr_subc_end(pcb_dlcr_t *dlcr) { + assert(dlcr->subc_begin != NULL); dlcr_new(dlcr, DLCR_SUBC_END); - assert(dlcr->in_subc > 0); - dlcr->in_subc--; + dlcr->subc_begin = NULL; } - /* Look up a board layer using object's layer id or layer name */ static pcb_layer_t *pcb_dlcr_lookup_board_layer(pcb_board_t *pcb, pcb_dlcr_t *dlcr, pcb_dlcr_draw_t *obj, int *specd) { Index: trunk/src_plugins/io_pads/delay_create.h =================================================================== --- trunk/src_plugins/io_pads/delay_create.h (revision 33733) +++ trunk/src_plugins/io_pads/delay_create.h (revision 33734) @@ -3,6 +3,7 @@ #include #include "board.h" +#include "data.h" #include "layer.h" #include "obj_common.h" @@ -49,6 +50,10 @@ long layer_id; char *layer_name; } obj; + struct { + pcb_data_t pstks; + rnd_box_t bbox; + } subc_begin; /* in DLCR_SUBC_BEGIN */ } val; long loc_line; /* for debug */ gdl_elem_t link; @@ -59,7 +64,8 @@ vtp0_t id2layer; gdl_list_t drawing; /* of pcb_dlcr_draw_t; */ rnd_box_t board_bbox; - int in_subc; /* 0 when drawing on the board, non-0 in between DLCR_SUBC_BEGIN and DLCR_SUBC_END */ + pcb_dlcr_draw_t *subc_begin; /* NULL when drawing on the board, pointing to the SUBC_BEGIN node in between DLCR_SUBC_BEGIN and DLCR_SUBC_END */ + pcb_data_t pstks; /* config */ unsigned flip_y:1; /* if 1, mirror y coordinates over the X axis */