コード例 #1
0
ファイル: Simulador.cs プロジェクト: skyguardPenguin/Grafos
        private void Pizarra_MouseUp(object sender, MouseEventArgs e)
        {
            switch (var_control)
            {
            case 1:    //Dibujando arco

                if ((NodoDestino = grafo.DetectarPunto(e.Location)) != null && NodoOrigen != NodoDestino)
                {
                    if (grafo.AgregarArco(NodoOrigen, NodoDestino))  //Se procede a crear la arista
                    {
                        int    distX     = Math.Abs(NodoDestino.Posicion.X - NodoOrigen.Posicion.X);
                        int    distY     = Math.Abs(NodoDestino.Posicion.Y - NodoOrigen.Posicion.Y);
                        double distancia = Math.Sqrt(distY * distY + distX * distX);


                        NodoOrigen.ListaAdyacencia.Find(v => v.nDestino == NodoDestino).peso = (int)distancia;
                    }
                }
                var_control = 0;
                NodoOrigen  = null;
                NodoDestino = null;
                Pizarra.Refresh();
                break;
            }
        }
コード例 #2
0
ファイル: Simulador.cs プロジェクト: IsaacChaverri/IA
 private void EscogeCamino(String camino)
 {
     foreach (Cvertice vertice in grafo.nodos)
     {
         if (vertice.Valor == camino)
         {
             vertice.Color = Color.Yellow;
         }
     }
     Pizarra.Refresh();
 }
コード例 #3
0
ファイル: Simulador.cs プロジェクト: skyguardPenguin/Grafos
        private void Pizarra_MouseMove(object sender, MouseEventArgs e)
        {
            switch (var_control)
            {
            case 2:    //Creando nuevo nodo
                if (nuevoNodo != null)
                {
                    int posX = e.Location.X;
                    int posY = e.Location.Y;
                    if (posX < nuevoNodo.Dimensiones.Width / 2)
                    {
                        posX = nuevoNodo.Dimensiones.Width / 2;
                    }
                    else if (posX > Pizarra.Size.Width - nuevoNodo.Dimensiones.Width / 2)
                    {
                        posX = Pizarra.Size.Width - nuevoNodo.Dimensiones.Width / 2;
                    }

                    if (posY < nuevoNodo.Dimensiones.Height / 2)
                    {
                        posY = nuevoNodo.Dimensiones.Height / 2;
                    }
                    else if (posY > Pizarra.Size.Height - nuevoNodo.Dimensiones.Height / 2)
                    {
                        posY = Pizarra.Size.Height - nuevoNodo.Dimensiones.Height / 2;
                    }

                    nuevoNodo.Posicion = new Point(posX, posY);
                    Pizarra.Refresh();
                    nuevoNodo.DibujarVertice(Pizarra.CreateGraphics());
                }
                break;

            case 1:    //Dibujar arco
                AdjustableArrowCap bigArrow = new AdjustableArrowCap(4, 4, true);
                bigArrow.BaseCap = System.Drawing.Drawing2D.LineCap.Triangle;
                Pizarra.Refresh();
                Pizarra.CreateGraphics().DrawLine
                (
                    new Pen(Brushes.Black, 2)
                {
                    CustomEndCap = bigArrow
                },
                    NodoOrigen.Posicion, e.Location
                );
                break;
            }
        }
コード例 #4
0
ファイル: Simulador.cs プロジェクト: skyguardPenguin/Grafos
        private void Pizarra_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                if ((NodoOrigen = grafo.DetectarPunto(e.Location)) != null)
                {
                    var_control = 1;
                }
                if (nuevoNodo != null && NodoOrigen == null)
                {
                    ventanaVertice.Visible = false;
                    ventanaVertice.control = false;
                    grafo.AgregarVertice(nuevoNodo);
                    ventanaVertice.ShowDialog();

                    if (ventanaVertice.control)
                    {
                        if (grafo.BuscarVertice(ventanaVertice.txtVertice.Text) == null)
                        {
                            nuevoNodo.Valor = ventanaVertice.txtVertice.Text;
                        }
                        else
                        {
                            MessageBox.Show("El Nodo " + ventanaVertice.txtVertice.Text + " ya existe en el grafo", "Error nuevo nodo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                    nuevoNodo   = null;
                    var_control = 0;
                    Pizarra.Refresh();
                }
            }
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                if (var_control == 0)
                {
                    if ((NodoOrigen = grafo.DetectarPunto(e.Location)) != null)
                    {
                        CMSCrearVertice.Text = "Nodo " + NodoOrigen.Valor;
                    }
                    else
                    {
                        Pizarra.ContextMenuStrip = this.CMSCrearVertice;
                    }
                }
            }
        }
コード例 #5
0
ファイル: Simulador.cs プロジェクト: IsaacChaverri/IA
        private void nuevoVerticeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int posX = 200;

            int offsetY = Pizarra.Height / 5;
            int posY    = 0;

            for (int i = 0; i < ListaNodos.Grafo.Count; i++)
            {
                nuevoNodo       = new Cvertice();
                nuevoNodo.Valor = ListaNodos.Grafo[i].Nombre;
                grafo.AgregarVertice(nuevoNodo);
                if (i == 0)
                {
                    nuevoNodo.Posicion = new Point(30, Pizarra.Height / 2);
                }
                else
                {
                    posY += offsetY;
                    if (posY >= Pizarra.Height - offsetY)
                    {
                        posX += 120;
                        posY  = offsetY;
                    }
                    nuevoNodo.Posicion = new Point(posX, posY);
                }
                Pizarra.Refresh();
                nuevoNodo.DibujarVertice(Pizarra.CreateGraphics());
            }

            foreach (Nodo nodo in ListaNodos.Grafo)
            {
                foreach (Arista arista in nodo.Aristas)
                {
                    NodoOrigen  = BuscaNodo(arista.partida.Nombre);
                    NodoDestino = BuscaNodo(arista.destino.Nombre);
                    if (grafo.AgregarArco(NodoOrigen, NodoDestino))
                    {
                        int distancia = arista.peso;
                        NodoOrigen.ListaAdyacencia.Find(v => v.nDestino == NodoDestino).peso = distancia;
                    }
                }
            }
            flag = true;
            Pizarra.Refresh();
        }
コード例 #6
0
ファイル: Simulador.cs プロジェクト: skyguardPenguin/Grafos
 private void Pizarra_MouseLeave(object sender, EventArgs e)
 {
     Pizarra.Refresh();
 }