KiCad PCB EDA Suite
potracelib.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2001-2017 Peter Selinger.
2  * This file is part of Potrace. It is free software and it is covered
3  * by the GNU General Public License. See the file COPYING for details. */
4 
5 #ifdef HAVE_CONFIG_H
6 #include <config.h>
7 #endif
8 
9 #include <stdlib.h>
10 #include <string.h>
11 
12 #include "curve.h"
13 #include "decompose.h"
14 #include "potracelib.h"
15 #include "progress.h"
16 #include "trace.h"
17 
18 /* default parameters */
20 {
21  2, /* turdsize */
22  POTRACE_TURNPOLICY_MINORITY, /* turnpolicy */
23  1.0, /* alphamax */
24  1, /* opticurve */
25  0.2, /* opttolerance */
26  {
27  NULL, /* callback function */
28  NULL, /* callback data */
29  0.0, 1.0, /* progress range */
30  0.0, /* granularity */
31  },
32 };
33 
34 /* Return a fresh copy of the set of default parameters, or NULL on
35  * failure with errno set. */
37 {
38  potrace_param_t* p;
39 
40  p = (potrace_param_t*) malloc( sizeof( potrace_param_t ) );
41 
42  if( !p )
43  {
44  return NULL;
45  }
46 
47  memcpy( p, &param_default, sizeof( potrace_param_t ) );
48  return p;
49 }
50 
51 
52 /* On success, returns a Potrace state st with st->status ==
53  * POTRACE_STATUS_OK. On failure, returns NULL if no Potrace state
54  * could be created (with errno set), or returns an incomplete Potrace
55  * state (with st->status == POTRACE_STATUS_INCOMPLETE, and with errno
56  * set). Complete or incomplete Potrace state can be freed with
57  * potrace_state_free(). */
59 {
60  int r;
61  path_t* plist = NULL;
62  potrace_state_t* st;
63  progress_t prog;
64  progress_t subprog;
65 
66  /* prepare private progress bar state */
67  prog.callback = param->progress.callback;
68  prog.data = param->progress.data;
69  prog.min = param->progress.min;
70  prog.max = param->progress.max;
71  prog.epsilon = param->progress.epsilon;
72  prog.d_prev = param->progress.min;
73 
74  /* allocate state object */
75  st = (potrace_state_t*) malloc( sizeof( potrace_state_t ) );
76 
77  if( !st )
78  {
79  return NULL;
80  }
81 
82  progress_subrange_start( 0.0, 0.1, &prog, &subprog );
83 
84  /* process the image */
85  r = bm_to_pathlist( bm, &plist, param, &subprog );
86 
87  if( r )
88  {
89  free( st );
90  return NULL;
91  }
92 
94  st->plist = plist;
95  st->priv = NULL; /* private state currently unused */
96 
97  progress_subrange_end( &prog, &subprog );
98 
99  progress_subrange_start( 0.1, 1.0, &prog, &subprog );
100 
101  /* partial success. */
102  r = process_path( plist, param, &subprog );
103 
104  if( r )
105  {
107  }
108 
109  progress_subrange_end( &prog, &subprog );
110 
111  return st;
112 }
113 
114 
115 /* free a Potrace state, without disturbing errno. */
117 {
118  pathlist_free( st->plist );
119  free( st );
120 }
121 
122 
123 /* free a parameter list, without disturbing errno. */
125 {
126  free( p );
127 }
128 
129 
130 #include "potrace_version.h"
131 const char* potrace_version( void )
132 {
133  return POTRACELIB_VERSION;
134 }
void pathlist_free(path_t *plist)
Definition: curve.cpp:81
void potrace_param_free(potrace_param_t *p)
Definition: potracelib.cpp:124
#define POTRACE_STATUS_OK
Definition: potracelib.h:110
static void progress_subrange_start(double a, double b, const progress_t *prog, progress_t *sub)
Definition: progress.h:49
static void progress_subrange_end(progress_t *prog, progress_t *sub)
Definition: progress.h:81
static const potrace_param_t param_default
Definition: potracelib.cpp:19
double max
Definition: progress.h:19
int process_path(path_t *plist, const potrace_param_t *param, progress_t *progress)
Definition: trace.cpp:1499
potrace_state_t * potrace_trace(const potrace_param_t *param, const potrace_bitmap_t *bm)
Definition: potracelib.cpp:58
double d_prev
Definition: progress.h:22
int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress)
Definition: decompose.cpp:565
#define POTRACELIB_VERSION
double min
Definition: progress.h:19
void * data
Definition: progress.h:18
potrace_progress_t progress
Definition: potracelib.h:45
const char * potrace_version(void)
Definition: potracelib.cpp:131
void(* callback)(double progress, void *privdata)
Definition: potracelib.h:30
struct potrace_privstate_s * priv
Definition: potracelib.h:118
double epsilon
Definition: progress.h:20
#define POTRACE_TURNPOLICY_MINORITY
Definition: potracelib.h:23
#define POTRACE_STATUS_INCOMPLETE
Definition: potracelib.h:111
void potrace_state_free(potrace_state_t *st)
Definition: potracelib.cpp:116
potrace_param_t * potrace_param_default(void)
Definition: potracelib.cpp:36
potrace_path_t * plist
Definition: potracelib.h:116
void(* callback)(double progress, void *privdata)
Definition: progress.h:17