X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fpoly.h;h=68026228cfc4765cd90c0fa95750f02c7ef5b113;hp=2a76a4c3476fc7403d2a64549215c6b611cf5238;hb=33e9461da6b886671749d6cbabd80b355ab1f6d9;hpb=ae7c92fe5721f97e786a8bbe9153eadbf292460d diff --git a/lib/gfxpoly/poly.h b/lib/gfxpoly/poly.h index 2a76a4c..6802622 100644 --- a/lib/gfxpoly/poly.h +++ b/lib/gfxpoly/poly.h @@ -4,6 +4,10 @@ #include #include "../q.h" +//#define DEBUG +//#define CHECKS +#define SPLAY + typedef enum {DIR_UP, DIR_DOWN} segment_dir_t; typedef enum {EVENT_CROSS, EVENT_END, EVENT_CORNER, EVENT_START, EVENT_HORIZONTAL} eventtype_t; typedef enum {SLOPE_POSITIVE, SLOPE_NEGATIVE} slope_t; @@ -55,6 +59,11 @@ typedef struct _segment { windstate_t wind; int nr; +#ifdef SPLAY + struct _segment*parent; + struct _segment*leftchild; + struct _segment*rightchild; +#endif struct _segment*left; struct _segment*right; char changed; @@ -78,20 +87,20 @@ typedef struct _segment { #define XPOS_INT(s,ypos) ((int)ceil(XPOS((s),ypos))) #define XDIFF(s1,s2,ypos) (((s1)->k + (double)(s1)->delta.x*ypos)*(s2)->delta.y - \ - ((s2)->k + (double)(s1)->delta.x*ypos)*(s1)->delta.y) - -// rewrite as XDIFF==0? -#define XPOS_EQ(s1,s2,ypos) (XPOS((s1),(ypos))==XPOS((s2),(ypos))) + ((s2)->k + (double)(s2)->delta.x*ypos)*(s1)->delta.y) typedef struct _gfxpoly { double gridsize; edge_t*edges; } gfxpoly_t; +void gfxpoly_fail(char*expr, char*file, int line, const char*function); + gfxpoly_t* gfxpoly_new(double gridsize); char gfxpoly_check(gfxpoly_t*poly); int gfxpoly_size(gfxpoly_t*poly); void gfxpoly_dump(gfxpoly_t*poly); +gfxpoly_t* gfxpoly_save(gfxpoly_t*poly, const char*filename); gfxpoly_t* gfxpoly_process(gfxpoly_t*poly, windrule_t*windrule); typedef struct _event { @@ -101,4 +110,14 @@ typedef struct _event { segment_t*s2; } event_t; +#ifndef CHECKS +#ifdef assert +#undef assert +#endif +#define assert(x) +#else +#define assert(x) ((x)?0:gfxpoly_fail(__STRING(x), __FILE__, __LINE__, __PRETTY_FUNCTION__)) +#endif + + #endif