/// <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); }
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)); }
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); }