Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 32725) +++ trunk/src/obj_subc.c (revision 32726) @@ -853,6 +853,25 @@ pcb_subc_draw_origin(pcb_crosshair.GC, sc, DX, DY); } +pcb_layer_t *pcb_subc_alloc_layer_like(pcb_subc_t *subc, const pcb_layer_t *sl) +{ + pcb_layer_t *dl; + + if (subc->data->LayerN >= PCB_MAX_LAYER) + return NULL; + + dl = &subc->data->Layer[subc->data->LayerN++]; + dl->is_bound = 1; + dl->type = PCB_OBJ_LAYER; + memcpy(&dl->meta.bound, &sl->meta.bound, sizeof(sl->meta.bound)); + dl->name = rnd_strdup(sl->name); + dl->comb = sl->comb; + if (dl->meta.bound.real != NULL) + pcb_layer_link_trees(dl, dl->meta.bound.real); + + return dl; +} + #define MAYBE_KEEP_ID(dst, src) \ do { \ if ((keep_ids) && (dst != NULL)) \ Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 32725) +++ trunk/src/obj_subc.h (revision 32726) @@ -175,6 +175,10 @@ /* Copy layer objects from source layer sl to destination layer dl into dst_sc */ void pcb_subc_dup_layer_objs(pcb_subc_t *dst_sc, pcb_layer_t *dl, pcb_layer_t *sl, rnd_coord_t dx, rnd_coord_t dy, rnd_bool keep_ids); +/* Allocate and return a new layer in subc, copying binding and basic + properties from another subc layer (potentially from another subc) from sl */ +pcb_layer_t *pcb_subc_alloc_layer_like(pcb_subc_t *subc, const pcb_layer_t *sl); + /*** subc creation helpers ***/ /* Create the aux layer for a subc, set origin to ox;oy and rotation to rot */