예제 #1
0
        static public bool TryGetIntersection(this Rect item, Rect rect, out Rect intersection)
        {
            return(RectExtensions.TryCreateStrictMinMaxRect(
                       item.xMin.Max(rect.xMin),
                       item.yMin.Max(rect.yMin),

                       item.xMax.Min(rect.xMax),
                       item.yMax.Min(rect.yMax),
                       out intersection
                       ));
        }
예제 #2
0
        static public IEnumerable <Rect> GetSubtraction(this Rect item, Rect to_subtract)
        {
            if (item.TryGetIntersection(to_subtract, out to_subtract) == false)
            {
                yield return(new Rect(item));
            }
            else
            {
                Rect left;
                if (RectExtensions.TryCreateStrictMinMaxRect(
                        item.xMin, to_subtract.yMin,
                        to_subtract.xMin, to_subtract.yMax,
                        out left
                        ))
                {
                    yield return(left);
                }

                Rect right;
                if (RectExtensions.TryCreateStrictMinMaxRect(
                        to_subtract.xMax, to_subtract.yMin,
                        item.xMax, to_subtract.yMax,
                        out right
                        ))
                {
                    yield return(right);
                }

                Rect bottom;
                if (RectExtensions.TryCreateStrictMinMaxRect(
                        item.xMin, item.yMin,
                        item.xMax, to_subtract.yMin,
                        out bottom
                        ))
                {
                    yield return(bottom);
                }

                Rect top;
                if (RectExtensions.TryCreateStrictMinMaxRect(
                        item.xMin, to_subtract.yMax,
                        item.xMax, item.yMax,
                        out top
                        ))
                {
                    yield return(top);
                }
            }
        }