93#define BRESINITPGON(dy, x1, x2, xStart, d, m, m1, incr1, incr2) { \
102 incr1 = -2 * dx + 2 * (dy) * m1; \
103 incr2 = -2 * dx + 2 * (dy) * m; \
104 d = 2 * m * (dy) - 2 * dx - 2 * (dy); \
108 incr1 = 2 * dx - 2 * (dy) * m1; \
109 incr2 = 2 * dx - 2 * (dy) * m; \
110 d = -2 * m * (dy) + 2 * dx; \
115#define BRESINCRPGON(d, minval, m, m1, incr1, incr2) { \
153#define BRESINITPGONSTRUCT(dmaj, min1, min2, bres) \
154 BRESINITPGON(dmaj, min1, min2, bres.minor_axis, bres.d, \
155 bres.m, bres.m1, bres.incr1, bres.incr2)
157#define BRESINCRPGONSTRUCT(bres) \
158 BRESINCRPGON(bres.d, bres.minor_axis, bres.m, bres.m1, bres.incr1, bres.incr2)
211#define COUNTERCLOCKWISE -1
242#define SLLSPERBLOCK 25
264#define EVALUATEEDGEWINDING(pAET, pPrevAET, y, fixWAET) { \
265 if (pAET->ymax == y) { \
266 pPrevAET->next = pAET->next; \
267 pAET = pPrevAET->next; \
270 pAET->back = pPrevAET; \
273 BRESINCRPGONSTRUCT(pAET->bres); \
287#define EVALUATEEDGEEVENODD(pAET, pPrevAET, y) { \
288 if (pAET->ymax == y) { \
289 pPrevAET->next = pAET->next; \
290 pAET = pPrevAET->next; \
292 pAET->back = pPrevAET; \
295 BRESINCRPGONSTRUCT(pAET->bres); \
301#define LARGE_COORDINATE 1000000
302#define SMALL_COORDINATE -LARGE_COORDINATE
322 while (
pSLL && (
pSLL->scanline < scanline)) {
330 if ((!
pSLL) || (
pSLL->scanline > scanline)) {
338 pSLL = &((*SLLBlock)->SLLs[(*iSLLBlock)++]);
344 pSLL->scanline = scanline;
350 start =
pSLL->edgelist;
351 while (start && (start->bres.minor_axis <
ETE->bres.minor_axis)) {
393 if (count < 2)
return;
426 pETEs->ClockWise = 0;
429 pETEs->ClockWise = 1;
435 if (bottom->
fY != top->
fY) {
441 dy = bottom->
fY - top->
fY;
467 while (
AET && (
AET->bres.minor_axis <
ETEs->bres.minor_axis)) {
502 while (
pETEchase->back->bres.minor_axis >
AET->bres.minor_axis) {
struct _EdgeTableEntry EdgeTableEntry
struct _ScanLineListBlock ScanLineListBlock
struct _ScanLineList ScanLineList
static int InsertionSort(EdgeTableEntry *AET)
static void loadAET(EdgeTableEntry *AET, EdgeTableEntry *ETEs)
#define BRESINITPGONSTRUCT(dmaj, min1, min2, bres)
static void FreeStorage(ScanLineListBlock *pSLLBlock)
static void InsertEdgeInET(EdgeTable *ET, EdgeTableEntry *ETE, int scanline, ScanLineListBlock **SLLBlock, int *iSLLBlock)
static void CreateETandAET(int count, TPoint *pts, EdgeTable *ET, EdgeTableEntry *AET, EdgeTableEntry *pETEs, ScanLineListBlock *pSLLBlock)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
struct _EdgeTableEntry * next
struct _EdgeTableEntry * back
struct _EdgeTableEntry * nextWETE
struct _ScanLineListBlock * next
EdgeTableEntry * edgelist
struct _ScanLineList * next