Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 5327) +++ trunk/src/buffer.c (revision 5328) @@ -403,38 +403,22 @@ Buffer->Y = PCB_SWAP_Y(Buffer->Y); PCB_VIA_LOOP(Buffer->Data); { - via->X = PCB_SWAP_X(via->X); - via->Y = PCB_SWAP_Y(via->Y); + pcb_via_mirror(Buffer->Data, via); } PCB_END_LOOP; PCB_LINE_ALL_LOOP(Buffer->Data); { - line->Point1.X = PCB_SWAP_X(line->Point1.X); - line->Point1.Y = PCB_SWAP_Y(line->Point1.Y); - line->Point2.X = PCB_SWAP_X(line->Point2.X); - line->Point2.Y = PCB_SWAP_Y(line->Point2.Y); + pcb_line_mirror(layer, line); } PCB_ENDALL_LOOP; PCB_ARC_ALL_LOOP(Buffer->Data); { - 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->StartAngle = PCB_SWAP_ANGLE(arc->StartAngle); - arc->Delta = PCB_SWAP_DELTA(arc->Delta); - pcb_arc_bbox(arc); - pcb_r_insert_entry(layer->arc_tree, (pcb_box_t *) arc, 0); + pcb_arc_mirror(layer, arc); } PCB_ENDALL_LOOP; PCB_POLY_ALL_LOOP(Buffer->Data); { - PCB_POLY_POINT_LOOP(polygon); - { - point->X = PCB_SWAP_X(point->X); - point->Y = PCB_SWAP_Y(point->Y); - } - PCB_END_LOOP; - pcb_poly_bbox(polygon); + pcb_poly_mirror(layer, polygon); } PCB_ENDALL_LOOP; pcb_set_buffer_bbox(Buffer); Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 5327) +++ trunk/src/obj_arc.c (revision 5328) @@ -598,6 +598,18 @@ pcb_r_insert_entry(layer->arc_tree, (pcb_box_t *) arc, 0); } +void pcb_arc_mirror(pcb_layer_t *layer, pcb_arc_t *arc) +{ + 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->StartAngle = PCB_SWAP_ANGLE(arc->StartAngle); + arc->Delta = PCB_SWAP_DELTA(arc->Delta); + pcb_arc_bbox(arc); + pcb_r_insert_entry(layer->arc_tree, (pcb_box_t *) arc, 0); +} + + /* rotates an arc */ void *Rotate90Arc(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_arc_t *Arc) { Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 5327) +++ trunk/src/obj_arc.h (revision 5328) @@ -56,6 +56,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); /*** hash ***/ int pcb_arc_eq(const pcb_element_t *e1, const pcb_arc_t *a1, const pcb_element_t *e2, const pcb_arc_t *a2); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 5327) +++ trunk/src/obj_line.c (revision 5328) @@ -684,6 +684,15 @@ pcb_r_insert_entry(layer->line_tree, (pcb_box_t *) line, 0); } +void pcb_line_mirror(pcb_layer_t *layer, pcb_line_t *line) +{ + line->Point1.X = PCB_SWAP_X(line->Point1.X); + line->Point1.Y = PCB_SWAP_Y(line->Point1.Y); + line->Point2.X = PCB_SWAP_X(line->Point2.X); + line->Point2.Y = PCB_SWAP_Y(line->Point2.Y); +} + + static void rotate_line1(pcb_layer_t *Layer, pcb_line_t *Line) { EraseLine(Line); Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 5327) +++ trunk/src/obj_line.h (revision 5328) @@ -60,6 +60,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); pcb_coord_t pcb_line_length(const pcb_line_t *line); pcb_coord_t pcb_line_area(const pcb_line_t *line); Index: trunk/src/obj_pinvia.c =================================================================== --- trunk/src/obj_pinvia.c (revision 5327) +++ trunk/src/obj_pinvia.c (revision 5328) @@ -238,6 +238,11 @@ pcb_r_insert_entry(Data->via_tree, (pcb_box_t *) Via, 0); } +void pcb_via_mirror(pcb_data_t *Data, pcb_pin_t *via) +{ + via->X = PCB_SWAP_X(via->X); + via->Y = PCB_SWAP_Y(via->Y); +} int pcb_pin_eq(const pcb_element_t *e1, const pcb_pin_t *p1, const pcb_element_t *e2, const pcb_pin_t *p2) { Index: trunk/src/obj_pinvia.h =================================================================== --- trunk/src/obj_pinvia.h (revision 5327) +++ trunk/src/obj_pinvia.h (revision 5328) @@ -53,6 +53,7 @@ void pcb_pin_bbox(pcb_pin_t *Pin); 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); /* hash */ int pcb_pin_eq(const pcb_element_t *e1, const pcb_pin_t *p1, const pcb_element_t *e2, const pcb_pin_t *p2); Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 5327) +++ trunk/src/obj_poly.c (revision 5328) @@ -140,6 +140,16 @@ pcb_r_insert_entry(layer->polygon_tree, (pcb_box_t *) polygon, 0); } +void pcb_poly_mirror(pcb_layer_t *layer, pcb_polygon_t *polygon) +{ + PCB_POLY_POINT_LOOP(polygon); + { + point->X = PCB_SWAP_X(point->X); + point->Y = PCB_SWAP_Y(point->Y); + } + PCB_END_LOOP; + pcb_poly_bbox(polygon); +} /* sets the bounding box of a polygons */ void pcb_poly_bbox(pcb_polygon_t *Polygon) Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 5327) +++ trunk/src/obj_poly.h (revision 5328) @@ -63,6 +63,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_move(pcb_polygon_t *Polygon, pcb_coord_t DX, pcb_coord_t DY); pcb_polygon_t *pcb_poly_copy(pcb_polygon_t *Dest, pcb_polygon_t *Src);