Index: djopt.c =================================================================== --- djopt.c (revision 6159) +++ djopt.c (revision 6160) @@ -469,7 +469,7 @@ { line_s *ls; - if (layer >= pcb_max_copper_layer) + if (!(pcb_layer_flags(layer) & PCB_LYT_COPPER)) dj_abort("layer %d\n", layer); if (example == NULL) @@ -1737,11 +1737,14 @@ counts[c->lines[i]->layer]++; directions[c->lines[i]->layer] |= o; } - for (o = 0, i = 0; i < pcb_max_copper_layer; i++) + for (o = 0, i = 0; i < pcb_max_layer; i++) { + if (!(pcb_layer_flags(i) & PCB_LYT_COPPER)) + continue; if (counts[i] == 1) { o = directions[i]; break; } + } switch (o) { case LEFT: case RIGHT: @@ -1754,10 +1757,12 @@ default: continue; } - for (i = 0; i < pcb_max_copper_layer; i++) + for (i = 0; i < pcb_max_layer; i++) { + if (!(pcb_layer_flags(i) & PCB_LYT_COPPER)) + continue; if (counts[i] && directions[i] != o && directions[i] != oboth) goto vianudge_continue; - + } c2 = 0; for (i = 0; i < c->n_lines; i++) { int ll = line_length(c->lines[i]); @@ -2288,7 +2293,9 @@ } dprintf("%s x %#mS-%#mS y %#mS-%#mS\n", corner_name(c), left, right, bottom, top); - for (l = 0; l <= pcb_max_copper_layer; l++) { + for (l = 0; l <= pcb_max_layer; l++) { + if (!(pcb_layer_flags(l) & PCB_LYT_COPPER)) + continue; best_dist[l] = close * 2; best_c[l] = 0; } @@ -2321,10 +2328,10 @@ } } if (!got_one && c->n_lines == (c->pad ? 1 : 0)) { - for (l = 0; l <= pcb_max_copper_layer; l++) + for (l = 0; l <= pcb_max_layer; l++) if (best_c[l]) dprintf("best[%d] = %s\n", l, corner_name(best_c[l])); - for (l = 0; l <= pcb_max_copper_layer; l++) + for (l = 0; l <= pcb_max_layer; l++) if (best_c[l]) { dprintf("move %s to %s\n", corner_name(best_c[l]), corner_name(c)); connect_corners(best_c[l], c); @@ -2464,7 +2471,7 @@ pcb_layer_stack_t *l = &(PCB->LayerGroups); solder_layer = component_layer = -1; - for (i = 0; i < pcb_max_copper_layer; i++) { + for (i = 0; i < pcb_max_layer; i++) { layer_type[i] = 0; layer_groupings[i] = 0; } @@ -2478,7 +2485,7 @@ f |= LT_COMPONENT; } for (j = 0; j < l->grp[i].len; j++) { - if (l->grp[i].lid[j] < pcb_max_copper_layer) { + if (l->grp[i].lid[j] < pcb_max_layer) { layer_type[l->grp[i].lid[j]] |= f; layer_groupings[l->grp[i].lid[j]] = i; if (solder_layer == -1 && f == LT_SOLDER) @@ -2606,9 +2613,12 @@ return 0; } - for (layn = 0; layn < pcb_max_copper_layer; layn++) { + for (layn = 0; layn < pcb_max_layer; layn++) { pcb_layer_t *layer = LAYER_PTR(layn); + if (!(pcb_layer_flags(layn) & PCB_LYT_COPPER)) + continue; + PCB_LINE_LOOP(layer); { line_s *ls;