void Merge(Polygon *P) { Aet *k; Segment *sg, *sp; register float I, J; register int next_obj, top, bottom, line; /* setup code for polygon scan conversion goes here */ top = P->ymin; bottom = P->ymax; for (line = top; line < bottom; line++) { /* code to maintain AET goes here */ next_obj = 0; while (sg != NULL) { if (I <= sg->min) { if (J < sg->min) { next_obj = 1; } else if (J < sg->max) { Paint(sg->min, J, line, ds); sg->max = sg->min; sg->min = J+1; next_obj = 1; } else { Paint(sg->min, sg->max, line, ds); if (J == sg->max) next_obj = 1; Delete(sp, sg); sp = sg; sg = sg->next; } } else { if (I > sg->max) { sp = sg; sg = sg->next; } else if (J < sg->max) { Paint(I, J, line, ds); Split(I-1, J+1, sg); next_obj = 1; } else if (J == sg->max) { Paint(I, J, line, ds); sg->max = I-1; next_obj = 1; sp = sg; sg = sg->next; } else { Paint(I, sg->max, line, ds); sg->max = I-1; sp = sg; sg = sg->next; } } if (next_obj) { if ((k=k->next) == NULL) break; I=k->x; k=k->next; J=k->x; next_obj = 0; } } } }