//public List<List<OrderRelatedElement>> ExecuteAlgorithm(Sheet sheet, AlgorithmConstrains constrains) public List <List <OrderRelatedElement> > ExecuteAlgorithm(Sheet sheet, AlgorithmConstrains constrains) { List <OrderRelatedElement> rectangles = sheet.OrderRelatedElements.ToList(); List <List <OrderRelatedElement> > resultRectangles = new List <List <OrderRelatedElement> >(); List <OrderRelatedElement> testList = new List <OrderRelatedElement>(); //iterate through whole rectangle list to find best fitting rectangles for height of the sheet testList.AddRange(StartAlgotithm(sheet, constrains, rectangles)); resultRectangles.Add(testList); return(resultRectangles); }
private List <OrderRelatedElement> StartAlgotithm(Sheet sheet, AlgorithmConstrains constrains, List <OrderRelatedElement> rectangles) { List <List <OrderRelatedElement> > result = ProduceWithoutRecursion(rectangles); //list of list of rectangles height List <OrderRelatedElement> bestRectangles = DetermineBestList(result, constrains.CutLineLimit, sheet.Size.Height); //rectangles that have best fit List <OrderRelatedElement> arrangedRectnagles = ArrangeRectangles(bestRectangles, sheet.Size.Width); // arranged rectangles allArrangedRectangles.AddRange(arrangedRectnagles); rectangles = rectangles.Except(bestRectangles).ToList(); if (rectangles.Count > 0) { StartAlgotithm(sheet, constrains, rectangles); } return(allArrangedRectangles); }
public List <List <OrderRelatedElement> > ExecuteAlgorithm(Sheet sheet, AlgorithmConstrains constrains) { List <List <OrderRelatedElement> > resultRectangles = new List <List <OrderRelatedElement> >(); List <OrderRelatedElement> fittingRectangles = new List <OrderRelatedElement>(); List <OrderRelatedElement> rectangles = new List <OrderRelatedElement>(); rectangles = sheet.OrderRelatedElements.ToList(); int sheetHeight = sheet.Size.Height; int sheetWidth = sheet.Size.Width; List <OrderRelatedElement> firstsInColumns = new List <OrderRelatedElement>(); int heightOffset = 0; int widthOffset = 0; firstsInColumns.Add(rectangles.First()); foreach (OrderRelatedElement rectangle in rectangles) { if (rectangle.Size.Height <= CalculateRemainingHeight()) //fits by height { rectangle.Location = new Point(widthOffset, heightOffset); fittingRectangles.Add(rectangle); heightOffset += rectangle.Size.Height; } else if (rectangle.Size.Width <= CalculateRemainingWidth()) //fits by width { firstsInColumns.Add(rectangle); heightOffset = 0; rectangle.Location = new Point(widthOffset, heightOffset); heightOffset += rectangle.Size.Height; fittingRectangles.Add(rectangle); } else// jesli sie nie miesci na sheecie/cutlimicie to wsyzstkie kolejne prostokaty ida na nastepnego sheeta { firstsInColumns.Clear(); firstsInColumns.Add(rectangle); resultRectangles.Add(fittingRectangles); fittingRectangles = new List <OrderRelatedElement>() { rectangle }; heightOffset = 0; widthOffset = 0; rectangle.Location = new Point(widthOffset, heightOffset); heightOffset += rectangle.Size.Height; } } resultRectangles.Add(fittingRectangles); return(resultRectangles); int CalculateRemainingHeight() { return(sheetHeight - heightOffset); } int CalculateRemainingWidth() { widthOffset = 0; foreach (var bRectangle in firstsInColumns) { widthOffset += bRectangle.Size.Width; } return(sheetWidth - widthOffset); } }