Ejemplo n.º 1
0
        List <streckenModul.fahrStr> fstrRouteSearch(streckenModul.fahrStr Aktuell, streckenModul.referenzElement ZielSignal, List <streckenModul.fahrStr> Besucht)
        {
            Besucht.Add(Aktuell);
            if (Aktuell.Ziel.StrElement == ZielSignal.StrElement)
            {
                var Lizte = new List <streckenModul.fahrStr>();
                Lizte.Add(Aktuell);
                return(Lizte);
            }
            else
            {
                foreach (var folge in Aktuell.folgeStraßen)
                {
                    if ((!(Besucht.Contains(folge))) && (folge.Ziel != null))
                    {
                        var rList = fstrRouteSearch(folge, ZielSignal, Besucht);
                        if (!(rList == null))
                        {
                            rList.Insert(0, Aktuell);
                            return(rList);
                        }
                        Besucht.Add(Aktuell);
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 2
0
 private void setZielSig(object sender, EventArgs e)
 {
     zielSignal = tmpSignal;
     if (startSignal == null)
     {
         MessageBox.Show("Startsignal nicht gesetzt!", "Fehler", MessageBoxButtons.OK);
     }
     route();
 }
Ejemplo n.º 3
0
        List <streckenModul.fahrStr> fstrRouteSearchStart(streckenModul.referenzElement StartSignal, streckenModul.referenzElement ZielSignal)
        {
            var Besucht = new List <streckenModul.fahrStr>();

            foreach (var start_fstr in StartSignal.abgehendeFahrstraßen)
            {
                var rList = fstrRouteSearch(start_fstr, ZielSignal, Besucht);
                if (rList != null)
                {
                    return(rList);
                }
            }

            return(null);
        }
Ejemplo n.º 4
0
        public streckenModul.referenzElement getNearestSignal(int X, int Y)
        {
            double dist = -1;

            streckenModul.referenzElement nearestMod = null;
            foreach (streckenModul mod in modVisible)
            {
                foreach (var Signal in mod.StartSignale)
                {
                    double modDist = getSigDistance(Signal, X, Y);
                    if (((dist > modDist) || (dist == -1)) && (modDist >= 0))
                    {
                        dist       = modDist;
                        nearestMod = Signal;
                    }
                }
            }
            return(nearestMod);
        }
Ejemplo n.º 5
0
        public double getSigDistance(streckenModul.referenzElement Signal, int X, int Y)
        {
            double deltaX = 999;
            double deltaY = 999;

            try
            {
                deltaX = Signal.SignalCoord.abs_X - pixToCoord(X, false);
                deltaY = Signal.SignalCoord.abs_Y - pixToCoord(Y, true);
            }
            catch (Exception)
            {
                deltaX = Signal.StrElement.b_X - pixToCoord(X, false);
                deltaY = Signal.StrElement.b_Y - pixToCoord(Y, true);
            }


            double dist = Math.Sqrt(deltaX * deltaX + deltaY * deltaY);

            return(dist);
        }
Ejemplo n.º 6
0
 private void setStartSig(object sender, EventArgs e)
 {
     startSignal = tmpSignal;
 }
Ejemplo n.º 7
0
        private void mMap_MouseUp(object sender, MouseEventArgs e)
        {
            if (mouseDown && (e.Button == MouseButtons.Left))
            {
                mouseDown = false;
                int deltaX = e.X - mouseDownX_rel;
                int deltaY = e.Y - mouseDownY_rel;

                if ((selectRouteStart || selectRouteEnd) && !mouseMoved)
                {
                    var act = (ZugFahrt)ZugFahrtBox.SelectedItem;
                    if (selectRouteStart)
                    {
                        act.ZstartSignal = kartenZeichner.getNearestSignalStartZiel(e.X, e.Y, true);
                        kartenZeichner.setLayers("signal_ziel", true);
                        this.Invalidate();
                        selectRouteStart = false;
                    }
                    else
                    {
                        act.ZzielSignal = kartenZeichner.getNearestSignalStartZiel(e.X, e.Y, false);
                        kartenZeichner.setLayers("signal_start", true);
                        this.Invalidate();
                        selectRouteEnd = false;
                    }

                    if (act.ZstartSignal != null && act.ZzielSignal != null)
                    {
                        act.route = fstrRouteSearchStart(act.ZstartSignal, act.ZzielSignal);
                    }

                    updateZugFields();
                    mMap.Image = kartenZeichner.draw();
                    return;
                }

                int movementThreshold = 3;

                if ((Math.Abs(deltaX) > movementThreshold) || (Math.Abs(deltaY) > movementThreshold))
                {
                    kartenZeichner.move(deltaY, deltaX);
                    mMap.Image = kartenZeichner.draw();
                }
                else if (!mouseMoved)
                {
                    if (moduToolStripMenuItem.Checked && punkteToolStripMenuItem.Checked)
                    {
                        var nächsteStation = kartenZeichner.getNearestStation(e.X, e.Y);
                        if (kartenZeichner.getStationDistance(nächsteStation, e.X, e.Y) < 10)
                        {
                            nächsteStation.selected = !nächsteStation.selected;
                            mMap.Image = kartenZeichner.draw();
                            modListBox.SetSelected(Module.mSammlung.IndexOf(nächsteStation), nächsteStation.selected);
                        }
                    }
                }

                mouseMoved = false;
            }

            if (e.Button == MouseButtons.Right) //HACK: Horrible Right Click Menu
            {
                var nächsteStation = kartenZeichner.getNearestStation(e.X, e.Y);
                horribleHackVariableThatHoldsRightClickModule = nächsteStation;
                tmpSignal = kartenZeichner.getNearestSignal(e.X, e.Y);
                if (nächsteStation == null || tmpSignal == null)
                {
                    return;
                }

                string Signame = tmpSignal.Info;

                //MessageBox.Show(horribleHackVariableThatHoldsRightClickSignal.Info, "Nächstes Signal:", MessageBoxButtons.OK);



                MenuItem[] menuItems = new MenuItem[] { new MenuItem("Pixel: X" + e.X + " - Y" + e.Y),
                                                        new MenuItem("Koordinaten: X" + kartenZeichner.pixToCoord(e.X, false).ToString("F1") + " - Y" + kartenZeichner.pixToCoord(e.Y, true).ToString("F1")),
                                                        new MenuItem("Nächste Station: " + nächsteStation.modName + "; Distanz: " + kartenZeichner.getStationDistance(nächsteStation, e.X, e.Y).ToString()),
                                                        new MenuItem("Nächstes Signal: " + tmpSignal.Info + "-" + Signame + "; Distanz: " + (1000 * kartenZeichner.getSigDistance(tmpSignal, e.X, e.Y)).ToString("F2")),
                                                        new MenuItem(nächsteStation.modName + " im Explorer anzeigen", new EventHandler(showMod)) };

                ContextMenu buttonMenu = new ContextMenu(menuItems);
                buttonMenu.Show(mMap, new Point(e.X, e.Y));
            }
        }
Ejemplo n.º 8
0
        private void drawSignal(List <textField> textManager, streckenModul.referenzElement Signal)
        {
            if (drawSignal_Namen)
            {
                textManager.Add(new textField(coordToPix(Signal.SignalCoord.abs_X, false), coordToPix(Signal.SignalCoord.abs_Y, true), Signal.ToString()));
            }
            int circleSize = 4;

            //Signaldreieck berechnen
            //Spitze
            int p1X = coordToPix(Signal.SignalCoord.abs_X, false);

            if (p1X > map_width_p || p1X < 0)
            {
                return;
            }
            int p1Y = coordToPix(Signal.SignalCoord.abs_Y, true);

            if (p1Y > map_width_p || p1Y < 0)
            {
                return;
            }
            //Vorbereitung für andere Punkte:
            //Vektor zeigt zum anderen Ende
            double VX = 0;
            double VY = 0;
            double p1Xcoord;
            double p1Ycoord;

            if (Signal.StrNorm)
            {
                p1Xcoord = Signal.StrElement.b_X;
                p1Ycoord = Signal.StrElement.b_Y;
                VX       = Signal.StrElement.g_X - Signal.StrElement.b_X;
                VY       = Signal.StrElement.g_Y - Signal.StrElement.b_Y;
            }
            else
            {
                p1Xcoord = Signal.StrElement.g_X;
                p1Ycoord = Signal.StrElement.g_Y;
                VX       = Signal.StrElement.b_X - Signal.StrElement.g_X;
                VY       = Signal.StrElement.b_Y - Signal.StrElement.g_Y;
            }
            //Normieren des Vektors
            double vlen   = (Math.Sqrt(VX * VX + VY * VY)) * pixPerGrad;
            double VXnorm = VX / vlen;
            double VYnorm = VY / vlen;
            //Normalvektor berechnen
            double VXnormnorm = VYnorm;
            double VYnormnorm = -VXnorm;
            //"Unterer" Punkt
            double p2Xcoord = p1Xcoord + 8 * VXnorm + 4 * VXnormnorm;
            double p2Ycoord = p1Ycoord + 8 * VYnorm + 4 * VYnormnorm;
            int    p2X      = coordToPix(p2Xcoord, false);
            int    p2Y      = coordToPix(p2Ycoord, true);
            //"Oberer" Punkt
            double p3Xcoord = p1Xcoord + 8 * VXnorm - 4 * VXnormnorm;
            double p3Ycoord = p1Ycoord + 8 * VYnorm - 4 * VYnormnorm;
            int    p3X      = coordToPix(p3Xcoord, false);
            int    p3Y      = coordToPix(p3Ycoord, true);
            //Sammeln in Array:
            var points = new Point[3];

            points[0] = new Point(p1X, p1Y);
            points[1] = new Point(p2X, p2Y);
            points[2] = new Point(p3X, p3Y);

            //Farbe aussuchen
            Brush SigCol = Brushes.Black;

            if (Signal.istStart && Signal.istZiel)
            {
                SigCol = Brushes.Orange;
            }
            else
            {
                if (Signal.istStart)
                {
                    SigCol = Brushes.Green;
                }
                if (Signal.istZiel)
                {
                    SigCol = Brushes.Red;
                }
            }

            framebuffer.FillPolygon(SigCol, points);
            //framebuffer.FillEllipse(SigCol, coordToPix(Signal.SignalCoord.abs_X, false) - circleSize / 2, coordToPix(Signal.SignalCoord.abs_Y, true) - circleSize / 2, circleSize, circleSize);
        }