2010-06-10 18:43:12 +00:00
|
|
|
/* 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 POTRACELIB_H
|
|
|
|
#define POTRACELIB_H
|
|
|
|
|
|
|
|
/* this file defines the API for the core Potrace library. For a more
|
|
|
|
* detailed description of the API, see doc/potracelib.txt */
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------- */
|
|
|
|
/* tracing parameters */
|
|
|
|
|
|
|
|
/* turn policies */
|
|
|
|
#define POTRACE_TURNPOLICY_BLACK 0
|
|
|
|
#define POTRACE_TURNPOLICY_WHITE 1
|
|
|
|
#define POTRACE_TURNPOLICY_LEFT 2
|
|
|
|
#define POTRACE_TURNPOLICY_RIGHT 3
|
|
|
|
#define POTRACE_TURNPOLICY_MINORITY 4
|
|
|
|
#define POTRACE_TURNPOLICY_MAJORITY 5
|
|
|
|
#define POTRACE_TURNPOLICY_RANDOM 6
|
|
|
|
|
|
|
|
/* structure to hold progress bar callback data */
|
|
|
|
struct potrace_progress_s
|
|
|
|
{
|
|
|
|
void (* callback)( double progress, void* privdata ); /* callback fn */
|
|
|
|
void* data; /* callback function's private data */
|
|
|
|
double min, max; /* desired range of progress, e.g. 0.0 to 1.0 */
|
|
|
|
double epsilon; /* granularity: can skip smaller increments */
|
|
|
|
};
|
|
|
|
typedef struct potrace_progress_s potrace_progress_t;
|
|
|
|
|
|
|
|
/* structure to hold tracing parameters */
|
|
|
|
struct potrace_param_s
|
|
|
|
{
|
|
|
|
int turdsize; /* area of largest path to be ignored */
|
|
|
|
int turnpolicy; /* resolves ambiguous turns in path decomposition */
|
|
|
|
double alphamax; /* corner threshold */
|
|
|
|
int opticurve; /* use curve optimization? */
|
|
|
|
double opttolerance; /* curve optimization tolerance */
|
|
|
|
potrace_progress_t progress; /* progress callback function */
|
|
|
|
};
|
|
|
|
typedef struct potrace_param_s potrace_param_t;
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------- */
|
|
|
|
/* bitmaps */
|
|
|
|
|
|
|
|
/* native word size */
|
|
|
|
typedef unsigned long potrace_word;
|
|
|
|
|
|
|
|
/* Internal bitmap format. The n-th scanline starts at scanline(n) =
|
|
|
|
* (map + n*dy). Raster data is stored as a sequence of potrace_words
|
|
|
|
* (NOT bytes). The leftmost bit of scanline n is the most significant
|
|
|
|
* bit of scanline(n)[0]. */
|
|
|
|
struct potrace_bitmap_s
|
|
|
|
{
|
|
|
|
int w, h; /* width and height, in pixels */
|
|
|
|
int dy; /* words per scanline (not bytes) */
|
|
|
|
potrace_word* map; /* raw data, dy*h words */
|
|
|
|
};
|
|
|
|
typedef struct potrace_bitmap_s potrace_bitmap_t;
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------- */
|
|
|
|
/* curves */
|
|
|
|
|
|
|
|
/* point */
|
|
|
|
struct potrace_dpoint_s
|
|
|
|
{
|
|
|
|
double x, y;
|
|
|
|
};
|
|
|
|
typedef struct potrace_dpoint_s potrace_dpoint_t;
|
|
|
|
|
|
|
|
/* segment tags */
|
|
|
|
#define POTRACE_CURVETO 1
|
|
|
|
#define POTRACE_CORNER 2
|
|
|
|
|
|
|
|
/* closed curve segment */
|
|
|
|
struct potrace_curve_s
|
|
|
|
{
|
2011-10-26 09:53:42 +00:00
|
|
|
int n; // number of segments
|
|
|
|
int* tag; // tag[n]: POTRACE_CURVETO or POTRACE_CORNER
|
|
|
|
potrace_dpoint_t( * c )[3]; /* c[n][3]: control points.
|
|
|
|
* c[n][0] is unused for tag[n]=POTRACE_CORNER
|
|
|
|
*/
|
2010-06-10 18:43:12 +00:00
|
|
|
};
|
|
|
|
typedef struct potrace_curve_s potrace_curve_t;
|
|
|
|
|
|
|
|
/* Linked list of signed curve segments. Also carries a tree structure. */
|
|
|
|
struct potrace_path_s
|
|
|
|
{
|
|
|
|
int area; /* area of the bitmap path */
|
|
|
|
int sign; /* '+' or '-', depending on orientation */
|
|
|
|
potrace_curve_t curve; /* this path's vector data */
|
|
|
|
|
|
|
|
struct potrace_path_s* next; /* linked list structure */
|
|
|
|
|
|
|
|
struct potrace_path_s* childlist; /* tree structure */
|
|
|
|
struct potrace_path_s* sibling; /* tree structure */
|
|
|
|
|
|
|
|
struct potrace_privpath_s* priv; /* private state */
|
|
|
|
};
|
|
|
|
typedef struct potrace_path_s potrace_path_t;
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------- */
|
|
|
|
/* Potrace state */
|
|
|
|
|
|
|
|
#define POTRACE_STATUS_OK 0
|
|
|
|
#define POTRACE_STATUS_INCOMPLETE 1
|
|
|
|
|
|
|
|
struct potrace_state_s
|
|
|
|
{
|
|
|
|
int status;
|
|
|
|
potrace_path_t* plist; /* vector data */
|
|
|
|
|
|
|
|
struct potrace_privstate_s* priv; /* private state */
|
|
|
|
};
|
|
|
|
typedef struct potrace_state_s potrace_state_t;
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------- */
|
|
|
|
/* API functions */
|
|
|
|
|
|
|
|
/* get default parameters */
|
|
|
|
potrace_param_t* potrace_param_default( void );
|
|
|
|
|
|
|
|
/* free parameter set */
|
|
|
|
void potrace_param_free( potrace_param_t* p );
|
|
|
|
|
|
|
|
/* trace a bitmap*/
|
|
|
|
potrace_state_t* potrace_trace( const potrace_param_t* param,
|
|
|
|
const potrace_bitmap_t* bm );
|
|
|
|
|
|
|
|
/* free a Potrace state */
|
|
|
|
void potrace_state_free( potrace_state_t* st );
|
|
|
|
|
|
|
|
/* return a static plain text version string identifying this version
|
|
|
|
* of potracelib */
|
|
|
|
const char* potrace_version( void );
|
|
|
|
|
|
|
|
#endif /* POTRACELIB_H */
|