Example #1
0
        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));
        }