/// <summary>
        /// Distance to the line.
        /// </summary>
        /// <param name="Line">The line to test.</param>
        public double Distance(C2DLineBase Line)
        {
            if (Lines.Count == 0)
            {
                return(0);
            }

            var pt1 = new C2DPoint();
            var pt2 = new C2DPoint();

            double dMin = Lines[0].Distance(Line, pt1, pt2);
            double dDist;

            for (var i = 1; i < Lines.Count; i++)
            {
                dDist = Lines[i].Distance(Line, pt1, pt2);
                if (dDist == 0)
                {
                    return(0);
                }
                if (dDist < dMin)
                {
                    dMin = dDist;
                }
            }

            if (Contains(Line.GetPointFrom()))
            {
                return(-dMin);
            }
            else
            {
                return(dMin);
            }
        }
        /// <summary>
        /// True if it entirely contains the line.
        /// </summary>
        /// <param name="Line">The line to test.</param>
        public bool Contains(C2DLineBase Line)
        {
            if (!Contains(Line.GetPointFrom()))
            {
                return(false);
            }

            var Pts = new C2DPointSet();

            return(!Crosses(Line, Pts));
        }
Example #3
0
        /// <summary>
        /// Line entirely inside test.
        /// </summary>
        /// <param name="Line">Line to test for.</param>
        public bool Contains(C2DLineBase Line)
        {
            if (!_Rim.Contains(Line))
            {
                return(false);
            }

            for (var i = 0; i < _Holes.Count; i++)
            {
                if (_Holes[i].Crosses(Line) || _Holes[i].Contains(Line.GetPointFrom()))
                {
                    return(false);
                }
            }

            return(true);
        }
Example #4
0
        /// <summary>
        /// Creates a random shape.
        /// </summary>
        /// <param name="cBoundary">The boundary.</param>
        /// <param name="nMinPoints">The minimum points.</param>
        /// <param name="nMaxPoints">The maximum points.</param>
        public bool CreateRandom(C2DRect cBoundary, int nMinPoints, int nMaxPoints)
        {
            C2DPolygon Poly = new C2DPolygon();

            if (!Poly.CreateRandom(cBoundary, nMinPoints, nMaxPoints))
            {
                return(false);
            }

            CRandomNumber rCenOnRight = new CRandomNumber(0, 1);

            this.Set(Poly);

            for (int i = 0; i < Lines.Count; i++)
            {
                C2DLineBase pLine = Lines[i];

                bool          bCenOnRight = (rCenOnRight.GetInt() > 0);
                double        dLength     = pLine.GetLength();
                CRandomNumber Radius      = new CRandomNumber(dLength, dLength * 3);


                C2DArc pNew = new C2DArc(pLine.GetPointFrom(), pLine.GetPointTo(),
                                         Radius.Get(), bCenOnRight, !bCenOnRight);

                if (!this.Crosses(pNew))
                {
                    Lines[i] = pNew;
                    pNew.GetBoundingRect(LineRects[i]);
                    BoundingRect.ExpandToInclude(LineRects[i]);
                }
            }

            //     this.MakeLineRects();
            //      this.MakeBoundingRect();

            return(true);
        }
        /// <summary>
        /// Line entirely inside test.
        /// </summary>
        /// <param name="Line">Line to test for.</param> 
        public bool Contains(C2DLineBase Line) 
        {
            if (!_Rim.Contains(Line))
		        return false;

	        for ( int i = 0 ; i < _Holes.Count; i++)
	        {
		        if (_Holes[i].Crosses(Line) || _Holes[i].Contains( Line.GetPointFrom()))
			        return false;
	        }

	        return true;

        }
Example #6
0
        /// <summary>
        /// Distance to the line.
        /// </summary> 
        /// <param name="Line">The line to test.</param> 
        public double Distance(C2DLineBase Line)
        {
	        if (Lines.Count == 0)
		        return 0;

            C2DPoint pt1 = new C2DPoint();
            C2DPoint pt2 = new C2DPoint();

            double dMin = Lines[0].Distance(Line, pt1, pt2);
	        double dDist;

	        for (int i = 1 ; i < Lines.Count; i++)
	        {
		        dDist = Lines[i].Distance(Line, pt1, pt2);
		        if (dDist == 0 )
			        return 0;
		        if (dDist < dMin)
			        dMin = dDist;
	        }

	        if ( Contains(Line.GetPointFrom()))
		        return -dMin;
	        else
		        return dMin;
        }
Example #7
0
        /// <summary>
        /// True if it entirely contains the line.
        /// </summary> 
        /// <param name="Line">The line to test.</param> 
        public bool Contains(C2DLineBase Line)
        {
            if (!Contains(Line.GetPointFrom()))
                return false;

            C2DPointSet Pts = new C2DPointSet();

            return !Crosses(Line, Pts);
        }