/*->h.BezierArc */

/* Header for arc to Bezier conversion, version 0.1 */

/* Definition of a coordinate. Note that ArcDraw coordinates may be freely cast
   to this
 */

typedef struct { int x,y; } bezier_arc_coord;

/* Constants */
#define bezier_arc_pi      (3.1415927)
#define bezier_arc_rad90   (bezier_arc_pi/2)
#define bezier_arc_rad360  (bezier_arc_pi*2)

/* Construct a bezier arc of less than 90 degrees */
void bezier_arc_short(
    bezier_arc_coord   centre,
    double             startAngle,
    double             endAngle,
    int                radius,
    bezier_arc_coord * start,
    bezier_arc_coord * end,
    bezier_arc_coord * control1,
    bezier_arc_coord * control2);

/* Construct a 90 degree bezier arc */
void bezier_arc_90(
    bezier_arc_coord   centre,
    double             startAngle,
    int                radius,
    bezier_arc_coord * start,
    bezier_arc_coord * end,
    bezier_arc_coord * control1,
    bezier_arc_coord * control2);

/* Construct a set of points defining a circle */
void bezier_arc_circle(
    bezier_arc_coord   centre,
    int                radius,
    bezier_arc_coord * p /* array for 13 points */);

/* Get points for first segment of an arc -> number of segments */
int bezier_arc_start(
    bezier_arc_coord   centre,
    double             startAngle,
    double             endAngle,
    int                radius,
    bezier_arc_coord * start,
    bezier_arc_coord * end,
    bezier_arc_coord * bezier1,
    bezier_arc_coord * bezier2);

/* Next segment of arc -> 0 or next segment number */
int bezier_arc_segment(
    int                segment,
    bezier_arc_coord * end,
    bezier_arc_coord * bezier1,
    bezier_arc_coord * bezier2);
