1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef _SPIROENTRYPOINTS_H
#define _SPIROENTRYPOINTS_H
#include "bezctx_intf.h"
#include "spiro.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Possible values of the "ty" field. */
#define SPIRO_CORNER 'v'
#define SPIRO_G4 'o'
#define SPIRO_G2 'c'
#define SPIRO_LEFT '['
#define SPIRO_RIGHT ']'
/* For a closed contour add an extra cp with a ty set to */
#define SPIRO_END 'z'
/* For an open contour the first cp must have a ty set to*/
#define SPIRO_OPEN_CONTOUR '{'
/* For an open contour the last cp must have a ty set to */
#define SPIRO_END_OPEN_CONTOUR '}'
/* These 6 functions are kept for backwards compatibility for older */
/* programs. Please use the functions listed afterwards that return */
/* success/failure replies when done. See version 20190731 or later */
extern void TaggedSpiroCPsToBezier(spiro_cp *spiros,bezctx *bc);
extern void SpiroCPsToBezier(spiro_cp *spiros,int n,int isclosed,bezctx *bc);
/* These functions are available in libspiro-0.2.20130930 or higher */
extern int TaggedSpiroCPsToBezier0(spiro_cp *spiros,bezctx *bc);
extern int SpiroCPsToBezier0(spiro_cp *spiros,int n,int isclosed,bezctx *bc);
/* These functions are available in libspiro-0.3.20150131 or higher */
extern void TaggedSpiroCPsToBezier1(spiro_cp *spiros,bezctx *bc,int *done);
extern void SpiroCPsToBezier1(spiro_cp *spiros,int n,int isclosed,bezctx *bc,int *done);
/* These functions are available in libspiro-20190731 or higher and */
/* give you best flexibility compared to earlier libspiro versions. */
extern const char *LibSpiroVersion(void);
/* The spiros array should indicate it's own end... So */
/* Open contours must have the ty field of the first cp set to '{' */
/* and have the ty field of the last cp set to '}' */
/* Closed contours must have an extra cp at the end whose ty is 'z' */
/* the x&y values of this extra cp are ignored */
/* ncq allows you to toggle different outputs independent of spiros */
extern int TaggedSpiroCPsToBezier2(spiro_cp *spiros,int ncq,bezctx *bc);
/* The first argument is an array of spiro control points. */
/* Open contours do not need to start with '{', nor to end with '}' */
/* Close contours do not need to end with 'z' */
/* ncq allows you to toggle different outputs independent of spiros */
extern int SpiroCPsToBezier2(spiro_cp *spiros,int n,int ncq,int isclosed,bezctx *bc);
/* Curve crossing point with a 'fixed angle' of crossing */
#define SPIRO_ANCHOR 'a'
/* Curve crossing handle cp(hx,hy) relative to cp(ax,ay) */
#define SPIRO_HANDLE 'h'
/* int ncq flags and values */
#define SPIRO_INCLUDE_LAST_KNOT 0x0100
#define SPIRO_RETRO_VER1 0x0400
#define SPIRO_REVERSE_SRC 0x0800
#define SPIRO_ARC_CUB_QUAD_CLR 0x7FFF
#define SPIRO_ARC_CUB_QUAD_MASK 0x7000
#define SPIRO_CUBIC_TO_BEZIER 0x0000
#define SPIRO_CUBIC_MIN_MAYBE 0x1000
#define SPIRO_ARC_MAYBE 0x2000
#define SPIRO_ARC_MIN_MAYBE 0x3000
#define SPIRO_QUAD0_TO_BEZIER 0x4000
#ifdef __cplusplus
}
#endif
#endif