static inline void appendX1Values(const IntShapeIntervals& intervals, int minIntervalWidth, Vector<int>& result) { for (unsigned i = 0; i < intervals.size(); i++) { if (intervals[i].width() >= minIntervalWidth) result.append(intervals[i].x1()); } }
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); } }
static inline bool shapeIntervalsContain(const IntShapeIntervals& intervals, const IntShapeInterval& interval) { for (unsigned i = 0; i < intervals.size(); i++) { if (intervals[i].x1() > interval.x2()) return false; if (intervals[i].contains(interval)) return true; } return false; }
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); } }
static inline void appendLineSegments(const IntShapeIntervals& intervals, SegmentList& result) { for (unsigned i = 0; i < intervals.size(); i++) result.append(LineSegment(intervals[i].x1(), intervals[i].x2() + 1)); }