Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
 /// <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));
 }