public SiteCoordRange GetRange(List <Point> coordinates) { if (coordinates.Count == 0) { return(NewRange()); } var siteCoords = new SiteCoordRange { MaxX = coordinates.Max(p => p.X), MaxY = coordinates.Max(p => p.Y), MinX = coordinates.Min(p => p.X), MinY = coordinates.Min(p => p.Y) }; return(siteCoords); }
public List <Point> FindRowPlacingPoints(SolarPanel solarPanel, SiteCoordRange siteRange, List <Point> sitePoints, List <Point> restrictionPoints) { var rowPoints = new List <Point>(); for (double xPoint = siteRange.MinX; xPoint < siteRange.MaxX; ++xPoint) { solarPanel.OriginPoint.X = xPoint; if (CanPanelFit(solarPanel, sitePoints, restrictionPoints)) { rowPoints.Add(new Point(solarPanel.OriginPoint)); xPoint += solarPanel.Length + solarPanel.ColumnSpacing - 1; } } return(rowPoints); }
public void GetRange_InputNegativePointList_ReturnsSiteCoordRange() { var zoneCalculations = new ZoneCalculations(); var coordinatesList = new List <Point> { new Point(-4, 5), new Point(1, 10), new Point(6, -15), new Point(-10, -2) }; var expected = new SiteCoordRange() { MaxX = 6, MaxY = 10, MinX = -10, MinY = -15 }; var result = zoneCalculations.GetRange(coordinatesList); Assert.AreEqual(expected, result); }
public List <Point> FindPlacingPoints(SolarPanel solarPanel, List <Point> sitePoints, List <Point> restrictionPoints, SiteCoordRange siteRange) { var pointsForPanelPlacing = new List <Point>(); for (double yPoint = siteRange.MinY; yPoint < siteRange.MaxY; ++yPoint) { solarPanel.OriginPoint.Y = yPoint; var placingPointsInRow = FindRowPlacingPoints(solarPanel, siteRange, sitePoints, restrictionPoints); pointsForPanelPlacing.AddRange(placingPointsInRow); if (placingPointsInRow.Count > 0) { yPoint += solarPanel.Width + solarPanel.RowSpacing - 1; } } return(pointsForPanelPlacing); }