Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }