예제 #1
0
        /// <summary>
        /// Splits segmentToSplit in two based on iLocation.
        /// First new segment will be added to diced, and second new segment will be returned.
        /// If split doesn't happen, segmentToSplit will be returned.
        /// </summary>
        private static Segment SplitHelper(Segment segmentToSplit, Vector3D iLocation, Polygon diced, List <IntersectionPoint> iPoints)
        {
            List <Segment> split;

            if (segmentToSplit.Split(iLocation, out split))
            {
                Debug.Assert(split.Count == 2);
                diced.Segments.Add(split[0]);

                IntersectionPoint iPoint = new IntersectionPoint();
                iPoint.Location = iLocation;
                iPoint.Index    = diced.Segments.Count;
                iPoints.Add(iPoint);

                return(split[1]);
            }
            else
            {
                // We were presumably at an endpoint.
                // Add to iPoints list only if it was the starting endpoint.
                // (This will avoid duplicate entries).
                if (iLocation.Compare(segmentToSplit.P1))
                {
                    IntersectionPoint iPoint = new IntersectionPoint();
                    iPoint.Location = iLocation;
                    iPoint.Index    = diced.Segments.Count;
                    iPoints.Add(iPoint);
                }

                return(segmentToSplit);
            }
        }