void SkOpContour::calcPartialCoincidentWinding() { int count = fPartialCoincidences.count(); #if DEBUG_CONCIDENT if (count > 0) { SkDebugf("%s count=%d\n", __FUNCTION__, count); } #endif for (int index = 0; index < count; ++index) { SkCoincidence& coincidence = fPartialCoincidences[index]; calcCommonCoincidentWinding(coincidence); } }
void SkOpContour::calcPartialCoincidentWinding() { int count = fPartialCoincidences.count(); #if DEBUG_CONCIDENT if (count > 0) { SkDebugf("%s count=%d\n", __FUNCTION__, count); } #endif for (int index = 0; index < count; ++index) { SkCoincidence& coincidence = fPartialCoincidences[index]; calcCommonCoincidentWinding(coincidence); } // if there are multiple pairs of partial coincidence that share an edge, see if the opposite // are also coincident for (int index = 0; index < count - 1; ++index) { const SkCoincidence& coincidence = fPartialCoincidences[index]; int thisIndex = coincidence.fSegments[0]; SkOpContour* otherContour = coincidence.fOther; int otherIndex = coincidence.fSegments[1]; for (int idx2 = 1; idx2 < count; ++idx2) { const SkCoincidence& innerCoin = fPartialCoincidences[idx2]; int innerThisIndex = innerCoin.fSegments[0]; if (thisIndex == innerThisIndex) { checkCoincidentPair(coincidence, 1, innerCoin, 1, true); } if (this == otherContour && otherIndex == innerThisIndex) { checkCoincidentPair(coincidence, 0, innerCoin, 1, true); } SkOpContour* innerOtherContour = innerCoin.fOther; innerThisIndex = innerCoin.fSegments[1]; if (this == innerOtherContour && thisIndex == innerThisIndex) { checkCoincidentPair(coincidence, 1, innerCoin, 0, true); } if (otherContour == innerOtherContour && otherIndex == innerThisIndex) { checkCoincidentPair(coincidence, 0, innerCoin, 0, true); } } } }