public void Compute() { AllCuts = new List <Cut>(); order.OrderByDesc(); for (int iDet = 0; iDet < order.Count - 1; iDet++) { Cut detCut = billet.Fill(order[iDet].Detail, CutThick); int index = 1; while (detCut.CountOf(order[iDet].Detail) != 0) { for (int j = iDet + 1; j < order.Count; j++) { detCut.Fill(order[j].Detail, CutThick); } AllCuts.Add(detCut.Clone()); Detail nextDet = detCut.RemoveButNotLast(order.LastDetail(), CutThick); // не главная и не самая маленька деталь! if (nextDet != null) { nextDet = order[order.GetNumber(nextDet) + 1].Detail; } while (nextDet != null) { for (int j = order.GetNumber(nextDet); j < order.Count; j++) { detCut.Fill(order[j].Detail, CutThick); } AllCuts.Add(detCut.Clone()); nextDet = detCut.RemoveButNotLast(order.LastDetail(), CutThick); if (nextDet != null) { nextDet = order[order.GetNumber(nextDet) + 1].Detail; } } detCut = billet.Fill(order[iDet].Detail, CutThick); for (int i = 0; i < index; i++) { detCut.Remove(order[iDet].Detail, CutThick); } index++; } } AllCuts.Add(billet.Fill(order.LastDetail(), CutThick)); }