Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 6126) +++ trunk/src/crosshair.c (revision 6127) @@ -995,7 +995,7 @@ CLayer = pcb_layer_get_group(pcb_component_silk_layer); desired_group = PCB_FLAG_TEST(PCB_FLAG_ONSOLDER, pad) ? SLayer : CLayer; - GROUP_LOOP(PCB->Data, desired_group); + PCB_COPPER_GROUP_LOOP(PCB->Data, desired_group); { if (layer == desired_layer) { found_our_layer = pcb_true; Index: trunk/src/layer_grp.h =================================================================== --- trunk/src/layer_grp.h (revision 6126) +++ trunk/src/layer_grp.h (revision 6127) @@ -87,7 +87,7 @@ may need this. */ int pcb_layer_parse_group_string(const char *s, pcb_layer_stack_t *LayerGroup, int LayerN, int oldfmt); -#define GROUP_LOOP(data, group) do { \ +#define PCB_COPPER_GROUP_LOOP(data, group) do { \ pcb_cardinal_t entry; \ for (entry = 0; entry < ((pcb_board_t *)(data->pcb))->LayerGroups.grp[(group)].len; entry++) \ { \ @@ -94,7 +94,7 @@ pcb_layer_t *layer; \ pcb_layer_id_t number; \ number = ((pcb_board_t *)(data->pcb))->LayerGroups.grp[(group)].lid[entry]; \ - if (number >= pcb_max_copper_layer) \ + if (!(pcb_layer_flags(number) & PCB_LYT_COPPER)) \ continue; \ layer = &data->Layer[number]; Index: trunk/src/obj_elem.c =================================================================== --- trunk/src/obj_elem.c (revision 6126) +++ trunk/src/obj_elem.c (revision 6127) @@ -314,7 +314,7 @@ /* get the component-side SM pads */ group = pcb_layer_get_group(silk_layer); - GROUP_LOOP(Buffer->Data, group); + PCB_COPPER_GROUP_LOOP(Buffer->Data, group); { char num[8]; PCB_LINE_LOOP(layer); Index: trunk/src/obj_line_drcenf.c =================================================================== --- trunk/src/obj_line_drcenf.c (revision 6126) +++ trunk/src/obj_line_drcenf.c (revision 6127) @@ -360,7 +360,7 @@ if (info.solder || comp == group) pcb_r_search(PCB->Data->pad_tree, &line2.BoundingBox, NULL, drcPad_callback, &info, NULL); } - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { info.line = &line1; pcb_r_search(layer->line_tree, &line1.BoundingBox, NULL, drcLine_callback, &info, NULL); @@ -450,7 +450,7 @@ pcb_r_search(PCB->Data->pin_tree, &line.BoundingBox, NULL, drcVia_callback, &info, NULL); if (info.solder || comp == group) pcb_r_search(PCB->Data->pad_tree, &line.BoundingBox, NULL, drcPad_callback, &info, NULL); - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { info.line = &line; pcb_r_search(layer->line_tree, &line.BoundingBox, NULL, drcLine_callback, &info, NULL); Index: trunk/src/polygon.c =================================================================== --- trunk/src/polygon.c (revision 6126) +++ trunk/src/polygon.c (revision 6127) @@ -1030,7 +1030,7 @@ pcb_r_search(Data->pad_tree, ®ion, NULL, pad_sub_callback, &info, &seen); r += seen; } - GROUP_LOOP(Data, group); + PCB_COPPER_GROUP_LOOP(Data, group); { pcb_r_search(layer->line_tree, ®ion, NULL, line_sub_callback, &info, &seen); r += seen; @@ -1489,7 +1489,7 @@ PCB_END_LOOP; } else { - GROUP_LOOP(Data, pcb_layer_get_group(pcb_layer_id(Data, ((pcb_layer_t *) ptr1)))); + PCB_COPPER_GROUP_LOOP(Data, pcb_layer_get_group(pcb_layer_id(Data, ((pcb_layer_t *) ptr1)))); { info.layer = layer; pcb_r_search(layer->polygon_tree, &sb, NULL, plow_callback, &info, &seen); @@ -1507,7 +1507,7 @@ /* silk doesn't plow */ if (pcb_layer_id(Data, (pcb_layer_t *) ptr1) >= pcb_max_copper_layer) return 0; - GROUP_LOOP(Data, pcb_layer_get_group(pcb_layer_id(Data, ((pcb_layer_t *) ptr1)))); + PCB_COPPER_GROUP_LOOP(Data, pcb_layer_get_group(pcb_layer_id(Data, ((pcb_layer_t *) ptr1)))); { info.layer = layer; pcb_r_search(layer->polygon_tree, &sb, NULL, plow_callback, &info, &seen); @@ -1519,7 +1519,7 @@ { pcb_layergrp_id_t group = pcb_layer_get_group(PCB_FLAG_TEST(PCB_FLAG_ONSOLDER, (pcb_pad_t *) ptr2) ? pcb_solder_silk_layer : pcb_component_silk_layer); - GROUP_LOOP(Data, group); + PCB_COPPER_GROUP_LOOP(Data, group); { info.layer = layer; pcb_r_search(layer->polygon_tree, &sb, NULL, plow_callback, &info, &seen); Index: trunk/src_plugins/autoroute/autoroute.c =================================================================== --- trunk/src_plugins/autoroute/autoroute.c (revision 6126) +++ trunk/src_plugins/autoroute/autoroute.c (revision 6127) @@ -914,7 +914,7 @@ /* initialize pointer vectors */ for (i = 0; i < pcb_max_group; i++) { vtptr_init(&layergroupboxes[i]); - GROUP_LOOP(PCB->Data, i); + PCB_COPPER_GROUP_LOOP(PCB->Data, i); { if (linelist_length(&layer->Line) || arclist_length(&layer->Arc)) usedGroup[i] = pcb_true; Index: trunk/src_plugins/export_dsn/dsn.c =================================================================== --- trunk/src_plugins/export_dsn/dsn.c (revision 6126) +++ trunk/src_plugins/export_dsn/dsn.c (revision 6127) @@ -192,7 +192,7 @@ "before the bottom layer group. DSN files must have the " "bottom layer last.\n", first_layer->Name); } - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { if (entry > 0) { pcb_message(PCB_MSG_WARNING, "WARNING! DSN export squashed layer \"%s\" into layer " Index: trunk/src_plugins/rubberband_orig/rubberband.c =================================================================== --- trunk/src_plugins/rubberband_orig/rubberband.c (revision 6126) +++ trunk/src_plugins/rubberband_orig/rubberband.c (revision 6127) @@ -230,7 +230,7 @@ group = pcb_layer_get_group(i); /* check all visible layers in the same group */ - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { /* check all visible lines of the group member */ info.layer = layer; @@ -386,7 +386,7 @@ info.Y = LinePoint->Y; group = pcb_layer_get_group_(Layer); - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { /* check all visible lines of the group member */ if (layer->On) { @@ -422,7 +422,7 @@ info.Y = ey; group = pcb_layer_get_group_(Layer); - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { /* check all visible lines of the group member */ if (layer->On) { @@ -444,7 +444,7 @@ /* lookup layergroup and check all visible lines in this group */ group = pcb_layer_get_group_(Layer); - GROUP_LOOP(PCB->Data, group); + PCB_COPPER_GROUP_LOOP(PCB->Data, group); { if (layer->On) { pcb_coord_t thick; Index: trunk/src_plugins/toporouter/toporouter.c =================================================================== --- trunk/src_plugins/toporouter/toporouter.c (revision 6126) +++ trunk/src_plugins/toporouter/toporouter.c (revision 6127) @@ -2823,7 +2823,7 @@ #endif*/ read_pads(r, cur_layer, group); - GROUP_LOOP(PCB->Data, group) { + PCB_COPPER_GROUP_LOOP(PCB->Data, group) { #ifdef DEBUG_IMPORT printf("reading lines from layer %d into group %d\n", number, group);