blob: 6cbd143d0ea61c91312eaf9eef77e01fc173be47 (
plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
|
/* spline.h: manipulate the spline representation.
Some of macrs are only renamed macros in output.h. */
#ifndef SPLINE_H
#define SPLINE_H
#include <stdio.h>
#include "autotrace.h"
#include "output.h"
typedef at_polynomial_degree polynomial_degree;
typedef at_spline_type spline_type;
#define LINEARTYPE AT_LINEARTYPE
#define QUADRATICTYPE AT_QUADRATICTYPE
#define CUBICTYPE AT_CUBICTYPE
#define PARALLELELLIPSETYPE AT_PARALLELELLIPSETYPE
#define ELLIPSETYPE AT_ELLIPSETYPE
#define CIRCLETYPE AT_CIRCLETYPE
#define START_POINT AT_SPLINE_START_POINT_VALUE
#define CONTROL1 AT_SPLINE_CONTROL1_VALUE
#define CONTROL2 AT_SPLINE_CONTROL2_VALUE
#define END_POINT AT_SPLINE_END_POINT_VALUE
#define SPLINE_DEGREE AT_SPLINE_DEGREE_VALUE
#define SPLINE_LINEARITY(spl) ((spl).linearity)
#ifndef _IMPORTING
/* Print a spline on the given file. */
extern void print_spline(spline_type);
/* Evaluate SPLINE at the given T value. */
extern at_real_coord evaluate_spline(spline_type spline, gfloat t);
#endif
/* Each outline in a character is typically represented by many
splines. So, here is a list structure for that: */
typedef at_spline_list_type spline_list_type;
/* An empty list will have length zero (and null data). */
#define SPLINE_LIST_LENGTH AT_SPLINE_LIST_LENGTH_VALUE
/* The address of the beginning of the array of data. */
#define SPLINE_LIST_DATA AT_SPLINE_LIST_DATA_VALUE
/* The element INDEX in S_L. */
#define SPLINE_LIST_ELT AT_SPLINE_LIST_ELT_VALUE
/* The last element in S_L. */
#define LAST_SPLINE_LIST_ELT(s_l) \
(SPLINE_LIST_DATA (s_l)[SPLINE_LIST_LENGTH (s_l) - 1])
/* The previous and next elements to INDEX in S_L. */
#define NEXT_SPLINE_LIST_ELT(s_l, index) \
SPLINE_LIST_ELT (s_l, ((index) + 1) % SPLINE_LIST_LENGTH (s_l))
#define PREV_SPLINE_LIST_ELT(s_l, index) \
SPLINE_LIST_ELT (s_l, index == 0 \
? SPLINE_LIST_LENGTH (s_l) - 1 \
: index - 1)
#ifndef _IMPORTING
/* Construct and destroy new `spline_list_type' objects. */
extern spline_list_type *new_spline_list(void); /* Allocate new memory */
extern spline_list_type empty_spline_list(void); /* No allocation */
extern spline_list_type *new_spline_list_with_spline(spline_type);
extern void free_spline_list(spline_list_type);
/* Append the spline S to the list S_LIST. */
extern void append_spline(spline_list_type * s_list, spline_type s);
/* Append the elements in list S2 to S1, changing S1. */
extern void concat_spline_lists(spline_list_type * s1, spline_list_type s2);
#endif
typedef at_spline_list_array_type spline_list_array_type;
/* Turns out we can use the same definitions for lists of lists as for
just lists. But we define the usual names, just in case. */
#define SPLINE_LIST_ARRAY_LENGTH AT_SPLINE_LIST_ARRAY_LENGTH_VALUE
#define SPLINE_LIST_ARRAY_DATA SPLINE_LIST_DATA
#define SPLINE_LIST_ARRAY_ELT AT_SPLINE_LIST_ARRAY_ELT_VALUE
#define LAST_SPLINE_LIST_ARRAY_ELT LAST_SPLINE_LIST_ELT
extern spline_list_array_type new_spline_list_array(void);
extern void append_spline_list(spline_list_array_type *, spline_list_type);
extern void free_spline_list_array(spline_list_array_type *);
#endif /* not SPLINE_H */
|