Ejemplo n.º 1
0
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            Grafo g2;

            pm = e.Location;
            p  = pm;
            switch (e.Button.ToString())
            {
            case "Left":
                if (accion != 0 && accion != 1)
                {
                    band = true;
                    Form1_Paint(this, null);
                    band = false;
                }
                break;

            case "Right":
                int total = grafo.Aristas.Count;
                for (int i = 0; i < total; i++)
                {
                    arista = grafo.Aristas[i];
                    if (arista.toca(pm))
                    {
                        MenuArista.Enabled    = true;
                        MenuArista.ClientSize = new Size(50, 50);
                        MenuArista.Visible    = true;
                        MenuArista.Show(Cursor.Position);
                        break;
                    }
                }
                break;
            }
        }
Ejemplo n.º 2
0
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics au;

            au = Graphics.FromImage(bmp1);
            au.Clear(BackColor);

            if (bandComplemento == 1)
            {
                Grafo aux = new Grafo();
                aux             = grafo;
                grafo           = new Grafo(aux);
                bandComplemento = 0;
            }

            if (band)
            {
                //au.Clear(BackColor);
                switch (accion)
                {
                case 1:
                    bool num;
                    int  iaux;
                    if (grafo.Count > 0)
                    {
                        if ((int.TryParse(grafo[0].NOMBRE.ToString(), out iaux)) == true)
                        {
                            num = true;
                        }
                        else
                        {
                            num = false;
                        }
                    }
                    else
                    {
                        num = false;
                    }
                    if (num == false)
                    {
                        nu = new NodoP(pm, nombre);
                        nombre++;
                    }
                    else
                    {
                        nu        = new NodoP(pm, nombre);
                        nu.NOMBRE = numero.ToString();
                        numero++;
                    }
                    if (grafo.Count == 0)
                    {
                        //           Dirigida.Enabled = NoDirigida.Enabled = true;
                    }
                    if (grafo.Count > 1)
                    {
                        nu.COLOR = grafo[0].COLOR;
                    }
                    grafo.AgregaNodo(nu);
                    AgregaRelacion.Enabled = true;
                    gactivo = true;
                    nu      = null;
                    break;

                case 2:
                    nu = (NodoP)grafo.Find(delegate(NodoP a) { if (pm.X > a.POS.X - 15 && pm.X < a.POS.X + 30 && pm.Y > a.POS.Y - 15 && pm.Y < a.POS.Y + 30)
                                                               {
                                                                   return(true);
                                                               }
                                                               else
                                                               {
                                                                   return(false);
                                                               } });
                    break;

                case 3:
                    nu = (NodoP)grafo.Find(delegate(NodoP a) { if (pm.X > a.POS.X - 15 && pm.X < a.POS.X + 30 && pm.Y > a.POS.Y - 15 && pm.Y < a.POS.Y + 30)
                                                               {
                                                                   return(true);
                                                               }
                                                               else
                                                               {
                                                                   return(false);
                                                               } });
                    p = pm;

                    break;

                case 5:
                    Grafo aux = new Grafo();
                    aux = grafo;
                    aux.Sort(delegate(NodoP a, NodoP b) { return(a.POS.X.CompareTo(b.POS.X)); });
                    if (pm.X > aux.ToArray()[0].POS.X && pm.X < aux.ToArray()[aux.Count - 1].POS.X)
                    {
                        aux.Sort(delegate(NodoP a, NodoP b) { return(a.POS.Y.CompareTo(b.POS.Y)); });
                        if (pm.Y > aux.ToArray()[0].POS.Y && pm.Y < aux.ToArray()[aux.Count - 1].POS.Y)
                        {
                            mov = true;
                        }
                        else
                        {
                            mov = false;
                        }
                    }
                    else
                    {
                        mov = false;
                    }
                    break;

                case 6:
                    int    total = grafo.Aristas.Count;
                    Arista arista;
                    for (int i = 0; i < total; i++)
                    {
                        arista = grafo.Aristas[i];
                        if (arista.toca(pm))
                        {
                            grafo.RemueveArista(arista);

                            break;
                        }
                    }
                    break;

                case 14:
                    Arista ari;
                    NodoP  o, d;
                    o = d = null;
                    if (bandcam == true)
                    {
                        ari   = new Arista();;
                        grafo = new Grafo(g2);
                        grafo.Aristas.Clear();
                        foreach (NodoP rel in grafo)
                        {
                            rel.relaciones.Clear();
                        }
                        bandcam = false;
                        au.Clear(BackColor);
                    }

                    if (tck == true)
                    {
                        accion = 0;
                        tck    = false;
                        if (icam > 0)
                        {
                            grafo.Find(delegate(NodoP dx) { if (dx.NOMBRE == CCE[icam].NOMBRE)
                                                            {
                                                                return(true);
                                                            }
                                                            else
                                                            {
                                                                return(false);
                                                            } }).insertaRelacion(grafo.Find(delegate(NodoP ox) { if (ox.NOMBRE == CCE[icam - 1].NOMBRE)
                                                                                                                 {
                                                                                                                     return(true);
                                                                                                                 }
                                                                                                                 else
                                                                                                                 {
                                                                                                                     return(false);
                                                                                                                 } }), grafo.Aristas.Count);
                            d = grafo.Find(delegate(NodoP dx) { if (dx.NOMBRE == CCE[icam].NOMBRE)
                                                                {
                                                                    return(true);
                                                                }
                                                                else
                                                                {
                                                                    return(false);
                                                                } });
                            o = grafo.Find(delegate(NodoP ox) { if (ox.NOMBRE == CCE[icam - 1].NOMBRE)
                                                                {
                                                                    return(true);
                                                                }
                                                                else
                                                                {
                                                                    return(false);
                                                                } });
                            d.COLOR = Color.Blue;
                            o.COLOR = Color.Blue;
                            Pen penn = new Pen(Brushes.Red);
                            penn.Width = 4;
                            g.DrawEllipse(penn, new Rectangle(d.POS.X - 16, d.POS.Y - 16, 30, 30));

                            ari = new Arista(1, d, o, "e" + (CCE.Count - icam).ToString());

                            grafo.AgregaArista(ari);
                        }
                        grafo.pinta(g);
                    }
                    break;
                }
                if (gis != null)
                {
                    gis.pinta(au);
                    g.DrawImage(bmp1, 0, 0);
                }
                grafo.pinta(au);
                g.DrawImage(bmp1, 0, 0);
            }
            else
            {
                switch (accion)
                {
                case 1:
                    break;

                case 2:
                    if (nu != null)
                    {
                        nu.POS = pm;
                        au.Clear(BackColor);
                    }
                    break;

                case 3:
                    au.Clear(BackColor);
                    if (nu != null)
                    {
                        au.DrawLine(fl, p, pm);
                    }

                    break;

                case 5:
                    if (mov)
                    {
                        Point po = new Point(pm.X - p.X, pm.Y - p.Y);
                        foreach (NodoP n in grafo)
                        {
                            Point nue = new Point(n.POS.X + po.X, n.POS.Y + po.Y);
                            n.POS = nue;
                        }

                        p = pm;
                        au.Clear(BackColor);
                    }

                    break;
                }
                if (gis != null)
                {
                    gis.pinta(au);
                    g.DrawImage(bmp1, 0, 0);
                }
                grafo.pinta(au);
                g.DrawImage(bmp1, 0, 0);
            }
        }