public void TrackProperties(eTrack track)
 {
     propertylist.Add(new Property { label = "Name", source=track,path = "source.name"} );
     propertylist.Add(new Property { label = "ID", source=track, path = "source.id"});
     propertylist.Add(new Property { label = "TrackBegin", source=track, path = "source.trackTopology.trackBegin.pos" } );
     propertylist.Add(new Property { label = "TrackEnd", source = track, path = "source.trackTopology.trackEnd.pos" });
 }
Example #2
0
        private static eTrack GetTrackCoords(eTrack track, string id)
        {
            int             c    = 0;
            List <double[]> list = _coordtable[id] as List <double[]>;

            foreach (double[] coord in list)
            {
                if (c == 0)
                {
                    track.trackTopology.trackBegin.geoCoord.coord.AddRange(coord); c++; continue;
                }
                if (c == list.Count - 1)
                {
                    track.trackTopology.trackEnd.geoCoord.coord.AddRange(coord); c++; continue;
                }
                else
                {
                    tPlacedElement map = new tPlacedElement();
                    map.geoCoord.coord.AddRange(coord);
                    track.trackElements.geoMappings.Add(map);
                }
                c++;
            }

            return(track);
        }
Example #3
0
        //returns orientation and coarse
        private static string[] GetOrientation(eTrack maintrack, eTrack sidetrack, eSwitch sw)
        {
            string[] result   = new string[2];
            bool     trackend = false;
            double   angle;
            Point    switchlocation = new Point(sw.geoCoord.coord[0], sw.geoCoord.coord[1]);

            if (DataContainer.GetItem(sw.connection[0].@ref).FindParent(typeof(eTrackBegin)) != null)
            {
                trackend = true;
            }
            double       bestdist          = 9999999999999999999;
            List <Point> maintracknodelist = NodeList(maintrack);

            Point[] maintrackpoints = new Point[2];
            for (int i = 0; i < maintracknodelist.Count - 1; i++)
            {
                double dist = GetDistance(maintracknodelist[i], maintracknodelist[i + 1], switchlocation);
                if (dist < bestdist)
                {
                    maintrackpoints[0] = maintracknodelist[i];
                    maintrackpoints[1] = maintracknodelist[i + 1];
                }
            }
            List <Point> sidetracknodelist = NodeList(sidetrack);

            Point[] sidetrackpoints = new Point[2];

            if (trackend)
            {
                sidetrackpoints[0] = sidetracknodelist[sidetracknodelist.Count];
                sidetrackpoints[1] = sidetracknodelist[sidetracknodelist.Count - 1];
            }
            else
            {
                sidetrackpoints[0] = sidetracknodelist[0];
                sidetrackpoints[1] = sidetracknodelist[1];
            }

            angle = Math.Atan2((maintrackpoints[1] - maintrackpoints[0]).X, (maintrackpoints[1] - maintrackpoints[0]).Y) - Math.Atan2((sidetrackpoints[1] - sidetrackpoints[0]).X, (sidetrackpoints[1] - sidetrackpoints[0]).Y);
            if (angle > Math.PI / 4 || angle < -Math.PI / 4)
            {
                result[0] = "incoming";
            }
            else
            {
                result[0] = "outgoing";
            }
            if (angle < 0)
            {
                result[1] = "right";
            }
            else
            {
                result[1] = "left";
            }

            return(result);
        }
Example #4
0
        private static List <Point> NodeList(eTrack track)
        {
            List <Point> list = new List <Point>();

            list.Add(new Point(track.trackTopology.trackBegin.geoCoord.coord[0], track.trackTopology.trackBegin.geoCoord.coord[1]));
            foreach (tPlacedElement e in track.trackElements.geoMappings)
            {
                list.Add(new Point(e.geoCoord.coord[0], e.geoCoord.coord[1]));
            }
            list.Add(new Point(track.trackTopology.trackEnd.geoCoord.coord[0], track.trackTopology.trackEnd.geoCoord.coord[1]));


            return(list);
        }
