internal Geometry Difference(Extents lhs, Extents rhs) { Extents union = new Extents(_factory, lhs, rhs); List <Extents> components = new List <Extents>(); components.AddRange(union.Split(rhs.LowerLeft)); components.AddRange(union.Split(rhs.LowerRight)); components.AddRange(union.Split(rhs.UpperLeft)); components.AddRange(union.Split(rhs.UpperRight)); for (Int32 i = components.Count - 1; i >= 0; i--) { if (components[i].IsEmpty || rhs.Overlaps(components[i])) { components.RemoveAt(i); } } Extents diff = Extents.Join(_factory, components.ToArray()); if (diff.Contains(rhs)) { return(lhs.ToGeometry()); } else { return(diff.ToGeometry()); } }
/// <summary> /// Checks whether this point intersects an <see cref="Extents"/> /// </summary> /// <param name="box">Box</param> /// <returns>True if they intersect</returns> public Boolean Intersects(Extents box) { return(box.Contains(this)); }