Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 14504) +++ trunk/src/data.c (revision 14505) @@ -531,7 +531,28 @@ return pcb_data_normalize_(data, NULL); } +void pcb_data_set_parent_globals(pcb_data_t *data, pcb_data_t *new_parent) +{ + pcb_pin_t *via; + pcb_pstk_t *ps; + pcb_subc_t *sc; + gdl_iterator_t it; + pinlist_foreach(&data->Via, &it, via) { + via->parent_type = PCB_PARENT_DATA; + via->parent.data = new_parent; + } + padstacklist_foreach(&data->padstack, &it, ps) { + ps->parent_type = PCB_PARENT_DATA; + ps->parent.data = new_parent; + } + subclist_foreach(&data->subc, &it, sc) { + sc->parent_type = PCB_PARENT_DATA; + sc->parent.data = new_parent; + } +} + + extern pcb_opfunc_t MoveFunctions; void pcb_data_move(pcb_data_t *data, pcb_coord_t dx, pcb_coord_t dy) { Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 14504) +++ trunk/src/data.h (revision 14505) @@ -162,6 +162,9 @@ (e.g. is a global buffer) */ pcb_board_t *pcb_data_get_top(pcb_data_t *data); +/* Force-set the parent.data field of each global object in data (but not + the layers!) */ +void pcb_data_set_parent_globals(pcb_data_t *data, pcb_data_t *new_parent); void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs, pcb_bool text_too, pcb_bool pstk_smirror);