Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 13405) +++ trunk/src/buffer.c (revision 13406) @@ -439,7 +439,7 @@ /* set buffer offset to 'mark' position */ Buffer->X = PCB_SWAP_X(Buffer->X); Buffer->Y = PCB_SWAP_Y(Buffer->Y); - pcb_data_mirror(Buffer->Data, 0, pcb_false); + pcb_data_mirror(Buffer->Data, 0, pcb_false, pcb_false); pcb_set_buffer_bbox(Buffer); } Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 13405) +++ trunk/src/data.c (revision 13406) @@ -426,7 +426,7 @@ return NULL; } -void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs, pcb_bool text_too) +void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs, pcb_bool text_too, pcb_bool pstk_smirror) { PCB_VIA_LOOP(data); { @@ -435,12 +435,12 @@ PCB_END_LOOP; PCB_PADSTACK_LOOP(data); { - pcb_pstk_mirror(padstack, y_offs, 1); + pcb_pstk_mirror(padstack, y_offs, pstk_smirror); } PCB_END_LOOP; PCB_SUBC_LOOP(data); { - pcb_subc_mirror(data, subc, y_offs); + pcb_subc_mirror(data, subc, y_offs, pstk_smirror); } PCB_END_LOOP; PCB_LINE_ALL_LOOP(data); Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 13405) +++ trunk/src/data.h (revision 13406) @@ -154,7 +154,7 @@ pcb_board_t *pcb_data_get_top(pcb_data_t *data); -void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs, pcb_bool text_too); +void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs, pcb_bool text_too, pcb_bool pstk_smirror); void pcb_data_move(pcb_data_t *data, pcb_coord_t dx, pcb_coord_t dy); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 13405) +++ trunk/src/obj_subc.c (revision 13406) @@ -1364,12 +1364,12 @@ } /* mirrors the coordinates of a subcircuit; an additional offset is passed */ -void pcb_subc_mirror(pcb_data_t *data, pcb_subc_t *subc, pcb_coord_t y_offs) +void pcb_subc_mirror(pcb_data_t *data, pcb_subc_t *subc, pcb_coord_t y_offs, pcb_bool smirror) { if ((data != NULL) && (data->subc_tree != NULL)) pcb_r_delete_entry(data->subc_tree, (pcb_box_t *)subc); - pcb_data_mirror(subc->data, y_offs, pcb_true); + pcb_data_mirror(subc->data, y_offs, smirror, smirror); pcb_subc_bbox(subc); if ((data != NULL) && (data->subc_tree != NULL)) @@ -1403,7 +1403,7 @@ /* mirror object geometry and stackup */ - pcb_subc_mirror(NULL, newsc, yoff); + pcb_subc_mirror(NULL, newsc, yoff, pcb_true); for(n = 0; n < newsc->data->LayerN; n++) { pcb_layer_t *ly = newsc->data->Layer + n; if (ly->meta.bound.type & PCB_LYT_TOP) Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 13405) +++ trunk/src/obj_subc.h (revision 13406) @@ -60,7 +60,7 @@ int pcb_subc_convert_from_buffer(pcb_buffer_t *buffer); pcb_bool pcb_subc_smash_buffer(pcb_buffer_t *buff); -void pcb_subc_mirror(pcb_data_t *data, pcb_subc_t *subc, pcb_coord_t y_offs); +void pcb_subc_mirror(pcb_data_t *data, pcb_subc_t *subc, pcb_coord_t y_offs, pcb_bool smirror); /* changes the side of the board an element is on; returns pcb_true if done */ pcb_bool pcb_subc_change_side(pcb_subc_t **subc, pcb_coord_t yoff);