Example #5
0
        public static void AddCrossing(eTrack track1, eTrack track2, double length, double pos1, double pos2)
        {
            string id1 = DataContainer.IDGenerator("Connection");
            string id2 = DataContainer.IDGenerator("Connection");
            string id3 = DataContainer.IDGenerator("Connection");
            string id4 = DataContainer.IDGenerator("Connection");

            tConnectionData switchtotrack1 = new tConnectionData()
            {
                id = id1, @ref = id2
            };
            tSwitchConnectionData track1toswitch = new tSwitchConnectionData()
            {
                id = id2, @ref = id1
            };
            tConnectionData switchtotrack2 = new tConnectionData()
            {
                id = id3, @ref = id4
            };
            tSwitchConnectionData track2toswitch = new tSwitchConnectionData()
            {
                id = id4, @ref = id3
            };

            eTrack track = new eTrack()
            {
                id = DataContainer.IDGenerator("track")
            };

            track.trackTopology.trackBegin.pos  = 0;
            track.trackTopology.trackEnd.pos    = (decimal)length;
            track.trackTopology.trackBegin.Item = switchtotrack1;
            track.trackTopology.trackEnd.Item   = switchtotrack2;
            DataContainer.model.infrastructure.tracks.Add(track);

            eSwitch switch1 = new eSwitch()
            {
                pos = (decimal)pos1, id = DataContainer.IDGenerator("Switch")
            };

            switch1.connection.Add(track1toswitch);
            track1.trackTopology.connections.Add(switch1);
            eSwitch switch2 = new eSwitch()
            {
                pos = (decimal)pos2, id = DataContainer.IDGenerator("Switch")
            };

            switch1.connection.Add(track2toswitch);
            track2.trackTopology.connections.Add(switch2);
        }
Example #6
0
 public void TrackProperties(eTrack track)
 {
     propertylist.Add(new Property {
         label = "Name", source = track, path = "source.name"
     });
     propertylist.Add(new Property {
         label = "ID", source = track, path = "source.id"
     });
     propertylist.Add(new Property {
         label = "TrackBegin", source = track, path = "source.trackTopology.trackBegin.pos"
     });
     propertylist.Add(new Property {
         label = "TrackEnd", source = track, path = "source.trackTopology.trackEnd.pos"
     });
 }
Example #7
0
        public static void ConnectEnd(eTrack track1, eTrack track2)
        {
            string id1 = DataContainer.IDGenerator("connection");
            string id2 = DataContainer.IDGenerator("connection");

            tConnectionData connection1 = new tConnectionData()
            {
                id = id1, @ref = id2
            };
            tConnectionData connection2 = new tConnectionData()
            {
                id = id2, @ref = id1
            };

            track1.trackTopology.trackEnd.Item   = connection1;
            track2.trackTopology.trackBegin.Item = connection2;
        }
        public void TestButton_Click(object sender, EventArgs e)
        {
            DataContainer.model = new railml();
            eTrack track1 = new eTrack{trackTopology = new eTrackTopology{trackBegin=new eTrackBegin{pos=0, geoCoord=new tGeoCoord()}, trackEnd = new eTrackEnd{pos=600, geoCoord=new tGeoCoord()}}};
            DataContainer.IDGenerator(track1);
            track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackBegin.geoCoord.coord.Add(0);
            track1.trackTopology.trackEnd.geoCoord.coord.Add(600); track1.trackTopology.trackEnd.geoCoord.coord.Add(0);
            eSwitch sw1 = new eSwitch() { id = "sw1" };
            sw1.geoCoord.coord.AddRange(new double[] { 300, 0 });
            track1.trackTopology.connections.Add(sw1);

            DataContainer.model.infrastructure.tracks.Add(track1);

            eTrack track2 = new eTrack{trackTopology = new eTrackTopology{trackBegin=new eTrackBegin{pos=0, geoCoord=new tGeoCoord()}, trackEnd = new eTrackEnd{pos=600, geoCoord=new tGeoCoord()}}};
            DataContainer.IDGenerator(track2);
            track2.trackTopology.trackBegin.geoCoord.coord.Add(6000); track2.trackTopology.trackBegin.geoCoord.coord.Add(20);
            track2.trackTopology.trackEnd.geoCoord.coord.Add(8000); track2.trackTopology.trackEnd.geoCoord.coord.Add(20);

            DataContainer.model.infrastructure.tracks.Add(track2);

            Data.Editor.AddCrossing(track1, track2, 70, 300, 350);

            eOcp ocp1 = new eOcp { id = "34", name= "test1", geoCoord = new tGeoCoord() };
            ocp1.geoCoord.coord.Add(0); ocp1.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp1);

            eOcp ocp2 = new eOcp { id = "443", name = "test2", geoCoord = new tGeoCoord() };
            ocp2.geoCoord.coord.Add(600); ocp2.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp2);

            eOcp ocp3 = new eOcp { id = "344", name = "test3", geoCoord = new tGeoCoord() };
            ocp3.geoCoord.coord.Add(600); ocp3.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp3);

            eOcp ocp4 = new eOcp { id = "343", name = "test3", geoCoord = new tGeoCoord() };
            ocp4.geoCoord.coord.Add(0); ocp4.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp4);

            DataContainer.PrepareData();

            dynamic result = DataContainer.model.infrastructure.tracks[2].trackTopology.trackBegin.FindParent(typeof(eTrack));

            this.MainViewContentControl.Content = new BaseRailMLView();
        }
