public void StartNest() { current = null; nest = new SvgNest(); Background.cacheProcess2 = new Dictionary <string, NFP[]>(); Background.window = new windowUnk(); Background.callCounter = 0; }
public void DeepNestIterate() { List <NFP> lsheets = new List <NFP>(); List <NFP> lpoly = new List <NFP>(); for (int i = 0; i < polygons.Count; i++) { polygons[i].id = i; } for (int i = 0; i < sheets.Count; i++) { sheets[i].id = i; } foreach (var item in polygons) { NFP clone = new NFP(); clone.id = item.id; clone.source = item.source; clone.Points = item.Points.Select(z => new SvgPoint(z.x, z.y) { exact = z.exact }).ToArray(); lpoly.Add(clone); } foreach (var item in sheets) { RectanglePolygonSheet clone = new RectanglePolygonSheet(); clone.id = item.id; clone.source = item.source; clone.Points = item.Points.Select(z => new SvgPoint(z.x, z.y) { exact = z.exact }).ToArray(); lsheets.Add(clone); } var grps = lpoly.GroupBy(z => z.source).ToArray(); if (Background.UseParallel) { Parallel.ForEach(grps, (item) => { SvgNest.offsetTree(item.First(), 1.0 * SvgNest.Config.spacing, SvgNest.Config); foreach (var zitem in item) { zitem.Points = item.First().Points.ToArray(); } }); } else { foreach (var item in grps) { SvgNest.offsetTree(item.First(), 1.0 * SvgNest.Config.spacing, SvgNest.Config); foreach (var zitem in item) { zitem.Points = item.First().Points.ToArray(); } } } foreach (var item in lsheets) { SvgNest.offsetTree(item, -1.0 * SvgNest.Config.spacing, SvgNest.Config, true); } List <NestItem> partsLocal = new List <NestItem>(); var p1 = lpoly.GroupBy(z => z.source).Select(z => new NestItem() { Polygon = z.First(), IsSheet = false, Quanity = z.Count() }); var p2 = lsheets.GroupBy(z => z.source).Select(z => new NestItem() { Polygon = z.First(), IsSheet = true, Quanity = z.Count() }); partsLocal.AddRange(p1); partsLocal.AddRange(p2); int srcc = 0; foreach (var item in partsLocal) { item.Polygon.source = srcc++; } nest.launchWorkers(partsLocal.ToArray()); var plcpr = nest.nests.First(); if (current == null || plcpr.fitness < current.fitness) { AssignPlacement(plcpr); } }