Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 13526) +++ trunk/src/obj_subc.c (revision 13527) @@ -983,6 +983,16 @@ return pcb_subc_op(data, sc, &RotateFunctions, ctx); } +void pcb_subc_rotate90(pcb_subc_t *subc, pcb_coord_t cx, pcb_coord_t cy, int steps) +{ + pcb_opctx_t ctx; + + ctx.rotate.center_x = cx; + ctx.rotate.center_y = cy; + ctx.rotate.number = steps; + pcb_subcop_rotate(&ctx, subc); +} + void pcb_subc_rotate(pcb_subc_t *subc, pcb_coord_t cx, pcb_coord_t cy, double cosa, double sina, double angle) { pcb_opctx_t ctx; Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 13526) +++ trunk/src/obj_subc.h (revision 13527) @@ -66,6 +66,7 @@ pcb_bool pcb_subc_change_side(pcb_subc_t **subc, pcb_coord_t yoff); void pcb_subc_rotate(pcb_subc_t *subc, pcb_coord_t cx, pcb_coord_t cy, double cosa, double sina, double angle); +void pcb_subc_rotate90(pcb_subc_t *subc, pcb_coord_t cx, pcb_coord_t cy, int steps); /* High level move (op wrapper; no undo) */ void pcb_subc_move(pcb_subc_t *sc, pcb_coord_t dx, pcb_coord_t dy, pcb_bool more_to_come);