Init() public method

public Init ( ) : void
return void
Esempio n. 1
0
        public void AddPolygon()
        {
            if (Polygons.Count < Settings.ActivePolygonsMax)
            {
                var newPolygon = new DnaPolygon();
                newPolygon.Init();

                int index = Tools.GetRandomNumber(0, Polygons.Count);

                Polygons.Insert(index, newPolygon);
                SetDirty();
            }
        }
Esempio n. 2
0
        public void AddPolygon()
        {
            var newPolygon = new DnaPolygon(tool);
            newPolygon.Init();

            Shapes.Add(newPolygon);
            SetDirty();
        }
Esempio n. 3
0
        public void AddPolygon(JobInfo info)
        {
            if (Polygons.Count < info.Settings.PolygonsMax)
            {
                var newPolygon = new DnaPolygon();
                newPolygon.Init(this, info);

                int index = info.GetRandomNumber(0, Polygons.Count);

                Polygons.Insert(index, newPolygon);

                SetDirty();
            }
        }
Esempio n. 4
0
        internal virtual void WorkLoop(Intracommunicator comm)
        {
            startTime = DateTime.Now;
            Console.WriteLine("Starting worker {0} ", comm.Rank);
            var timer = new Stopwatch();


            int partitionHeight = info.SourceImage.Height / comm.Size;
            int partitionY = partitionHeight * comm.Rank;

            for (int i = 0; i < info.Settings.PolygonsMax; i++)
            {
                var polygon = new DnaPolygon();
                parentDrawing.Polygons.Add(polygon);
                polygon.Init(parentDrawing, info);

                //foreach (DnaPoint p in polygon.Points)
                //{
                //    p.Y = partitionY + partitionHeight / 2;
                //}
            }

            int waitTimer = 0;
            while (true)
            {
                if (comm.Rank == 0)
                    NotifyProgress(generation);

                timer.Reset();
                timer.Start();

                while (timer.ElapsedMilliseconds < waitTimer)
                {                   
                    
                    var currentDrawing = parentDrawing.GetMutatedChild(info);
                    var currentErrorLevel = GetFitnessForDrawing(currentDrawing);

                    if (currentErrorLevel < parentErrorLevel)
                    {
                        parentErrorLevel = currentErrorLevel;
                        parentDrawing = currentDrawing;
                    }
                }

                if (waitTimer < 6000)
                    waitTimer += 500;

                timer.Stop();

                generation++;               

                var drawingInfo = new MpiWorkerDrawingInfo
                                      {
                                          Drawing = parentDrawing
                                      };


            //    Stopwatch swSync = new Stopwatch();
            //    swSync.Start();
                MpiWorkerDrawingInfo[] allResults = comm.Allgather(drawingInfo);

                if (bgImage != null)
                    bgImage.Dispose();

                bgImage = new Bitmap(info.SourceImage.Width, info.SourceImage.Height,
                                         PixelFormat.Format32bppArgb);
                var bgGraphics = Graphics.FromImage(bgImage);

                bgGraphics.Clear(Color.Black);
                bgGraphics.SmoothingMode = SmoothingMode.HighQuality;
                for (int i = 0; i < comm.Rank; i++)
                {
                    Renderer.Render(allResults[i].Drawing, bgGraphics, 1);
                }

                if (fgImage != null)
                    fgImage.Dispose();

                fgImage = new Bitmap(info.SourceImage.Width, info.SourceImage.Height,
                                         PixelFormat.Format32bppArgb);
                var fgGraphics = Graphics.FromImage(fgImage);

                fgGraphics.Clear(Color.Transparent);
                fgGraphics.SmoothingMode = SmoothingMode.HighQuality;
                for (int i = comm.Rank + 1; i < comm.Size; i++)
                {
                    Renderer.Render(allResults[i].Drawing, fgGraphics, 1);
                }

                fgGraphics.Dispose();
                bgGraphics.Dispose();
               

                //recalc the new parent error level
                parentErrorLevel = GetFitnessForDrawing(parentDrawing);
            //    swSync.Stop();

            //    Console.WriteLine("sync {0}", swSync.Elapsed);
            }
        }