예제 #1
0
        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;
            }
        }
예제 #2
0
        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();
        }