Index: trunk/src_plugins/io_pads/write.c =================================================================== --- trunk/src_plugins/io_pads/write.c (revision 35046) +++ trunk/src_plugins/io_pads/write.c (revision 35047) @@ -464,26 +464,29 @@ rnd_fprintf(wctx->f, "\r\n%-16s M 1000 1000 %ld %ld %ld %ld %ld\r\n", id, num_pcs, num_terms, num_stacks, num_texts, num_labels); - for(o = pcb_data_first(&it, proto->data, PCB_OBJ_CLASS_REAL); o != NULL; o = pcb_data_next(&it)) { + /* write pieces */ + for(o = pcb_data_first(&it, proto->data, PCB_OBJ_ARC | PCB_OBJ_LINE); o != NULL; o = pcb_data_next(&it)) { + int plid = 0; + pcb_layer_type_t lyt; + if (o->parent.layer == proto->aux_layer) continue; - if ((o->type == PCB_OBJ_ARC) || (o->type == PCB_OBJ_LINE)) { - pcb_layer_type_t lyt = pcb_layer_flags_(o->parent.layer); - int plid = 0; - if (lyt & PCB_LYT_TOP) plid = 1; - else if (lyt & PCB_LYT_TOP) plid = 2; - if (!(lyt & PCB_LYT_SILK) || (plid == 0)) { - char *tmp = rnd_strdup_printf("Footprint of subcircuit %s contains lines/arcs not on top or bottom silk\n", proto->refdes); - pcb_io_incompat_save(wctx->pcb->Data, NULL, "subc-proto", tmp, "Moved to top silk."); - free(tmp); - plid = 1; - } - if (o->type == PCB_OBJ_ARC) - pads_write_piece_arc(wctx, (pcb_arc_t *)o, plid); - else if (o->type == PCB_OBJ_LINE) - pads_write_piece_line(wctx, (pcb_line_t *)o, plid); + lyt = pcb_layer_flags_(o->parent.layer); + + + if (lyt & PCB_LYT_TOP) plid = 1; + else if (lyt & PCB_LYT_TOP) plid = 2; + if (!(lyt & PCB_LYT_SILK) || (plid == 0)) { + char *tmp = rnd_strdup_printf("Footprint of subcircuit %s contains lines/arcs not on top or bottom silk\n", proto->refdes); + pcb_io_incompat_save(wctx->pcb->Data, NULL, "subc-proto", tmp, "Moved to top silk."); + free(tmp); + plid = 1; } + if (o->type == PCB_OBJ_ARC) + pads_write_piece_arc(wctx, (pcb_arc_t *)o, plid); + else if (o->type == PCB_OBJ_LINE) + pads_write_piece_line(wctx, (pcb_line_t *)o, plid); } rnd_fprintf(wctx->f, "\r\n");