void RasterShapeIntervals::getExcludedIntervals(int y1, int y2, IntShapeIntervals& result) const { ASSERT(y2 >= y1); if (y2 < bounds().y() || y1 >= bounds().maxY()) return; y1 = std::max(y1, bounds().y()); y2 = std::min(y2, bounds().maxY()); result = intervalsAt(y1); for (int y = y1 + 1; y < y2; y++) { IntShapeIntervals intervals; IntShapeInterval::uniteShapeIntervals(result, intervalsAt(y), intervals); result.swap(intervals); } }
void RasterShapeIntervals::getIncludedIntervals(int y1, int y2, IntShapeIntervals& result) const { ASSERT(y2 >= y1); if (y1 < bounds().y() || y2 > bounds().maxY()) return; for (int y = y1; y < y2; y++) { if (intervalsAt(y).isEmpty()) return; } result = intervalsAt(y1); for (int y = y1 + 1; y < y2 && !result.isEmpty(); y++) { IntShapeIntervals intervals; IntShapeInterval::intersectShapeIntervals(result, intervalsAt(y), intervals); result.swap(intervals); } }