Exemplo n.º 1
0
        List <streckenModul> routeSearch(streckenModul Aktuell, streckenModul Ziel, List <streckenModul> Besucht)
        {
            Besucht.Add(Aktuell);
            if (Aktuell == Ziel)
            {
                var Lizte = new List <streckenModul>();
                Lizte.Add(Aktuell);
                return(Lizte);
            }
            else
            {
                foreach (var con in Aktuell.Verbindungen)
                {
                    if (!(Besucht.Contains(con)))
                    {
                        var rList = routeSearch(con, Ziel, Besucht);
                        if (!(rList == null))
                        {
                            rList.Insert(0, Aktuell);
                            return(rList);
                        }
                    }
                }
            }

            return(null);
        }
Exemplo n.º 2
0
        public int getStationDistance(streckenModul mod, int X, int Y)
        {
            int deltaX = mod.PIX_X - X;
            int deltaY = mod.PIX_Y - Y;

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

            return(dist);
        }
Exemplo n.º 3
0
        streckenModul modulEinlesen(string Speicherort)
        {
            streckenModul aktMod = new streckenModul(Speicherort);

            if (!aktMod.isSane)
            {
                return(null);
            }

            return(aktMod);
        }
Exemplo n.º 4
0
        bool isVisible(streckenModul mod)
        {
            double ax       = border_east - border_west;
            double ay       = border_north - border_south;
            double halfDiag = Math.Sqrt(ax * ax + ay * ay) * 0.5;
            double dx       = mod.UTM_WE - center_WE;
            double dy       = mod.UTM_NS - center_NS;
            double dist     = Math.Sqrt(dx * dx + dy * dy);

            return(dist < (mod.drawDist + halfDiag));
        }
Exemplo n.º 5
0
        public streckenModul getNearestStation(int X, int Y)
        {
            double        dist       = -1;
            streckenModul nearestMod = null;

            if (modVisible.Count == 0)
            {
                return(null);
            }
            foreach (streckenModul mod in modVisible)
            {
                double modDist = getStationDistance(mod, X, Y);
                if (((dist > modDist) || (dist == -1)) && !(modDist < 0))
                {
                    dist       = modDist;
                    nearestMod = mod;
                }
            }
            return(nearestMod);
        }
Exemplo n.º 6
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));
            }
        }
Exemplo n.º 7
0
        public modContainer()
        {
            var timeGesamt = new System.Diagnostics.Stopwatch();

            timeGesamt.Start();

            //Durchläuft das Streckenverzeichnis und sucht nach allen .st3-Dateien
            try
            {
                DirBase = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Zusi3", "DatenVerzeichnis", "").ToString();
            }
            catch (Exception)
            {
                try
                {
                    DirBase = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Zusi3", "DatenVerzeichnis", "").ToString();
                }
                catch (Exception)
                {
                    MessageBox.Show("Datenverzeichnis konnte nicht gefunden werden.", "Fataler Fehler", MessageBoxButtons.OK);
                    Application.Exit();
                }
            }


            if (DirBase[DirBase.Length - 1] != '\\')
            {
                DirBase += '\\';
            }
            DirRoute = DirBase + "Routes\\Deutschland\\";

            List <string> st3Fehler = new List <string>();

            foreach (string grid in Directory.GetDirectories(DirRoute))
            {
                foreach (string mod in Directory.GetDirectories(grid))
                {
                    foreach (string st3 in Directory.GetFiles(mod, "*.st3"))
                    {
                        if (!st3.Contains("ummy"))
                        {
                            streckenModul aktModul = modulEinlesen(st3);
                            if (!(aktModul == null))
                            {
                                mSammlung.Add(aktModul);
                            }
                            else
                            {
                                st3Fehler.Add(st3);
                            }
                        }
                    }
                }
            }

            moduleVerlinken();

            timeGesamt.Stop();
            loadTime = timeGesamt.ElapsedMilliseconds;
            //MessageBox.Show("Einlesen hat " + timeGesamt.ElapsedMilliseconds + " ms gedauert.", "Gesamtdauer des Einlesens", MessageBoxButtons.OK);



            if (st3Fehler.Count > 0)
            {
                string errMsg = "Fehler beim Laden der folgenden Module:";
                foreach (var st3 in st3Fehler)
                {
                    errMsg += "\n - " + st3;
                }
                errMsg += "\n\nDie betroffenen Module wurden ignoriert.";
                MessageBox.Show(errMsg, "Fehler in .st3-Dateien", MessageBoxButtons.OK);
            }
        }
