Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 9773) +++ trunk/src/buffer.c (revision 9774) @@ -441,7 +441,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); + pcb_data_mirror(Buffer->Data, 0); pcb_set_buffer_bbox(Buffer); } Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 9773) +++ trunk/src/data.c (revision 9774) @@ -404,26 +404,26 @@ return NULL; } -void pcb_data_mirror(pcb_data_t *data) +void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs) { PCB_VIA_LOOP(data); { - pcb_via_mirror(data, via); + pcb_via_mirror(data, via, y_offs); } PCB_END_LOOP; PCB_LINE_ALL_LOOP(data); { - pcb_line_mirror(layer, line); + pcb_line_mirror(layer, line, y_offs); } PCB_ENDALL_LOOP; PCB_ARC_ALL_LOOP(data); { - pcb_arc_mirror(layer, arc); + pcb_arc_mirror(layer, arc, y_offs); } PCB_ENDALL_LOOP; PCB_POLY_ALL_LOOP(data); { - pcb_poly_mirror(layer, polygon); + pcb_poly_mirror(layer, polygon, y_offs); } PCB_ENDALL_LOOP; } Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 9773) +++ trunk/src/data.h (revision 9774) @@ -136,7 +136,7 @@ pcb_board_t *pcb_data_get_top(pcb_data_t *data); -void pcb_data_mirror(pcb_data_t *data); +void pcb_data_mirror(pcb_data_t *data, pcb_coord_t y_offs); #endif Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 9773) +++ trunk/src/obj_arc.c (revision 9774) @@ -642,11 +642,11 @@ pcb_r_insert_entry(layer->arc_tree, (pcb_box_t *) arc, 0); } -void pcb_arc_mirror(pcb_layer_t *layer, pcb_arc_t *arc) +void pcb_arc_mirror(pcb_layer_t *layer, pcb_arc_t *arc, pcb_coord_t y_offs) { pcb_r_delete_entry(layer->arc_tree, (pcb_box_t *) arc); arc->X = PCB_SWAP_X(arc->X); - arc->Y = PCB_SWAP_Y(arc->Y); + arc->Y = PCB_SWAP_Y(arc->Y) + y_offs; arc->StartAngle = PCB_SWAP_ANGLE(arc->StartAngle); arc->Delta = PCB_SWAP_DELTA(arc->Delta); pcb_arc_bbox(arc); Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 9773) +++ trunk/src/obj_arc.h (revision 9774) @@ -58,7 +58,7 @@ void pcb_arc_bbox(pcb_arc_t *Arc); void pcb_arc_rotate90(pcb_arc_t *Arc, pcb_coord_t X, pcb_coord_t Y, unsigned Number); void pcb_arc_rotate(pcb_layer_t *layer, pcb_arc_t *arc, pcb_coord_t X, pcb_coord_t Y, double cosa, double sina, pcb_angle_t angle); -void pcb_arc_mirror(pcb_layer_t *layer, pcb_arc_t *arc); +void pcb_arc_mirror(pcb_layer_t *layer, pcb_arc_t *arc, pcb_coord_t y_offs); void pcb_arc_flip_side(pcb_layer_t *layer, pcb_arc_t *arc); pcb_box_t pcb_arc_mini_bbox(const pcb_arc_t *arc); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 9773) +++ trunk/src/obj_line.c (revision 9774) @@ -744,13 +744,13 @@ pcb_r_insert_entry(layer->line_tree, (pcb_box_t *) line, 0); } -void pcb_line_mirror(pcb_layer_t *layer, pcb_line_t *line) +void pcb_line_mirror(pcb_layer_t *layer, pcb_line_t *line, pcb_coord_t y_offs) { pcb_r_delete_entry(layer->line_tree, (pcb_box_t *) line); line->Point1.X = PCB_SWAP_X(line->Point1.X); - line->Point1.Y = PCB_SWAP_Y(line->Point1.Y); + line->Point1.Y = PCB_SWAP_Y(line->Point1.Y) + y_offs; line->Point2.X = PCB_SWAP_X(line->Point2.X); - line->Point2.Y = PCB_SWAP_Y(line->Point2.Y); + line->Point2.Y = PCB_SWAP_Y(line->Point2.Y) + y_offs; pcb_line_bbox(line); pcb_r_insert_entry(layer->line_tree, (pcb_box_t *) line, 0); } Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 9773) +++ trunk/src/obj_line.h (revision 9774) @@ -62,7 +62,7 @@ void pcb_line_bbox(pcb_line_t *Line); void pcb_line_rotate90(pcb_line_t *Line, pcb_coord_t X, pcb_coord_t Y, unsigned Number); void pcb_line_rotate(pcb_layer_t *layer, pcb_line_t *line, pcb_coord_t X, pcb_coord_t Y, double cosa, double sina); -void pcb_line_mirror(pcb_layer_t *layer, pcb_line_t *line); +void pcb_line_mirror(pcb_layer_t *layer, pcb_line_t *line, pcb_coord_t y_offs); void pcb_line_flip_side(pcb_layer_t *layer, pcb_line_t *line); pcb_coord_t pcb_line_length(const pcb_line_t *line); Index: trunk/src/obj_pinvia.c =================================================================== --- trunk/src/obj_pinvia.c (revision 9773) +++ trunk/src/obj_pinvia.c (revision 9774) @@ -281,10 +281,10 @@ pcb_r_insert_entry(Data->via_tree, (pcb_box_t *) Via, 0); } -void pcb_via_mirror(pcb_data_t *Data, pcb_pin_t *via) +void pcb_via_mirror(pcb_data_t *Data, pcb_pin_t *via, pcb_coord_t y_offs) { via->X = PCB_SWAP_X(via->X); - via->Y = PCB_SWAP_Y(via->Y); + via->Y = PCB_SWAP_Y(via->Y) + y_offs; } void pcb_via_flip_side(pcb_data_t *Data, pcb_pin_t *via) Index: trunk/src/obj_pinvia.h =================================================================== --- trunk/src/obj_pinvia.h (revision 9773) +++ trunk/src/obj_pinvia.h (revision 9774) @@ -59,7 +59,7 @@ void pcb_via_rotate(pcb_data_t *Data, pcb_pin_t *Via, pcb_coord_t X, pcb_coord_t Y, double cosa, double sina); -void pcb_via_mirror(pcb_data_t *Data, pcb_pin_t *Via); +void pcb_via_mirror(pcb_data_t *Data, pcb_pin_t *Via, pcb_coord_t y_offs); void pcb_via_flip_side(pcb_data_t *Data, pcb_pin_t *via); /* hash */ Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 9773) +++ trunk/src/obj_poly.c (revision 9774) @@ -145,13 +145,13 @@ pcb_r_insert_entry(layer->polygon_tree, (pcb_box_t *) polygon, 0); } -void pcb_poly_mirror(pcb_layer_t *layer, pcb_polygon_t *polygon) +void pcb_poly_mirror(pcb_layer_t *layer, pcb_polygon_t *polygon, pcb_coord_t y_offs) { pcb_r_delete_entry(layer->polygon_tree, (pcb_box_t *)polygon); PCB_POLY_POINT_LOOP(polygon); { point->X = PCB_SWAP_X(point->X); - point->Y = PCB_SWAP_Y(point->Y); + point->Y = PCB_SWAP_Y(point->Y) + y_offs; } PCB_END_LOOP; pcb_poly_bbox(polygon); Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 9773) +++ trunk/src/obj_poly.h (revision 9774) @@ -65,7 +65,7 @@ void pcb_poly_rotate90(pcb_polygon_t *Polygon, pcb_coord_t X, pcb_coord_t Y, unsigned Number); void pcb_poly_rotate(pcb_layer_t *layer, pcb_polygon_t *poly, pcb_coord_t X, pcb_coord_t Y, double cosa, double sina); -void pcb_poly_mirror(pcb_layer_t *layer, pcb_polygon_t *polygon); +void pcb_poly_mirror(pcb_layer_t *layer, pcb_polygon_t *polygon, pcb_coord_t y_offs); void pcb_poly_flip_side(pcb_layer_t *layer, pcb_polygon_t *polygon); void pcb_poly_move(pcb_polygon_t *Polygon, pcb_coord_t DX, pcb_coord_t DY);