X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fpoly.h;h=180a4f1f7cb21f96d73d465a233c1e2a803928e7;hp=68eec9b792eb6dadd24f4fc991c388fd8b005d96;hb=37ae23b3b4f65f65313ca4648197bf2251211193;hpb=3c6c2c2a98a273483285119b9cc0b782aa8a79c8 diff --git a/lib/gfxpoly/poly.h b/lib/gfxpoly/poly.h index 68eec9b..180a4f1 100644 --- a/lib/gfxpoly/poly.h +++ b/lib/gfxpoly/poly.h @@ -4,15 +4,15 @@ #include #include "../q.h" #include "../types.h" +#include "wind.h" //#define DEBUG -//#define CHECKS +#define CHECKS /* features */ #define SPLAY #define DONT_REMEMBER_CROSSINGS -typedef enum {DIR_UP, DIR_DOWN, DIR_UNKNOWN} segment_dir_t; typedef enum {EVENT_CROSS, EVENT_END, EVENT_START, EVENT_HORIZONTAL} eventtype_t; typedef enum {SLOPE_POSITIVE, SLOPE_NEGATIVE} slope_t; @@ -23,37 +23,14 @@ typedef struct _point { } point_t; type_t point_type; -typedef struct _fillstyle { - void*internal; -} fillstyle_t; - -typedef struct _windstate -{ - char is_filled; - int wind_nr; -} windstate_t; - -/* TODO: maybe we should merge windcontext and windrule */ -typedef struct _windcontext -{ - int num_polygons; -} windcontext_t; - -typedef struct _windrule -{ - windstate_t (*start)(windcontext_t* num_polygons); - windstate_t (*add)(windcontext_t*context, windstate_t left, fillstyle_t*edge, segment_dir_t dir, int polygon_nr); - fillstyle_t* (*diff)(windstate_t*left, windstate_t*right); -} windrule_t; - -#define SEGNR(s) ((s)?(s)->nr:-1) +#define SEGNR(s) ((int)((s)?(s)->nr:-1)) typedef struct _gfxpolystroke { segment_dir_t dir; + edgestyle_t*fs; int points_size; int num_points; point_t*points; - fillstyle_t*fs; struct _gfxpolystroke*next; } gfxpolystroke_t; typedef struct _gfxpoly { @@ -69,8 +46,8 @@ typedef struct _segment { int32_t minx, maxx; segment_dir_t dir; - fillstyle_t*fs; - fillstyle_t*fs_out; + edgestyle_t*fs; + edgestyle_t*fs_out; #ifdef CHECKS char fs_out_ok; #endif @@ -121,6 +98,7 @@ int gfxpoly_num_segments(gfxpoly_t*poly); int gfxpoly_size(gfxpoly_t*poly); void gfxpoly_dump(gfxpoly_t*poly); void gfxpoly_save(gfxpoly_t*poly, const char*filename); +void gfxpoly_save_arrows(gfxpoly_t*poly, const char*filename); gfxpoly_t* gfxpoly_process(gfxpoly_t*poly1, gfxpoly_t*poly2, windrule_t*windrule, windcontext_t*context); gfxpoly_t* gfxpoly_intersect(gfxpoly_t*p1, gfxpoly_t*p2);