#ifndef _SPIRO_H #define _SPIRO_H typedef struct { /* User passes an array of SpiroCP in this format for Spiro to solve */ double x; /* Spiro CodePoint Xloc */ double y; /* Spiro CodePoint Yloc */ char ty; /* Spiro CodePoint Type */ } spiro_cp; struct spiro_seg_s { /* run_spiro() uses array of information given in the structure above and */ /* creates an array in this structure format to use by spiro_to_bpath for */ /* building bezier curves */ double x; /* SpiroCP segment_chord startX */ double y; /* SpiroCP segment_chord startY */ char ty; /* Spiro CodePoint Type */ double bend_th; /* bend theta between this vector and next vector */ double ks[4]; double seg_ch; /* segment_chord distance from xy to next SpiroCP */ double seg_th; /* segment_theta angle for this SpiroCP */ double l; }; typedef struct spiro_seg_s spiro_seg; spiro_seg * run_spiro(const spiro_cp *src, int n); void free_spiro(spiro_seg *s); void spiro_to_bpath(const spiro_seg *s, int n, bezctx *bc); double get_knot_th(const spiro_seg *s, int i); #endif