/*----------------------------------------------------------------------------- Name : btgZip Description : fixup seaming Inputs : Outputs : btgPolys are adjusted to eliminate seaming Return : ----------------------------------------------------------------------------*/ void btgZip(void) { sdword i, iPoly; sdword numLeft, numRight; sdword lefts[64], rights[64]; BtgBackground::btgVertex* vert; BtgBackground::btgPolygon* poly; //make lists of left, right verts numLeft = numRight = 0; for (i = 0, vert = btgVerts; i < btgHead->numVerts; i++, vert++) { if (vert->x < 0.5) { lefts[numLeft++] = i; } else if (vert->x > (btgHead->pageWidth - 0.5)) { rights[numRight++] = i; } } //continue only if approximately equal number of edge verts if (abs(numLeft - numRight) > 1) { return; } //sort lists btgSortByY(lefts, numLeft); btgSortByY(rights, numRight); //minimum of edge verts if (numLeft < numRight) { numRight = numLeft; } else if (numRight < numLeft) { numLeft = numRight; } //remove right refs for (i = 0; i < numLeft; i++) { for (iPoly = 0, poly = btgPolys; iPoly < btgHead->numPolys; iPoly++, poly++) { if (poly->v0 == rights[i]) { poly->v0 = lefts[i]; } if (poly->v1 == rights[i]) { poly->v1 = lefts[i]; } if (poly->v2 == rights[i]) { poly->v2 = lefts[i]; } } } }
/*----------------------------------------------------------------------------- Name : btgZip Description : fixup seaming Inputs : Outputs : btgPolys are adjusted to eliminate seaming Return : ----------------------------------------------------------------------------*/ void btgZip(void) { udword i, iPoly; udword numLeft, numRight; udword lefts[64], rights[64]; btgVertex* vert; btgPolygon* poly; //make lists of left, right verts numLeft = numRight = 0; #if BTG_VERBOSE_LEVEL >=3 dbgMessagef("numVerts= %d", btgHead->numVerts); #endif for (i = 0, vert = btgVerts; i < btgHead->numVerts; i++, vert++) { if (vert->x < 0.5) { lefts[numLeft++] = i; } else if (vert->x > (btgHead->pageWidth - 0.5)) { rights[numRight++] = i; } } #if BTG_VERBOSE_LEVEL >=3 dbgMessagef("numLeft= %d, numRight= %d\n", numLeft, numRight); #endif //continue only if approximately equal number of edge verts if ((numLeft > numRight ? numLeft - numRight : numRight - numLeft) > 1) { return; } //sort lists btgSortByY(lefts, numLeft); btgSortByY(rights, numRight); //minimum of edge verts if (numLeft < numRight) { numRight = numLeft; } else if (numRight < numLeft) { numLeft = numRight; } //remove right refs for (i = 0; i < numLeft; i++) { for (iPoly = 0, poly = btgPolys; iPoly < btgHead->numPolys; iPoly++, poly++) { if (poly->v0 == rights[i]) { poly->v0 = lefts[i]; } if (poly->v1 == rights[i]) { poly->v1 = lefts[i]; } if (poly->v2 == rights[i]) { poly->v2 = lefts[i]; } } } }