Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 19698) +++ trunk/src/obj_subc.c (revision 19699) @@ -1509,6 +1509,19 @@ pcb_r_insert_entry(data->subc_tree, (pcb_box_t *)subc); } +void pcb_subc_scale(pcb_data_t *data, pcb_subc_t *subc, double sx, double sy, double sth, int recurse) +{ + if ((data != NULL) && (data->subc_tree != NULL)) + pcb_r_delete_entry(data->subc_tree, (pcb_box_t *)subc); + + pcb_data_scale(subc->data, sx, sy, sth, recurse); + pcb_subc_bbox(subc); + + if ((data != NULL) && (data->subc_tree != NULL)) + pcb_r_insert_entry(data->subc_tree, (pcb_box_t *)subc); +} + + pcb_bool pcb_subc_change_side(pcb_subc_t **subc, pcb_coord_t yoff) { pcb_opctx_t ctx; Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 19698) +++ trunk/src/obj_subc.h (revision 19699) @@ -69,6 +69,10 @@ void pcb_subc_mirror(pcb_data_t *data, pcb_subc_t *subc, pcb_coord_t y_offs, pcb_bool smirror); +/* Scale coords/pos of a subc by sx,sy with thickness factor sth; + if recurse is non-zero, descend in subc-in-subc */ +void pcb_subc_scale(pcb_data_t *data, pcb_subc_t *subc, double sx, double sy, double sth, int recurse); + /* changes the side of the board a subc is on; returns pcb_true if done */ pcb_bool pcb_subc_change_side(pcb_subc_t **subc, pcb_coord_t yoff);