Example #9
0
        private static void GetTracks(DataTable table)
        {
            foreach (DataRow row in table.Rows)
            {
                if (row.RowState != DataRowState.Deleted && !(bool)row["removed"])// && (string)row["ElementUsage"] != "C" && (string)row["ElementUsage"] != "F" && (string)row["ElementUsage"] != "A")
                {
                    eTrack track = new eTrack()
                    {
                        id          = (row["Serial Number"] as string) ?? null,
                        description = (row["Description"] as string) ?? null
                    };
                    track.trackTopology.trackBegin.pos = (decimal)(((row["StartMiles"] as double?) ?? 0) + ((row["StartYards"] as double?) ?? 0) / 1760);
                    track.trackTopology.trackEnd.pos   = (decimal)(((row["EndMiles"] as double?) ?? 0) + ((row["EndYards"] as double?) ?? 0) / 1760);
                    if ((string)row["Type"] == "UR")
                    {
                        track.mainDir = tExtendedDirection.up;
                    }
                    else if ((string)row["Type"] == "DR")
                    {
                        track.mainDir = tExtendedDirection.down;
                    }
                    else
                    {
                        track.mainDir = tExtendedDirection.none;
                    }

                    if (row["Road"] is DBNull)
                    {
                        track.type = "connectingTrack";
                    }
                    else if ((string)row["Road"] == "MAIN")
                    {
                        track.type = "mainTrack";
                    }
                    else if ((string)row["Road"] == "BAY")
                    {
                        track.type = "stationTrack";
                    }
                    else
                    {
                        track.type = "sidingTrack";
                    }
                    if ((string)row["ElementUsage"] != "C" && (string)row["ElementUsage"] != "A")
                    {
                        track.trackDescr = new List <string>();
                        track.trackDescr.Add("Closed/Abandoned");
                    }


                    if (row["ParentTrackElement"] != System.DBNull.Value)
                    {
                        eLine line = _model.infrastructure.trackGroups.line.Find(x => x.id == (string)row["Sector"]);
                        line.trackRef.Add(new tTrackRefInGroup()
                        {
                            @ref = track.id
                        });
                    }

                    track = GetTrackCoords(track, row["EquipmentID"].ToString());

                    _model.infrastructure.tracks.Add(track);
                }
            }
        }
Example #10
0
        private static List <eTrack> FindHostLines(double x, double y, int n)
        {
            List <eTrack> tracks   = new List <eTrack>();
            Point         location = new Point(x, y);
            int           c        = 0;

            while (c < n)
            {
                eTrack besttrack = null;
                double bestdist  = 99999999999;

                foreach (eTrack track in DataContainer.model.infrastructure.tracks)
                {
                    foreach (eTrack alreadyinlist in tracks)
                    {
                        if (track == alreadyinlist)
                        {
                            continue;
                        }
                    }
                    Point a;
                    Point b;
                    a = new Point(track.trackTopology.trackBegin.geoCoord.coord[0], track.trackTopology.trackBegin.geoCoord.coord[1]);
                    if (track.trackElements.geoMappings.Count > 0)
                    {
                        b = new Point(track.trackElements.geoMappings[0].geoCoord.coord[0], track.trackElements.geoMappings[0].geoCoord.coord[1]);
                    }
                    else
                    {
                        b = new Point(track.trackTopology.trackEnd.geoCoord.coord[0], track.trackTopology.trackEnd.geoCoord.coord[1]);
                    }

                    double dist = GetDistance(a, b, location);
                    if (dist < bestdist)
                    {
                        bestdist = dist; besttrack = track;
                    }

                    for (int i = 0; i < track.trackElements.geoMappings.Count - 1; i++)
                    {
                        a = new Point(track.trackElements.geoMappings[i].geoCoord.coord[0], track.trackElements.geoMappings[i].geoCoord.coord[1]);
                        b = new Point(track.trackElements.geoMappings[i + 1].geoCoord.coord[0], track.trackElements.geoMappings[i + 1].geoCoord.coord[1]);

                        dist = GetDistance(a, b, location);
                        if (dist < bestdist)
                        {
                            bestdist = dist; besttrack = track;
                        }
                    }

                    a    = new Point(track.trackTopology.trackEnd.geoCoord.coord[0], track.trackTopology.trackEnd.geoCoord.coord[1]);
                    dist = GetDistance(a, b, location);
                    if (dist < bestdist)
                    {
                        bestdist = dist; besttrack = track;
                    }
                }
                tracks.Add(besttrack);
                c++;
            }
            return(tracks);
        }
