Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 5289) +++ trunk/src/obj_arc.c (revision 5290) @@ -131,6 +131,19 @@ pcb_close_box(&Arc->BoundingBox); } + +void pcb_arc_get_end(pcb_arc_t *Arc, int which, pcb_coord_t *x, pcb_coord_t *y) +{ + if (which == 0) { + *x = Arc->X - Arc->Width * cos(Arc->StartAngle * PCB_M180); + *y = Arc->Y + Arc->Height * sin(Arc->StartAngle * PCB_M180); + } + else { + *x = Arc->X - Arc->Width * cos((Arc->StartAngle + Arc->Delta) * PCB_M180); + *y = Arc->Y + Arc->Height * sin((Arc->StartAngle + Arc->Delta) * PCB_M180); + } +} + pcb_box_t *pcb_arc_get_ends(pcb_arc_t *Arc) { static pcb_box_t box; Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 5289) +++ trunk/src/obj_arc.h (revision 5290) @@ -62,7 +62,14 @@ unsigned int pcb_arc_hash(const pcb_element_t *e, const pcb_arc_t *a); +/* Return the x;y coordinate of the endpoint of an arc; if which is 0, return + the endpoint that corresponds to StartAngle, else return the end angle's. */ +void pcb_arc_get_end(pcb_arc_t *Arc, int which, pcb_coord_t *x, pcb_coord_t *y); + +/* Obsolete: please use pcb_arc_get_end() instead */ pcb_box_t *pcb_arc_get_ends(pcb_arc_t *Arc); + + void pcb_arc_set_angles(pcb_layer_t *Layer, pcb_arc_t *a, pcb_angle_t new_sa, pcb_angle_t new_da); void pcb_arc_set_radii(pcb_layer_t *Layer, pcb_arc_t *a, pcb_coord_t new_width, pcb_coord_t new_height);