Пример #1
0
        /// <summary>
        ///     Nearly identical to base, override needed because other classes use road segments
        /// </summary>
        /// <param name="objectAsDict"></param>
        /// <returns></returns>
        protected sealed override List <Segment> GetSegmentList(IDictionary <string, object> objectAsDict)
        {
            if (!objectAsDict.ContainsKey("posList"))
            {
                return(null);
            }
            var lineList     = (List <string>)objectAsDict["posList"];
            var exteriorLine = lineList.First();

            if (string.IsNullOrEmpty(exteriorLine))
            {
                return(null);
            }
            List <Segment> netSegments        = new List <Segment>();
            var            exteriorLinePoints = TranslatorUtils.LineToVectorList(exteriorLine);
            var            reductedPoints     = DouglasPointsReduction.Reduct(exteriorLinePoints, toleranceDP);

            if (reductedPoints.Count <= 1)
            {
                return(null);
            }
            for (int i = 0; i < reductedPoints.Count - 1; i++)
            {
                Segment newSegment = new Segment {
                    p1 = reductedPoints[i], p2 = reductedPoints[i + 1]
                };
                netSegments.Add(newSegment);
                TranslatorInitiator.GridSegment.Add(newSegment);
            }
            return(netSegments);
        }
Пример #2
0
 protected sealed override HashSet <Vector2> GetPointsInArea(IDictionary <string, object> objectAsDict)
 {
     if (!isTree && !isPropArea)
     {
         if (!objectAsDict.ContainsKey("posList"))
         {
             return(null);
         }
         var lineList = (List <string>)objectAsDict["posList"];
         List <List <Vector2> > lineV2List = new List <List <Vector2> >();
         foreach (var line in lineList)
         {
             var polygon = TranslatorUtils.LineToVectorList(line);
             lineV2List.Add(polygon);
         }
         var avgPoint = Calculations.AvgPoint(lineV2List[0]);
         if (!TranslatorUtils.IsNaNVector2(avgPoint))
         {
             currentPoint = avgPoint;
             return(new HashSet <Vector2> {
                 avgPoint
             });
         }
     }
     return(base.GetPointsInArea(objectAsDict));
 }
Пример #3
0
        protected override HashSet <Vector2> GetPointsInArea(IDictionary <string, object> objectAsDict)
        {
            if (!objectAsDict.ContainsKey("posList"))
            {
                return(null);
            }

            var lineList   = (List <string>)objectAsDict["posList"];
            var exteriorV2 = TranslatorUtils.LineToVectorList(lineList[0], CoordinatesCalc.IsInResourceRange);

            if (exteriorV2.Count < 3)
            {
                return(null);
            }

            var areaMinMax = Calculations.FindMaxMin(exteriorV2);
            var points     = AdditionalPointsCreation.CreatePointArray(areaMinMax[0], areaMinMax[1], gridDist);
            List <List <Vector2> > interiors = new List <List <Vector2> >();

            if (lineList.Count > 1)
            {
                for (int i = 1; i < lineList.Count; i++)
                {
                    interiors.Add(TranslatorUtils.LineToVectorList(lineList[i], CoordinatesCalc.IsInResourceRange));
                }
            }

            HashSet <Vector2> selectedPoints = new HashSet <Vector2>();

            foreach (var p in points)
            {
                if (Calculations.PointInPoly(exteriorV2, p) &&
                    (interiors == null || !interiors.Any(interior => Calculations.PointInPoly(interior, p))))
                {
                    selectedPoints.Add(p);
                }
            }
            return(selectedPoints);
        }