X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fconvert.c;h=e326333d1b9154735ed3282e8533497e5ddf1597;hp=f404dfc24b607e99891391cbb023fd7a1898be23;hb=ba166d59c4c6672c8cb65c881193bb104c629bf7;hpb=ae7c92fe5721f97e786a8bbe9153eadbf292460d diff --git a/lib/gfxpoly/convert.c b/lib/gfxpoly/convert.c index f404dfc..e326333 100644 --- a/lib/gfxpoly/convert.c +++ b/lib/gfxpoly/convert.c @@ -1,11 +1,13 @@ #include #include -#include #include #include "../gfxdevice.h" #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)); @@ -22,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; @@ -33,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; @@ -48,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; @@ -66,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; @@ -105,6 +117,7 @@ gfxpoly_t* gfxpoly_from_file(const char*filename, double gridsize) return 0; } int count = 0; + double g = 0; double lastx=0,lasty=0; while(1) { char*line = readline(fi); @@ -125,10 +138,16 @@ gfxpoly_t* gfxpoly_from_file(const char*filename, double gridsize) } lastx = x; lasty = y; + } else if(sscanf(line, "%% gridsize %lf", &g) == 1) { + p->gridsize = g; } free(line); } fclose(fi); - printf("loaded %d points from %s\n", count, filename); + if(g) { + printf("loaded %d points from %s (gridsize %f)\n", count, filename, g); + } else { + printf("loaded %d points from %s\n", count, filename); + } return p; }