X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fconvert.c;h=e326333d1b9154735ed3282e8533497e5ddf1597;hp=aea0a171d57869da297aadffd5a3bfb7511ddc31;hb=ba166d59c4c6672c8cb65c881193bb104c629bf7;hpb=ae9783cbbddf61f59a1d43180be3999206e5b28f diff --git a/lib/gfxpoly/convert.c b/lib/gfxpoly/convert.c index aea0a17..e326333 100644 --- a/lib/gfxpoly/convert.c +++ b/lib/gfxpoly/convert.c @@ -5,6 +5,9 @@ #include "../mem.h" #include "poly.h" +/* factor that determines into how many line fragments a spline is converted */ +#define SUBFRACTION (2.4) + static edge_t*edge_new(int x1, int y1, int x2, int y2) { edge_t*s = rfx_calloc(sizeof(edge_t)); @@ -21,6 +24,7 @@ static inline void gfxpoly_add_edge(gfxpoly_t*poly, double _x1, double _y1, doub int y1 = ceil(_y1); int x2 = ceil(_x2); int y2 = ceil(_y2); + if(x1!=x2 || y1!=y2) { edge_t*s = edge_new(x1, y1, x2, y2); s->next = poly->edges; @@ -32,9 +36,6 @@ gfxpoly_t* gfxpoly_from_gfxline(gfxline_t*line, double gridsize) { gfxpoly_t*p = gfxpoly_new(gridsize); - /* factor that determines into how many line fragments a spline is converted */ - double subfraction = 2.4;//0.3 - double z = 1.0 / gridsize; double lastx=0, lasty=0; @@ -47,7 +48,7 @@ gfxpoly_t* gfxpoly_from_gfxline(gfxline_t*line, double gridsize) gfxpoly_add_edge(p, lastx, lasty, x, y); } else if(line->type == gfx_splineTo) { int parts = (int)(sqrt(fabs(line->x-2*line->sx+lastx) + - fabs(line->y-2*line->sy+lasty))*subfraction); + fabs(line->y-2*line->sy+lasty))*SUBFRACTION); if(!parts) parts = 1; double stepsize = 1.0/parts; int i; @@ -65,11 +66,23 @@ gfxpoly_t* gfxpoly_from_gfxline(gfxline_t*line, double gridsize) lasty = y; line = line->next; } - + gfxline_free(line); return p; } +typedef struct _gfxstroke { + segment_dir_t dir; + point_t*stroke; + fillstyle_t*fs; + int num_points; +} gfxstroke_t; +typedef struct _gfxcompactpoly { + double gridsize; + int num_strokes; + gfxstroke_t strokes[0]; +} gfxcompactpoly_t; + static char* readline(FILE*fi) { char c;