Index: obj_arc_ui.c =================================================================== --- obj_arc_ui.c (revision 5282) +++ obj_arc_ui.c (revision 5283) @@ -41,13 +41,34 @@ pcb_angle_t start = arc->StartAngle, delta = arc->Delta; if (end_pt == NULL) { - fprintf(stderr, "Moving arc endpoint: start point not yet implemented %p\n", end_pt); + double end2, new_delta, new_start = atan2(-(ch->Y - arc->Y), (ch->X - arc->X)) * 180.0 / M_PI + 180.0; + + end2 = start + delta; + new_delta = end2 - new_start; + if (new_delta > 360.0) + new_delta -= 360.0; + if (new_delta < -360.0) + new_delta += 360.0; + +/* fprintf(stderr, "start: %f new_start: %f delta=%f new delta=%f\n", start, new_start, delta, new_delta);*/ + + if (delta > 0) { + if (new_delta < 0) + new_delta += 360.0; + } + else { + if (new_delta > 0) + new_delta -= 360.0; + } + + start = new_start; + delta = new_delta; } else { double new_delta, new_end = atan2(-(ch->Y - arc->Y), (ch->X - arc->X)) * 180.0 / M_PI + 180.0; if (delta < 0) new_end -= 360.0; - fprintf(stderr, "delta: %f abs-end: %f new-abs: %f new-delta: %f\n", delta, start+delta, new_end, new_end-start); +/* fprintf(stderr, "delta: %f abs-end: %f new-abs: %f new-delta: %f\n", delta, start+delta, new_end, new_end-start);*/ new_delta = new_end-start; if (delta > 0) { if (new_delta < 0)