Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 5329) +++ trunk/src/buffer.c (revision 5330) @@ -445,57 +445,27 @@ Buffer->Y = PCB_SWAP_Y(Buffer->Y); PCB_VIA_LOOP(Buffer->Data); { - pcb_r_delete_entry(Buffer->Data->via_tree, (pcb_box_t *) via); - via->X = PCB_SWAP_X(via->X); - via->Y = PCB_SWAP_Y(via->Y); - pcb_pin_bbox(via); - pcb_r_insert_entry(Buffer->Data->via_tree, (pcb_box_t *) via, 0); + pcb_via_flip_side(Buffer->Data, via); } PCB_END_LOOP; PCB_LINE_ALL_LOOP(Buffer->Data); { - 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->Point2.X = PCB_SWAP_X(line->Point2.X); - line->Point2.Y = PCB_SWAP_Y(line->Point2.Y); - pcb_line_bbox(line); - pcb_r_insert_entry(layer->line_tree, (pcb_box_t *) line, 0); + pcb_line_flip_side(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_flip_side(layer, arc); } PCB_ENDALL_LOOP; PCB_POLY_ALL_LOOP(Buffer->Data); { - 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); - } - PCB_END_LOOP; - pcb_poly_bbox(polygon); - pcb_r_insert_entry(layer->polygon_tree, (pcb_box_t *) polygon, 0); - /* hmmm, how to handle clip */ + pcb_poly_flip_side(layer, polygon); } PCB_ENDALL_LOOP; PCB_TEXT_ALL_LOOP(Buffer->Data); { - pcb_r_delete_entry(layer->text_tree, (pcb_box_t *) text); - text->X = PCB_SWAP_X(text->X); - text->Y = PCB_SWAP_Y(text->Y); - PCB_FLAG_TOGGLE(PCB_FLAG_ONSOLDER, text); - pcb_text_bbox(&PCB->Font, text); - pcb_r_insert_entry(layer->text_tree, (pcb_box_t *) text, 0); + pcb_text_flip_side(layer, text); } PCB_ENDALL_LOOP; /* swap silkscreen layers */ Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 5329) +++ trunk/src/obj_arc.c (revision 5330) @@ -609,6 +609,16 @@ pcb_r_insert_entry(layer->arc_tree, (pcb_box_t *) arc, 0); } +void pcb_arc_flip_side(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 5329) +++ trunk/src/obj_arc.h (revision 5330) @@ -57,6 +57,7 @@ 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_flip_side(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 5329) +++ trunk/src/obj_line.c (revision 5330) @@ -692,6 +692,16 @@ line->Point2.Y = PCB_SWAP_Y(line->Point2.Y); } +void pcb_line_flip_side(pcb_layer_t *layer, pcb_line_t *line) +{ + 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->Point2.X = PCB_SWAP_X(line->Point2.X); + line->Point2.Y = PCB_SWAP_Y(line->Point2.Y); + pcb_line_bbox(line); + pcb_r_insert_entry(layer->line_tree, (pcb_box_t *) line, 0); +} static void rotate_line1(pcb_layer_t *Layer, pcb_line_t *Line) { Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 5329) +++ trunk/src/obj_line.h (revision 5330) @@ -61,6 +61,7 @@ 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_flip_side(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 5329) +++ trunk/src/obj_pinvia.c (revision 5330) @@ -244,6 +244,15 @@ via->Y = PCB_SWAP_Y(via->Y); } +void pcb_via_flip_side(pcb_data_t *Data, pcb_pin_t *via) +{ + pcb_r_delete_entry(Data->via_tree, (pcb_box_t *) via); + via->X = PCB_SWAP_X(via->X); + via->Y = PCB_SWAP_Y(via->Y); + pcb_pin_bbox(via); + pcb_r_insert_entry(Data->via_tree, (pcb_box_t *) via, 0); +} + int pcb_pin_eq(const pcb_element_t *e1, const pcb_pin_t *p1, const pcb_element_t *e2, const pcb_pin_t *p2) { if (pcb_field_neq(p1, p2, Thickness) || pcb_field_neq(p1, p2, Clearance)) return 0; Index: trunk/src/obj_pinvia.h =================================================================== --- trunk/src/obj_pinvia.h (revision 5329) +++ trunk/src/obj_pinvia.h (revision 5330) @@ -54,6 +54,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_flip_side(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 5329) +++ trunk/src/obj_poly.c (revision 5330) @@ -151,6 +151,21 @@ pcb_poly_bbox(polygon); } +void pcb_poly_flip_side(pcb_layer_t *layer, pcb_polygon_t *polygon) +{ + 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); + } + PCB_END_LOOP; + pcb_poly_bbox(polygon); + pcb_r_insert_entry(layer->polygon_tree, (pcb_box_t *) polygon, 0); + /* hmmm, how to handle clip */ +} + + /* 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 5329) +++ trunk/src/obj_poly.h (revision 5330) @@ -64,6 +64,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_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); pcb_polygon_t *pcb_poly_copy(pcb_polygon_t *Dest, pcb_polygon_t *Src); Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 5329) +++ trunk/src/obj_text.c (revision 5330) @@ -463,6 +463,16 @@ return (Text); } +void pcb_text_flip_side(pcb_layer_t *layer, pcb_text_t *text) +{ + pcb_r_delete_entry(layer->text_tree, (pcb_box_t *) text); + text->X = PCB_SWAP_X(text->X); + text->Y = PCB_SWAP_Y(text->Y); + PCB_FLAG_TOGGLE(PCB_FLAG_ONSOLDER, text); + pcb_text_bbox(&PCB->Font, text); + pcb_r_insert_entry(layer->text_tree, (pcb_box_t *) text, 0); +} + /*** draw ***/ /* --------------------------------------------------------------------------- Index: trunk/src/obj_text.h =================================================================== --- trunk/src/obj_text.h (revision 5329) +++ trunk/src/obj_text.h (revision 5330) @@ -53,7 +53,9 @@ void pcb_text_bbox(pcb_font_t *FontPtr, pcb_text_t *Text); void pcb_text_rotate90(pcb_text_t *Text, pcb_coord_t X, pcb_coord_t Y, unsigned Number); +void pcb_text_flip_side(pcb_layer_t *layer, pcb_text_t *text); + #define pcb_text_move(t,dx,dy) \ do { \ pcb_coord_t __dx__ = (dx), __dy__ = (dy); \