curve.h revision 6b15695578f07a3f72c4c9475c1a261a3021472a
/* Copyright (C) 2001-2005 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 */
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 */