public bool DoesLocusIntersect(Loci pobjTarget)
        {
            PointF point = new PointF(0, 0);

            switch (this.Type)
            {
            case LociType.Line:
                switch (pobjTarget.Type)
                {
                case LociType.Line:
                    return(IntersectionHelpers.DoLinesIntersect(this.Line, pobjTarget.Line, ref point));

                case LociType.Point:
                    return(IntersectionHelpers.DoLinesIntersect(this.Line, pobjTarget.CreateLineFromPoint(), ref point));

                case LociType.Rectangle:
                    return(IntersectionHelpers.DoesLineIntersectRectangle(pobjTarget.Rectangle, this.Line));
                }
                break;

            case LociType.Point:
                switch (pobjTarget.Type)
                {
                case LociType.Line:
                    return(IntersectionHelpers.DoLinesIntersect(pobjTarget.Line, this.CreateLineFromPoint(), ref point));

                case LociType.Point:
                    return(this.Point.Equals(pobjTarget.Point));

                case LociType.Rectangle:
                    return(pobjTarget.Rectangle.Contains(this.Point));
                }
                break;

            case LociType.Rectangle:
                switch (pobjTarget.Type)
                {
                case LociType.Line:
                    return(IntersectionHelpers.DoesLineIntersectRectangle(this.Rectangle, pobjTarget.Line));

                case LociType.Point:
                    return(this.Rectangle.Contains(pobjTarget.Point));

                case LociType.Rectangle:
                    return(pobjTarget.Rectangle.IntersectsWith(this.Rectangle));
                }
                break;
            }

            throw new NotSupportedException();
        }
        /// <returns>Returns the loci which describes the intersection. WARNING: Where points are concerned it is assumed the point does intersect so the point simply gets returned. This is to prevent multiple calls to DoesLocusIntersect.</returns>
        public Loci GetLocusIntersection(Loci pobjTarget)
        {
            switch (this.Type)
            {
            case LociType.Line:
                switch (pobjTarget.Type)
                {
                case LociType.Line:
                    PointF objReturn = PointF.Empty;
                    IntersectionHelpers.DoLinesIntersect(this.Line, pobjTarget.Line, ref objReturn);
                    return(new Loci(objReturn));

                case LociType.Point:
                    // Need to change this to return New Loci() if not intersecting.
                    return(new Loci(pobjTarget.Point));

                case LociType.Rectangle:
                    Line objReturn2 = null;
                    if (IntersectionHelpers.DoesLineIntersectRectangle(pobjTarget.Rectangle, this.Line, ref objReturn2))
                    {
                        return(new Loci(objReturn2));
                    }
                    else
                    {
                        return(new Loci());
                    }
                }
                break;

            case LociType.Point:
                switch (pobjTarget.Type)
                {
                case LociType.Line:
                    return(new Loci(this.Point));

                case LociType.Point:
                    return(new Loci(this.Point));

                case LociType.Rectangle:
                    return(new Loci(this.Point));
                }
                break;

            case LociType.Rectangle:
                switch (pobjTarget.Type)
                {
                case LociType.Line:
                    Line objReturn = null;
                    if (IntersectionHelpers.DoesLineIntersectRectangle(this.Rectangle, pobjTarget.Line, ref objReturn))
                    {
                        return(new Loci(objReturn));
                    }
                    else
                    {
                        return(new Loci());
                    }

                case LociType.Point:
                    return(new Loci(pobjTarget.Point));

                case LociType.Rectangle:
                    RectangleF objRectangle = new RectangleF(pobjTarget.Rectangle.Location, pobjTarget.Rectangle.Size);
                    objRectangle.Intersect(this.Rectangle);
                    return(new Loci(objRectangle));
                }
                break;
            }

            throw new NotSupportedException();
        }