public void Render(Graphics2D renderer)
        {
            //render the stats
            string s = "Generation:          " + m_iGenerations.ToString();

            MatterHackers.Agg.UI.TextWidget GenerationText = new MatterHackers.Agg.UI.TextWidget(s, 9);
            GenerationText.OriginRelativeParent = new Vector2(150, 10);
            //GenerationText.Render(renderer);

            //do not render if running at accelerated speed
            if (!m_bFastRender)
            {
                //render the mines
                for (int i = 0; i < m_vecMines.Count; ++i)
                {
                    //grab the vertices for the mine shape
                    List <Vector3> mineVB = new List <Vector3>();
                    foreach (Vector3 vector in m_MineVB)
                    {
                        mineVB.Add(vector);
                    }

                    WorldTransform(mineVB, m_vecMines[i]);

                    //draw the mines
                    m_LinesToDraw.remove_all();
                    m_LinesToDraw.MoveTo(mineVB[0].x, mineVB[0].y);
                    for (int vert = 1; vert < mineVB.Count; ++vert)
                    {
                        m_LinesToDraw.LineTo(mineVB[vert].x, mineVB[vert].y);
                    }

                    renderer.Render(m_LinesToDraw, m_BlackPen);
                }

                RGBA_Bytes currentColor = m_RedPen;
                //render the sweepers
                for (int i = 0; i < m_vecSweepers.Count; i++)
                {
                    //grab the sweeper vertices
                    List <Vector3> sweeperVB = new List <Vector3>();
                    foreach (Vector3 vector in m_SweeperVB)
                    {
                        sweeperVB.Add(vector);
                    }

                    //transform the vertex buffer
                    m_vecSweepers[i].WorldTransform(sweeperVB);

                    //draw the sweeper left track
                    m_LinesToDraw.remove_all();
                    m_LinesToDraw.MoveTo(sweeperVB[0].x, sweeperVB[0].y);
                    for (int vert = 1; vert < 4; ++vert)
                    {
                        m_LinesToDraw.LineTo(sweeperVB[vert].x, sweeperVB[vert].y);
                    }

                    if (i == m_pGA.NumElite)
                    {
                        currentColor = m_BlackPen;
                    }

                    renderer.Render(m_LinesToDraw, currentColor);

                    //draw the sweeper right track
                    m_LinesToDraw.remove_all();
                    m_LinesToDraw.MoveTo(sweeperVB[4].x, sweeperVB[4].y);
                    for (int vert = 5; vert < 8; ++vert)
                    {
                        m_LinesToDraw.LineTo(sweeperVB[vert].x, sweeperVB[vert].y);
                    }
                    renderer.Render(m_LinesToDraw, currentColor);

                    // draw the body
                    m_LinesToDraw.remove_all();
                    m_LinesToDraw.MoveTo(sweeperVB[8].x, sweeperVB[8].y);
                    m_LinesToDraw.LineTo(sweeperVB[9].x, sweeperVB[9].y);
                    m_LinesToDraw.MoveTo(sweeperVB[10].x, sweeperVB[10].y);
                    for (int vert = 11; vert < 16; ++vert)
                    {
                        m_LinesToDraw.LineTo(sweeperVB[vert].x, sweeperVB[vert].y);
                    }
                    renderer.Render(m_LinesToDraw, currentColor);
                }
            }
            else
            {
                PlotStats(renderer);
            }
        }