Example #11
0
        private static eSwitch FindConnections(eSwitch tempswitch)
        {
            Point  switchlocation = new Point(tempswitch.geoCoord.coord[0], tempswitch.geoCoord.coord[1]);
            eTrack hostline       = null;
            eTrack track2         = null;
            bool   trackend       = false;

            while (track2 == null)
            {
                eTrack besttrack = null;
                double bestdist  = 999999999999;

                foreach (eTrack track in DataContainer.model.infrastructure.tracks)
                {
                    double dist = GetDistance(switchlocation, new Point(track.trackTopology.trackBegin.geoCoord.coord[0], track.trackTopology.trackBegin.geoCoord.coord[1]));
                    if (dist < bestdist)
                    {
                        bestdist = dist; besttrack = track; trackend = false;
                    }
                    dist = GetDistance(switchlocation, new Point(track.trackTopology.trackEnd.geoCoord.coord[0], track.trackTopology.trackEnd.geoCoord.coord[1]));
                    if (dist < bestdist)
                    {
                        bestdist = dist; besttrack = track; trackend = true;
                    }
                }
                track2 = besttrack;
            }
            while (hostline == null)
            {
                eTrack besttrack = null;
                double bestdist  = 99999999999;

                foreach (eTrack track in DataContainer.model.infrastructure.tracks)
                {
                    if (track == track2)
                    {
                        continue;
                    }
                    List <Point> pointlist = NodeList(track);
                    for (int i = 0; i < pointlist.Count - 1; i++)
                    {
                        double dist = GetDistance(pointlist[i], pointlist[i + 1], switchlocation);
                        if (dist < bestdist)
                        {
                            bestdist = dist; besttrack = track;
                        }
                    }
                }
                hostline = besttrack;
            }

            tConnectionData conn1 = new tConnectionData();

            DataContainer.IDGenerator(conn1);
            tSwitchConnectionData conn2 = new tSwitchConnectionData();

            DataContainer.IDGenerator(conn2);
            conn1.@ref = conn2.id; conn2.@ref = conn1.id;
            if (trackend == true)
            {
                track2.trackTopology.trackEnd.Item = conn1;
            }
            else
            {
                track2.trackTopology.trackBegin.Item = conn1;
            }
            tempswitch.connection.Add(conn2);
            hostline.trackTopology.connections.Add(tempswitch);
            string[] orientation = GetOrientation(hostline, track2, tempswitch);
            tempswitch.connection[0].orientation = orientation[0];
            tempswitch.connection[0].course      = orientation[1];

            return(tempswitch);
        }
        public NetworkDrawingViewModel()
        {
            rendercoll       = new CompositeCollection();
            tracklines       = new ObservableCollection <Track>();
            OCPcollection    = new ObservableCollection <OCP>();
            switchcollection = new ObservableCollection <Switch>();
            penscale         = 1;
            for (int i = 0; i < DataContainer.model.infrastructure.tracks.Count; i++)
            {
                Track  temptrack = new Track();
                eTrack track     = DataContainer.model.infrastructure.tracks[i];
                if (track.trackTopology.trackEnd.geoCoord.coord.Count != 0 && track.trackTopology.trackBegin.geoCoord.coord.Count != 0)
                {
                    temptrack.track = track;
                    temptrack.index = i;
                    temptrack.X1    = track.trackTopology.trackBegin.geoCoord.coord[0];
                    temptrack.X2    = track.trackTopology.trackEnd.geoCoord.coord[0];
                    temptrack.Y1    = track.trackTopology.trackBegin.geoCoord.coord[1];
                    temptrack.Y2    = track.trackTopology.trackEnd.geoCoord.coord[1];


                    temptrack.points.Add(new Point(track.trackTopology.trackBegin.geoCoord.coord[0], track.trackTopology.trackBegin.geoCoord.coord[1]));

                    foreach (tPlacedElement point in track.trackElements.geoMappings)
                    {
                        temptrack.points.Add(new Point(point.geoCoord.coord[0], point.geoCoord.coord[1]));
                    }
                    temptrack.points.Add(new Point(track.trackTopology.trackEnd.geoCoord.coord[0], track.trackTopology.trackEnd.geoCoord.coord[1]));


                    tracklines.Add(temptrack);

                    foreach (tCommonSwitchAndCrossingData connection in track.trackTopology.connections)
                    {
                        if (connection.geoCoord.coord.Count == 2)
                        {
                            Switch sw = new Switch();
                            sw.element = connection;
                            sw.X       = connection.geoCoord.coord[0];
                            sw.Y       = connection.geoCoord.coord[1];
                            switchcollection.Add(sw);
                        }
                    }
                }
            }

            foreach (eOcp ocp in DataContainer.model.infrastructure.operationControlPoints)
            {
                OCP tempocp = new OCP();
                tempocp.ocp = ocp;
                if (ocp.geoCoord.coord.Count == 2)
                {
                    tempocp.X = ocp.geoCoord.coord[0] - tempocp.diameter / 2;
                    tempocp.Y = ocp.geoCoord.coord[1] - tempocp.diameter / 2;
                    OCPcollection.Add(tempocp);
                }
            }
            rendercoll.Add(new CollectionContainer()
            {
                Collection = tracklines
            });
            rendercoll.Add(new CollectionContainer()
            {
                Collection = OCPcollection
            });
            rendercoll.Add(new CollectionContainer()
            {
                Collection = switchcollection
            });
        }
