public StationAreaItem AddPointArea(MSTSCoord coord, double snapDist, MSTSBase tileBase)
        {
            PointF found = new PointF(0, 0);
            double dist = -1, closestDist = double.PositiveInfinity;
            int    i;
            int    closestI = -1;
            PointF closest;

            StationAreaItem newPoint = new StationAreaItem(TypeEditor.ROUTECONFIG, this);

            if (areaCompleted)
            {
                StationAreaItem p1;
                StationAreaItem p2;
                for (i = 0; i < stationArea.Count - 1; i++)
                {
                    p1   = stationArea[i];
                    p2   = stationArea[i + 1];
                    dist = DrawUtility.FindDistanceToSegment(coord.ConvertToPointF(),
                                                             new AESegment(p1.Coord.ConvertToPointF(), p2.Coord.ConvertToPointF()), out found);
                    if (dist >= 0 && dist < snapDist && dist < closestDist)
                    {
                        closestDist = dist;
                        closestI    = i + 1;
                        closest     = found;
                    }
                    dist = -1;
                }
                p1   = stationArea[stationArea.Count - 1];
                p2   = stationArea[0];
                dist = DrawUtility.FindDistanceToSegment(coord.ConvertToPointF(),
                                                         new AESegment(p1.Coord.ConvertToPointF(), p2.Coord.ConvertToPointF()), out closest);

                if (dist >= 0 && dist < snapDist && dist < closestDist)
                {
                    closestDist = dist;
                    closestI    = 0;
                    closest     = found;
                }
                if (closestDist < double.PositiveInfinity)
                {
                    coord = tileBase.getMstsCoord(closest);
                    newPoint.configCoord(coord);
                    newPoint.toggleSelected();
                    stationArea.Insert(closestI, newPoint);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                //  Until area complete, we only add new point at the end
                newPoint.configCoord(coord);
                newPoint.toggleSelected();
                stationArea.Add(newPoint);
            }
            return(newPoint);
        }
Exemple #2
0
        public MSTSDataConfig(string mstsPath, string Route, TypeEditor interfaceType) : base(mstsPath, Route)
        {
            string routePath = Path.Combine(Route, TRK.Tr_RouteFile.FileName);

            TileBase = new MSTSBase(TDB);
            TileBase.reduce(TDB);
        }
        public MSTSDataConfig(string mstsPath, string Route, TypeEditor interfaceType) : base(mstsPath, Route)
        {
            orRouteConfig = new ORRouteConfig();
            string routePath = Path.Combine(Route, TRK.Tr_RouteFile.FileName);

            TileBase = new MSTSBase(TDB);
            TileBase.reduce(TDB);
            orRouteConfig = ORRouteConfig.loadConfig(routePath, interfaceType);
            {
                orRouteConfig.SetRouteName(TRK.Tr_RouteFile.Name);
            }
            //Signals = new Signals(this);
        }
        public void checkForNewConnector(ORRouteConfig orRouteConfig, List <TrackSegment> segments, MSTSBase tileBase)
        {
            PointF pointIntersect;
            int    realPosit = 0;
            int    ii        = 0;

            //  First, we remove all un configured connectors
            //foreach (StationAreaItem SAWidget in stationArea)
            for (int cnt = 0; cnt < stationArea.Count; cnt++)
            {
                var SAWidget = stationArea[cnt];
                if (SAWidget.IsInterface() && !SAWidget.getStationConnector().isConfigured())
                {
                    removeConnector(orRouteConfig, SAWidget);
                    cnt--;
                }
            }
            //  Next, we search for new connectors and add them
            List <AESegment> polySegment = getPolySegment();

            for (int cntPointEdge = 0; cntPointEdge < polySegment.Count; cntPointEdge++)
            {
                List <System.Drawing.PointF> pointsIntersect = new List <System.Drawing.PointF>();
                foreach (var segment in segments)
                {
                    if ((segment.NodeIdx == 35 || segment.NodeIdx == 86) && cntPointEdge > 2 &&
                        (segment.SectionIdxA == 191 || segment.SectionIdxA == 40000))
                    {
                        ii = 1;
                    }
                    pointIntersect = DrawUtility.FindIntersection(polySegment[cntPointEdge], new AESegment(segment));
                    if (!pointIntersect.IsEmpty)
                    {
                        StationAreaItem newPoint = new StationAreaItem(TypeEditor.ROUTECONFIG, this);
                        MSTSCoord       coord    = tileBase.getMstsCoord(pointIntersect);
                        newPoint.configCoord(coord);
                        //newPoint.toggleSelected();
                        realPosit++;    // +1 car on doit placer après le cntEdge courant
                        List <AESegment> newPolySegment = getPolySegment();
                        insertConnector(newPolySegment, newPoint);
                        newPoint.DefineAsInterface(segment);
                    }
                }
                realPosit++;    //  On incrémente pour suivre le cntPointEdge
            }
        }
 public override void complete(ORRouteConfig orRouteConfig, List <TrackSegment> segments, MSTSBase tileBase)
 {
     if (stationArea.Count > 0)
     {
         checkForNewConnector(orRouteConfig, segments, tileBase);
         areaCompleted = true;
     }
 }
 public virtual void complete(ORRouteConfig orRouteConfig, List <TrackSegment> segments, MSTSBase tileBase)
 {
 }