int test_curve(void) { spiro_cp path[] = { {334, 117, 'v'}, {305, 176, 'v'}, {212, 142, 'c'}, {159, 171, 'c'}, {224, 237, 'c'}, {347, 335, 'c'}, {202, 467, 'c'}, {81, 429, 'v'}, {114, 368, 'v'}, {201, 402, 'c'}, {276, 369, 'c'}, {218, 308, 'c'}, {91, 211, 'c'}, {124, 111, 'c'}, {229, 82, 'c'} }; spiro_seg *segs; int i; n = 1; for (i = 0; i < 1000; i++) { segs = setup_path(path, 15); solve_spiro(segs, 15); } printf("100 800 translate 1 -1 scale 1 setlinewidth\n"); print_segs(segs, 15); printf("showpage\n"); return 0; }
spiro_seg * run_spiro(const spiro_cp *src, int n) { int nseg = src[0].ty == '{' ? n - 1 : n; spiro_seg *s = setup_path(src, n); if (nseg > 1) solve_spiro(s, nseg); return s; }
spiro_seg * run_spiro(const spiro_cp *src, int n) { if (src==NULL || n <= 0) return 0; int nseg = src[0].ty == '{' ? n - 1 : n; spiro_seg *s = setup_path(src, n); if (s) { int converged = 1 ; // this value is for when nseg == 1; else actual value determined below if (nseg > 1) converged = solve_spiro(s, nseg); if (converged) return s; free(s); } return 0; }
spiro_seg * run_spiro0(const spiro_cp *src, double *dm, int ncq, int n) { int converged, nseg; spiro_seg *s; if (src==NULL || n <= 0) return 0; s = setup_path0(src, dm, n); if (s) { nseg = src[0].ty == '{' ? n - 1 : n; converged = 1 ; /* this value is for when nseg == 1; else actual value determined below */ if (nseg > 1) converged = solve_spiro(s, nseg); if (converged) return s; free(s); } return 0; }