curve.h revision 9b3424d16d013c8b529dc32ca112e56f1cfe3208
/* Copyright (C) 2001-2007 Peter Selinger.
This file is part of Potrace. It is free software and it is covered
by the GNU General Public License. See the file COPYING for details. */
#ifndef CURVE_H
#define CURVE_H
#include "auxiliary.h"
/* vertex is c[1] for tag=POTRACE_CORNER, and the intersection of
.c[-1][2]..c[0] and c[1]..c[2] for tag=POTRACE_CURVETO. alpha is only
defined for tag=POTRACE_CURVETO and is the alpha parameter of the curve:
.c[-1][2]..c[0] = alpha*(.c[-1][2]..vertex), and
c[2]..c[1] = alpha*(c[2]..vertex).
Beta is so that (.beta[i])[.vertex[i],.vertex[i+1]] = .c[i][2].
*/
struct privcurve_s {
int n; /* number of segments */
int *tag; /* tag[n]: POTRACE_CORNER or POTRACE_CURVETO */
c[n][0] is unused for tag[n]=POTRACE_CORNER */
/* the remainder of this structure is special to privcurve, and is
used in EPS debug output and special EPS "short coding". These
fields are valid only if "alphacurve" is set. */
int alphacurve; /* have the following fields been initialized? */
double *alpha; /* only for POTRACE_CURVETO */
double *alpha0; /* "uncropped" alpha parameter - for debug output only */
double *beta;
};
typedef struct privcurve_s privcurve_t;
struct sums_s {
double x;
double y;
double x2;
double xy;
double y2;
};
/* the path structure is filled in with information about a given path
as it is accumulated and passed through the different stages of the
Potrace algorithm. Backends only need to read the fcurve and fm
fields of this data structure, but debugging backends may read
other fields. */
struct potrace_privpath_s {
int len;
int *lon; /* lon[len]: (i,lon[i]) = longest straight line from i */
int m; /* length of optimal polygon */
int *po; /* po[m]: optimal polygon */
ocurve. Do not free this separately. */
};
typedef struct potrace_privpath_s potrace_privpath_t;
/* shorter names */
typedef potrace_privpath_t privpath_t;
typedef potrace_path_t path_t;
#endif /* CURVE_H */