Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 28862) +++ trunk/src/obj_subc.c (revision 28863) @@ -157,6 +157,28 @@ return dst; } +pcb_layer_t *pcb_subc_layer_create(pcb_subc_t *sc, const char *name, pcb_layer_type_t type, pcb_layer_combining_t comb, int stack_offs, const char *purpose) +{ + pcb_layer_t *dst = &sc->data->Layer[sc->data->LayerN++]; + + dst->is_bound = 1; + dst->meta.bound.user_specified = 0; + dst->meta.bound.user_lid = -1; + dst->meta.bound.type = type; + dst->comb = comb; + dst->meta.bound.stack_offs = stack_offs; + if (purpose != NULL) + dst->meta.bound.purpose = pcb_strdup(purpose); + else + dst->meta.bound.purpose = NULL; + + dst->parent.data = sc->data; + dst->parent_type = PCB_PARENT_DATA; + dst->type = PCB_OBJ_LAYER; + dst->name = pcb_strdup(name); + return dst; +} + static pcb_line_t *add_aux_line(pcb_layer_t *aux, const char *key, const char *val, pcb_coord_t x1, pcb_coord_t y1, pcb_coord_t x2, pcb_coord_t y2) { pcb_line_t *l = pcb_line_new(aux, x1, y1, x2, y2, PCB_MM_TO_COORD(0.1), 0, pcb_no_flags()); Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 28862) +++ trunk/src/obj_subc.h (revision 28863) @@ -172,7 +172,10 @@ /* Find and save the aux layer in the cache, of it exists */ void pcb_subc_cache_find_aux(pcb_subc_t *sc); +/* Create (and append) a new bound layer to a subc */ +pcb_layer_t *pcb_subc_layer_create(pcb_subc_t *sc, const char *name, pcb_layer_type_t type, pcb_layer_combining_t comb, int stack_offs, const char *purpose); + pcb_subc_t *pcb_subc_dup_at(pcb_board_t *pcb, pcb_data_t *dst, pcb_subc_t *src, pcb_coord_t dx, pcb_coord_t dy, pcb_bool keep_ids); /* Replace dst with a copy of src in place (preserving location and orientation