// find the union of "this" and "rect2", and put into "result" bool CRect::Union(CRect& result,const CRect& rect2) const { if(Empty()) { if(rect2.Empty()) { result.Clear(); return false; } else result = rect2; } else { if(rect2.Empty()) result = *this; else { result.left = std::min( left, rect2.left ); result.right = std::max( right, rect2.right ); result.top = std::min( top, rect2.top ); result.bottom = std::max( bottom, rect2.bottom ); } } return true; }
// find the intersection of "this" and "rect2", and put into "result" bool CRect::Intersect(CRect& result,const CRect& rect2) const { if( Empty() || rect2.Empty() || left >= rect2.right || rect2.left >= right || top >= rect2.bottom || rect2.top >= bottom ) { result.Clear(); return false; } result.left = std::max( left, rect2.left ); result.right = std::min( right, rect2.right ); result.top = std::max( top, rect2.top ); result.bottom = std::min( bottom, rect2.bottom ); return true; }