Esempio n. 1
0
        public void StartNest()
        {
            current = null;
            nest    = new SvgNest();
            Background.cacheProcess2 = new Dictionary <string, NFP[]>();

            Background.window      = new windowUnk();
            Background.callCounter = 0;
        }
Esempio n. 2
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);
            }
        }