Beispiel #2
0
		public void Render(Graphics2D renderer)
		{
			//render the stats
			string s = "Generation:          " + m_iGenerations.ToString();
			MatterHackers.Agg.UI.TextWidget GenerationText = new MatterHackers.Agg.UI.TextWidget(s, 9);
			GenerationText.OriginRelativeParent = new Vector2(150, 10);
			//GenerationText.Render(renderer);

			//do not render if running at accelerated speed
			if (!m_bFastRender)
			{
				//render the mines
				for (int i = 0; i < m_vecMines.Count; ++i)
				{
					//grab the vertices for the mine shape
					List<Vector3> mineVB = new List<Vector3>();
					foreach (Vector3 vector in m_MineVB)
					{
						mineVB.Add(vector);
					}

					WorldTransform(mineVB, m_vecMines[i]);

					//draw the mines
					m_LinesToDraw.remove_all();
					m_LinesToDraw.MoveTo(mineVB[0].x, mineVB[0].y);
					for (int vert = 1; vert < mineVB.Count; ++vert)
					{
						m_LinesToDraw.LineTo(mineVB[vert].x, mineVB[vert].y);
					}

					renderer.Render(m_LinesToDraw, m_BlackPen);
				}

				RGBA_Bytes currentColor = m_RedPen;
				//render the sweepers
				for (int i = 0; i < m_vecSweepers.Count; i++)
				{
					//grab the sweeper vertices
					List<Vector3> sweeperVB = new List<Vector3>();
					foreach (Vector3 vector in m_SweeperVB)
					{
						sweeperVB.Add(vector);
					}

					//transform the vertex buffer
					m_vecSweepers[i].WorldTransform(sweeperVB);

					//draw the sweeper left track
					m_LinesToDraw.remove_all();
					m_LinesToDraw.MoveTo(sweeperVB[0].x, sweeperVB[0].y);
					for (int vert = 1; vert < 4; ++vert)
					{
						m_LinesToDraw.LineTo(sweeperVB[vert].x, sweeperVB[vert].y);
					}

					if (i == m_pGA.NumElite)
					{
						currentColor = m_BlackPen;
					}

					renderer.Render(m_LinesToDraw, currentColor);

					//draw the sweeper right track
					m_LinesToDraw.remove_all();
					m_LinesToDraw.MoveTo(sweeperVB[4].x, sweeperVB[4].y);
					for (int vert = 5; vert < 8; ++vert)
					{
						m_LinesToDraw.LineTo(sweeperVB[vert].x, sweeperVB[vert].y);
					}
					renderer.Render(m_LinesToDraw, currentColor);

					// draw the body
					m_LinesToDraw.remove_all();
					m_LinesToDraw.MoveTo(sweeperVB[8].x, sweeperVB[8].y);
					m_LinesToDraw.LineTo(sweeperVB[9].x, sweeperVB[9].y);
					m_LinesToDraw.MoveTo(sweeperVB[10].x, sweeperVB[10].y);
					for (int vert = 11; vert < 16; ++vert)
					{
						m_LinesToDraw.LineTo(sweeperVB[vert].x, sweeperVB[vert].y);
					}
					renderer.Render(m_LinesToDraw, currentColor);
				}
			}
			else
			{
				PlotStats(renderer);
			}
		}
        //this function plots a graph of the average and best fitnesses
        //over the course of a run
        private void PlotStats(Graphics2D renderer)
        {
            if (m_vecBestFitness.Count == 0)
            {
                return;
            }
            string s = "Best Fitness:       " + m_pGA.BestFitness.ToString();

            MatterHackers.Agg.UI.TextWidget InfoText = new MatterHackers.Agg.UI.TextWidget(s, 9);
            InfoText.OriginRelativeParent = new Vector2(5, 30);
            //InfoText.Render(renderer);

            s        = "Average Fitness: " + m_pGA.AverageFitness.ToString();
            InfoText = new MatterHackers.Agg.UI.TextWidget(s, 9);
            InfoText.OriginRelativeParent = new Vector2(5, 45);
            //InfoText.Render(renderer);

            //render the graph
            double HSlice = (double)cxClient / (m_iGenerations + 1);
            double VSlice = (double)(cyClient / ((m_BestFitnessYet + 1) * 2));

            bool foundNewBest = false;

            if (m_vecBestFitness[m_vecBestFitness.Count - 1] > m_BestFitnessYet ||
                m_BestLinesToDraw == null ||
                LastFitnessCount != m_vecBestFitness.Count)
            {
                LastFitnessCount = m_vecBestFitness.Count;
                m_BestFitnessYet = m_vecBestFitness[m_vecBestFitness.Count - 1];

                foundNewBest = true;
            }

            if (foundNewBest)
            {
                //plot the graph for the best fitness
                double x = 0;
                m_BestPathToDraw.remove_all();
                m_BestPathToDraw.MoveTo(0, 0);
                for (int i = 0; i < m_vecBestFitness.Count; ++i)
                {
                    m_BestPathToDraw.LineTo(x, VSlice * m_vecBestFitness[i]);
                    x += HSlice;
                }

                m_BestLinesToDraw = new Stroke(m_BestPathToDraw);

                //plot the graph for the average fitness
                x = 0;

                m_AveragePathToDraw.remove_all();
                m_AveragePathToDraw.MoveTo(0, 0);
                for (int i = 0; i < m_vecAvFitness.Count; ++i)
                {
                    m_AveragePathToDraw.LineTo(x, VSlice * m_vecAvFitness[i]);
                    x += HSlice;
                }

                m_AverageLinesToDraw = new Stroke(m_AveragePathToDraw);
            }
            else
            {
                renderer.Render(m_BestLinesToDraw, m_BluePen);
                renderer.Render(m_AverageLinesToDraw, m_RedPen);
            }
        }
