Index: trunk/src_plugins/millpath/millpath.c =================================================================== --- trunk/src_plugins/millpath/millpath.c (revision 28448) +++ trunk/src_plugins/millpath/millpath.c (revision 28449) @@ -46,9 +46,10 @@ static const char pcb_acth_mill[] = "Calculate toolpath for milling away copper"; fgw_error_t pcb_act_mill(fgw_arg_t *res, int argc, fgw_arg_t *argv) { + pcb_board_t *pcb = (pcb_board_t *)PCB_ACT_HIDLIB; ctx.edge_clearance = PCB_MM_TO_COORD(0.05); ctx.tools = &tools; - PCB_ACT_IRES(pcb_tlp_mill_copper_layer(&ctx, PCB_CURRLAYER(PCB))); + PCB_ACT_IRES(pcb_tlp_mill_copper_layer(pcb, &ctx, pcb_get_layergrp(pcb, PCB_CURRLAYER(PCB)->meta.real.grp))); return 0; } Index: trunk/src_plugins/millpath/toolpath.c =================================================================== --- trunk/src_plugins/millpath/toolpath.c (revision 28448) +++ trunk/src_plugins/millpath/toolpath.c (revision 28449) @@ -183,7 +183,7 @@ pcb_r_end(&it); } -static void setup_ui_layers(pcb_board_t *pcb, pcb_tlp_session_t *result, pcb_layer_t *layer) +static void setup_ui_layers(pcb_board_t *pcb, pcb_tlp_session_t *result, pcb_layergrp_t *grp) { gdl_iterator_t it; pcb_line_t *line; @@ -216,16 +216,14 @@ } } -static void setup_remove_poly(pcb_board_t *pcb, pcb_tlp_session_t *result, pcb_layer_t *layer) +static void setup_remove_poly(pcb_board_t *pcb, pcb_tlp_session_t *result, pcb_layergrp_t *grp) { int has_otl; pcb_layergrp_id_t i; pcb_layergrp_t *g; - assert(!layer->is_bound); + result->grp = grp; - result->grp = pcb_get_layergrp(pcb, layer->meta.real.grp); - has_otl = 0; for(i = 0, g = pcb->LayerGroups.grp; i < pcb->LayerGroups.len; i++,g++) { if ((PCB_LAYER_IS_OUTLINE(g->ltype, g->purpi)) && (!pcb_layergrp_is_pure_empty(pcb, i))) { @@ -278,8 +276,17 @@ for(i = 0, g = pcb->LayerGroups.grp; i < pcb->LayerGroups.len; i++,g++) if (PCB_LAYER_IS_OUTLINE(g->ltype, g->purpi)) sub_group_all(pcb, result, g, 1); - sub_global_all(pcb, result, layer); + + { /* apply all layers within the group */ + long n; + for(n = 0; n < grp->len; n++) { + pcb_layer_t *ly = pcb_get_layer(pcb->Data, grp->lid[n]); + if (ly != NULL) + sub_global_all(pcb, result, ly); + } + } + /* remove fill from remain */ { pcb_polyarea_t *rp; @@ -436,13 +443,12 @@ } -int pcb_tlp_mill_copper_layer(pcb_tlp_session_t *result, pcb_layer_t *layer) +int pcb_tlp_mill_copper_layer(pcb_board_t *pcb, pcb_tlp_session_t *result, pcb_layergrp_t *grp) { - pcb_board_t *pcb = pcb_data_get_top(layer->parent.data); long rem; - setup_ui_layers(pcb, result, layer); - setup_remove_poly(pcb, result, layer); + setup_ui_layers(pcb, result, grp); + setup_remove_poly(pcb, result, grp); trace_contour(pcb, result, 0, 1000); Index: trunk/src_plugins/millpath/toolpath.h =================================================================== --- trunk/src_plugins/millpath/toolpath.h (revision 28448) +++ trunk/src_plugins/millpath/toolpath.h (revision 28449) @@ -71,4 +71,4 @@ /* TODO: list on segments */ }; -int pcb_tlp_mill_copper_layer(pcb_tlp_session_t *result, pcb_layer_t *layer); +int pcb_tlp_mill_copper_layer(pcb_board_t *pcb, pcb_tlp_session_t *result, pcb_layergrp_t *grp);