public Interseccion (Calle norte, Calle oeste, Calle sur, Calle este, double posicion_x, double posicion_y) : base (posicion_x, posicion_y) { this.norte = norte; this.oeste = oeste; this.sur = sur; this.este = este; this.ancho = 36; }
public static bool estaSobre(Calle elemento) { int x = (int)elemento.X; int y = (int)elemento.Y; int xR = Modificar.posX; int yR = Modificar.posY; int largo = elemento.Largo; int ancho = elemento.Ancho; if (elemento.obtenerOrientacionSimple () == Elemento.HORIZONTAL && xR >= x && xR <= x + largo && yR >= y && yR <= y + ancho) { sobreCalle = elemento; idElementoEliminar = elemento.Id; if (!Modificar.eliminarCalles) { if (yR < y + ancho / 2) carril = Elemento.CARRIL1; else carril = Elemento.CARRIL2; } return true; } if (elemento.obtenerOrientacionSimple () == Elemento.VERTICAL && xR >= x && xR <= x + ancho && yR >= y && yR <= y + largo) { sobreCalle = elemento; idElementoEliminar = elemento.Id; if (!Modificar.eliminarCalles) { if (xR < x + ancho / 2) carril = Elemento.CARRIL2; else carril = Elemento.CARRIL1; } return true; } if (sobreCalle != null && sobreCalle.Id == elemento.Id) { carril = -1; idElementoEliminar = -1; sobreCalle = null; } return false; }
private void dibujarCalle(Graphics grafico, Calle calle) { int x = (int)calle.X; int y = (int)calle.Y; Color colorBorde = Configuracion.COLORBORDE; Color colorLinea = Configuracion.COLORLINEA; Color colorFlecha = Configuracion.COLORFLECHA; if (Modificar.eliminarCalles && Modificar.estaSobre(calle)) { colorBorde = Configuracion.COLORRESALTAR; colorLinea = Configuracion.COLORRESALTAR; colorFlecha = Configuracion.COLORRESALTAR; } if (Modificar.modificando != Modificar.eliminarCalles) { Modificar.estaSobre (calle); } //Dibuja las Calles if (calle.Orientacion == Elemento.HORIZONTAL) { grafico.FillRectangle (new SolidBrush (Configuracion.COLORCALLE), x, y, calle.Largo, calle.Ancho); grafico.DrawRectangle (new Pen (colorBorde, 2), x, y, calle.Largo, calle.Ancho); for(int xc=0; xc<calle.Largo; xc=xc+8) { grafico.FillRectangle (new SolidBrush (colorLinea), x+xc, y+17, 4, 2); } } else { grafico.FillRectangle (new SolidBrush (Configuracion.COLORCALLE), x, y, calle.Ancho,calle.Largo); grafico.DrawRectangle (new Pen (colorBorde, 2), x, y, calle.Ancho, calle.Largo); //grafico.FillRectangle (new SolidBrush (Configuracion.COLORBORDE), x+17, y, 2, 600); for(int yc=0; yc<calle.Largo-4; yc=yc+8) { grafico.FillRectangle (new SolidBrush (colorLinea), x+17, y+yc, 2, 4); } } //Escribe el nombre de la calle if(calle.Orientacion == Elemento.HORIZONTAL) grafico.DrawString(calle.Nombre,new Font("Arial", 10, FontStyle.Bold), new SolidBrush(Configuracion.COLORNOMBRE), new RectangleF(x+(calle.Largo/2)-50,y-19,200,20)); else { StringFormat vertical = new StringFormat (); vertical.FormatFlags = StringFormatFlags.DirectionVertical; grafico.DrawString(calle.Nombre,new Font("Arial", 10, FontStyle.Bold), new SolidBrush(Configuracion.COLORNOMBRE), new RectangleF(x+40,y+(calle.Largo/2)-50,20,400), vertical); } //Dibuja las Flechas que indican la direccion de las calles if (calle.obtenerOrientacionSimple () == Elemento.HORIZONTAL) { if (calle.SentidoCarril1 == Elemento.DE1A2) dibujarFlecha (grafico, colorFlecha, DERECHA, Elemento.CARRIL1, 0, calle.Ancho, calle.Largo, x, y); else if (calle.SentidoCarril1 == Elemento.DE2A1) dibujarFlecha (grafico, colorFlecha, IZQUIERDA, Elemento.CARRIL1, 0, calle.Ancho, calle.Largo, x, y); if (calle.SentidoCarril2 == Elemento.DE1A2) dibujarFlecha (grafico, colorFlecha, DERECHA, Elemento.CARRIL2, calle.Id, calle.Ancho, calle.Largo, x, y); else if (calle.SentidoCarril2 == Elemento.DE2A1) dibujarFlecha (grafico, colorFlecha, IZQUIERDA, Elemento.CARRIL2, calle.Id, calle.Ancho, calle.Largo, x, y); } else if (calle.obtenerOrientacionSimple () == Elemento.VERTICAL) { if (calle.SentidoCarril1 == Elemento.DE1A2) dibujarFlecha (grafico, colorFlecha, ABAJO, Elemento.CARRIL1, 0, calle.Ancho, calle.Largo, x, y); else if (calle.SentidoCarril1 == Elemento.DE2A1) dibujarFlecha (grafico, colorFlecha, ARRIBA, Elemento.CARRIL1, 0, calle.Ancho, calle.Largo, x, y); if (calle.SentidoCarril2 == Elemento.DE1A2) dibujarFlecha (grafico, colorFlecha, ABAJO, Elemento.CARRIL2, calle.Id, calle.Ancho, calle.Largo, x, y); else if (calle.SentidoCarril2 == Elemento.DE2A1) dibujarFlecha (grafico, colorFlecha, ARRIBA, Elemento.CARRIL2, calle.Id, calle.Ancho, calle.Largo, x, y); } }
public void unirCalle(Interseccion interseccion, Calle calle) { //Une la interseccion con la calle, basandose en las coordenadas double xI = interseccion.X; double yI = interseccion.Y; double xC = calle.X; double yC = calle.Y; if (yI > yC) { //Indica que se conecta por el norte interseccion.Norte = calle; calle.Salida2 = interseccion; } else if(yI < yC) { //Indica que se conecta por el sur interseccion.Sur = calle; calle.Salida1 = interseccion; } else if(xI > xC) { //Indica que se conecta por el oeste interseccion.Oeste = calle; calle.Salida2 = interseccion; } else if(xI < xC) { //Indica que se conecta por el este interseccion.Este = calle; calle.Salida1 = interseccion; } }