Beispiel #4
0
		//this function plots a graph of the average and best fitnesses
		//over the course of a run
		private void PlotStats(Graphics2D renderer)
		{
			if (m_vecBestFitness.Count == 0)
			{
				return;
			}
			string s = "Best Fitness:       " + m_pGA.BestFitness.ToString();
			MatterHackers.Agg.UI.TextWidget InfoText = new MatterHackers.Agg.UI.TextWidget(s, 9);
			InfoText.OriginRelativeParent = new Vector2(5, 30);
			//InfoText.Render(renderer);

			s = "Average Fitness: " + m_pGA.AverageFitness.ToString();
			InfoText = new MatterHackers.Agg.UI.TextWidget(s, 9);
			InfoText.OriginRelativeParent = new Vector2(5, 45);
			//InfoText.Render(renderer);

			//render the graph
			double HSlice = (double)cxClient / (m_iGenerations + 1);
			double VSlice = (double)(cyClient / ((m_BestFitnessYet + 1) * 2));

			bool foundNewBest = false;
			if (m_vecBestFitness[m_vecBestFitness.Count - 1] > m_BestFitnessYet
				|| m_BestLinesToDraw == null
				|| LastFitnessCount != m_vecBestFitness.Count)
			{
				LastFitnessCount = m_vecBestFitness.Count;
				m_BestFitnessYet = m_vecBestFitness[m_vecBestFitness.Count - 1];

				foundNewBest = true;
			}

			if (foundNewBest)
			{
				//plot the graph for the best fitness
				double x = 0;
				m_BestPathToDraw.remove_all();
				m_BestPathToDraw.MoveTo(0, 0);
				for (int i = 0; i < m_vecBestFitness.Count; ++i)
				{
					m_BestPathToDraw.LineTo(x, VSlice * m_vecBestFitness[i]);
					x += HSlice;
				}

				m_BestLinesToDraw = new Stroke(m_BestPathToDraw);

				//plot the graph for the average fitness
				x = 0;

				m_AveragePathToDraw.remove_all();
				m_AveragePathToDraw.MoveTo(0, 0);
				for (int i = 0; i < m_vecAvFitness.Count; ++i)
				{
					m_AveragePathToDraw.LineTo(x, VSlice * m_vecAvFitness[i]);
					x += HSlice;
				}

				m_AverageLinesToDraw = new Stroke(m_AveragePathToDraw);
			}
			else
			{
				renderer.Render(m_BestLinesToDraw, m_BluePen);
				renderer.Render(m_AverageLinesToDraw, m_RedPen);
			}
		}