Example #13
0
        public void TestButton_Click(object sender, EventArgs e)
        {
            DataContainer.model = new railml();
            eTrack track1 = new eTrack {
                trackTopology = new eTrackTopology {
                    trackBegin = new eTrackBegin {
                        pos = 0, geoCoord = new tGeoCoord()
                    }, trackEnd = new eTrackEnd {
                        pos = 600, geoCoord = new tGeoCoord()
                    }
                }
            };

            DataContainer.IDGenerator(track1);
            track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackBegin.geoCoord.coord.Add(0);
            track1.trackTopology.trackEnd.geoCoord.coord.Add(600); track1.trackTopology.trackEnd.geoCoord.coord.Add(0);
            eSwitch sw1 = new eSwitch()
            {
                id = "sw1"
            };

            sw1.geoCoord.coord.AddRange(new double[] { 300, 0 });
            track1.trackTopology.connections.Add(sw1);

            DataContainer.model.infrastructure.tracks.Add(track1);

            eTrack track2 = new eTrack {
                trackTopology = new eTrackTopology {
                    trackBegin = new eTrackBegin {
                        pos = 0, geoCoord = new tGeoCoord()
                    }, trackEnd = new eTrackEnd {
                        pos = 600, geoCoord = new tGeoCoord()
                    }
                }
            };

            DataContainer.IDGenerator(track2);
            track2.trackTopology.trackBegin.geoCoord.coord.Add(6000); track2.trackTopology.trackBegin.geoCoord.coord.Add(20);
            track2.trackTopology.trackEnd.geoCoord.coord.Add(8000); track2.trackTopology.trackEnd.geoCoord.coord.Add(20);


            DataContainer.model.infrastructure.tracks.Add(track2);

            Data.Editor.AddCrossing(track1, track2, 70, 300, 350);

            eOcp ocp1 = new eOcp {
                id = "34", name = "test1", geoCoord = new tGeoCoord()
            };

            ocp1.geoCoord.coord.Add(0); ocp1.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp1);

            eOcp ocp2 = new eOcp {
                id = "443", name = "test2", geoCoord = new tGeoCoord()
            };

            ocp2.geoCoord.coord.Add(600); ocp2.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp2);

            eOcp ocp3 = new eOcp {
                id = "344", name = "test3", geoCoord = new tGeoCoord()
            };

            ocp3.geoCoord.coord.Add(600); ocp3.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp3);

            eOcp ocp4 = new eOcp {
                id = "343", name = "test3", geoCoord = new tGeoCoord()
            };

            ocp4.geoCoord.coord.Add(0); ocp4.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp4);

            DataContainer.PrepareData();

            dynamic result = DataContainer.model.infrastructure.tracks[2].trackTopology.trackBegin.FindParent(typeof(eTrack));

            this.MainViewContentControl.Content = new BaseRailMLView();
        }