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; } }
private void EscogeCamino(String camino) { foreach (Cvertice vertice in grafo.nodos) { if (vertice.Valor == camino) { vertice.Color = Color.Yellow; } } Pizarra.Refresh(); }
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; } }
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; } } } }
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(); }
private void Pizarra_MouseLeave(object sender, EventArgs e) { Pizarra.Refresh(); }