Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 15153) +++ trunk/src/layer_grp.c (revision 15154) @@ -751,6 +751,21 @@ return -1; } +void pcb_layergrp_create_missing_substrate(pcb_board_t *pcb) +{ + pcb_layergrp_id_t g; + for(g = 0; g < pcb->LayerGroups.len-2; g++) { + pcb_layergrp_t *g0 = &pcb->LayerGroups.grp[g], *g1 = &pcb->LayerGroups.grp[g+1]; + if ((g < pcb->LayerGroups.len-3) && (g1->type & PCB_LYT_OUTLINE)) g1++; + if ((g0->type & PCB_LYT_COPPER) && (g1->type & PCB_LYT_COPPER)) { + pcb_layergrp_t *ng = pcb_layergrp_insert_after(pcb, g); + ng->type = PCB_LYT_INTERN | PCB_LYT_SUBSTRATE; + ng->name = pcb_strdup("implicit_subst"); + ng->valid = 1; + } + } +} + int pcb_layer_create_all_for_recipe(pcb_board_t *pcb, pcb_layer_t *layer, int num_layer) { int n, existing_intern = 0, want_intern = 0; Index: trunk/src/layer_grp.h =================================================================== --- trunk/src/layer_grp.h (revision 15153) +++ trunk/src/layer_grp.h (revision 15154) @@ -161,6 +161,11 @@ not removing layers or groups) */ void pcb_layergrp_upgrade_to_pstk(pcb_board_t *pcb); +/* Compatibility helper: insert a substrate group in between any two adjacent + copper groups. */ +void pcb_layergrp_create_missing_substrate(pcb_board_t *pcb); + + /********* OBSOLETE functions, do not use in new code *********/ /* parses the group definition string which is a colon separated list of comma separated layer numbers (1,2,b:4,6,8,t); oldfmt is 0 or 1