Exemplo n.º 8
0
        //Wandelt die als String gespeicherten Verbindungen in Pointer um.
        void moduleVerlinken()
        {
            //MessageBox.Show("Module werden jetzt verlinkt.", "Debugnachricht", MessageBoxButtons.OK);
            foreach (streckenModul aktModul in mSammlung)
            {
                aktModul.Verbindungen = new List <streckenModul>();
                foreach (string connectionString in aktModul.VerbindungenStr)
                {
                    streckenModul connectionObj = sucheMod(connectionString);
                    if (!(connectionObj == null))
                    {
                        aktModul.Verbindungen.Add(connectionObj);
                    }
                    else
                    {
                        aktModul.NetzGrenze = true;
                        //aktModul.VerbindungenStr.Remove(connectionString);
                    }
                }
            }

            //Delete one-sided connections.
            foreach (streckenModul mod in mSammlung)
            {
                foreach (var connection in mod.Verbindungen.ToArray())
                {
                    //if (! connection.Verbindungen.Contains(mod))
                    //{
                    //    mod.Verbindungen.Remove(connection);
                    //}
                }

                if (mod.Verbindungen.Count < 2)
                {
                    mod.NetzGrenze = true;
                    //if (true || mod.Verbindungen.Count != mod.VerbindungenStr.Count)
                    //{
                    //    string msgString = "Eingelesene Verbindungen:";
                    //    foreach (var item in mod.VerbindungenStr)
                    //    {
                    //        msgString += "\n" + item;
                    //    }
                    //    msgString += "\nVerbliebene Verbindungen:";
                    //    foreach (var item in mod.Verbindungen)
                    //    {
                    //        msgString += "\n" + item.modName;
                    //    }
                    //    MessageBox.Show(msgString, "Grenzreport für " + mod.modName, MessageBoxButtons.OK);
                    //}
                }
                if ((mod.Verbindungen.Count > 2) || (mod.NetzGrenze))
                {
                    mod.wichtig = true;
                }
                //DrawDist eintragen.
                double dist = 0;
                foreach (var con in mod.Verbindungen)
                {
                    double dx = mod.UTM_WE - con.UTM_WE;
                    double dy = mod.UTM_NS - con.UTM_NS;

                    double modDist = Math.Sqrt(dx * dx + dy * dy);

                    if (modDist > dist)
                    {
                        dist = modDist;
                    }
                }
                mod.drawDist = dist;
            }

            //string problemstellen = "";
            //verlinke fahrstraßen mit referenzen.
            var unvollständigeFahrstraßen = new List <streckenModul.fahrStr>();

            foreach (var mod in mSammlung)
            {
                foreach (var fstr in mod.FahrStr)
                {
                    fstr.StartMod = mod;
                    fstr.Start    = mod.sucheReferenz(fstr.StartRef);
                    //if (fstr.Start == null || fstr.Start.Signal == null)
                    if (fstr.Start == null)
                    {
                        unvollständigeFahrstraßen.Add(fstr);
                        continue;
                    }
                    else
                    {
                        fstr.Start.abgehendeFahrstraßen.Add(fstr);
                    }
                    fstr.ZielMod = sucheMod(fstr.ZielMod_Str);
                    if (fstr.ZielMod == null)
                    {
                        unvollständigeFahrstraßen.Add(fstr);
                        continue;
                    }
                    else
                    {
                        fstr.Ziel = fstr.ZielMod.sucheReferenz(fstr.ZielRef);
                        //if (fstr.Ziel == null ||fstr.Ziel.Signal == null)
                        if (fstr.Ziel == null)
                        {
                            unvollständigeFahrstraßen.Add(fstr);
                            continue;
                        }
                    }
                }
                foreach (var ufstr in unvollständigeFahrstraßen) //Entfernen von unvollständigen Fahrstraßen.
                {
                    mod.FahrStr.Remove(ufstr);
                }
            }

            //Folgestraßen eintragen
            foreach (var mod in mSammlung)
            {
                foreach (var fstr in mod.FahrStr)
                {
                    fstr.folgeStraßen = new List <streckenModul.fahrStr>();

                    if (!(fstr.Ziel == null))
                    {
                        foreach (var fort in fstr.ZielMod.FahrStr)
                        {
                            if (fstr.Ziel == fort.Start)
                            {
                                fstr.folgeStraßen.Add(fort);
                            }
                        }
                    }
                }
            }


            //Sammle abgehende Fahrstraßen zu Signalen in Modul.
            foreach (var mod in mSammlung)
            {
                foreach (var fstr in mod.FahrStr) //Start- und Zielsignale in den entsprechenden Modulen ein.
                {
                    fstr.Start.istStart = true;
                    if (!(mod.StartSignale.Contains(fstr.Start)))
                    {
                        mod.StartSignale.Add(fstr.Start);
                    }
                    if (!(mod.StartUndZielSignale.Contains(fstr.Start)))
                    {
                        mod.StartUndZielSignale.Add(fstr.Start);
                    }

                    fstr.Ziel.istZiel = true;
                    if (!(fstr.ZielMod.ZielSignale.Contains(fstr.Ziel)))
                    {
                        fstr.ZielMod.ZielSignale.Add(fstr.Ziel);
                    }
                    if (!(fstr.ZielMod.StartUndZielSignale.Contains(fstr.Ziel)))
                    {
                        fstr.ZielMod.StartUndZielSignale.Add(fstr.Ziel);
                    }
                }
            }
        }