Exemplo n.º 1
0
        public GlobalItem UpdateItem(GlobalItem item, MSTSCoord coord, bool controlKey, bool forceConnector)
        {
            PointF          closest          = new PointF(0f, 0f);
            StationItem     parent           = null;
            StationAreaItem item3            = null;
            PointF          tf2              = new PointF(0f, 0f);
            double          snapSize         = Viewer.snapSize;
            double          num2             = -1.0;
            double          positiveInfinity = double.PositiveInfinity;
            PointF          tf3              = coord.ConvertToPointF();

            if (item.GetType() == typeof(StationAreaItem))
            {
                item3  = (StationAreaItem)item;
                parent = item3.parent;
                if (parent == null)
                {
                    return(null);
                }
            }
            else
            {
                if (typeof(StationItem) == item.GetType())
                {
                    parent = (StationItem)item;
                    foreach (StationAreaItem item4 in parent.stationArea)
                    {
                        StationAreaItem item5 = parent.getNextArea(item4);
                        num2 = DrawUtility.FindDistanceToSegment(coord.ConvertToPointF(), new AESegment(item4.Location, item5.Location), out closest);
                        if ((num2 < snapSize) && (num2 < positiveInfinity))
                        {
                            positiveInfinity = num2;
                            item3            = item4;
                        }
                    }
                    parent.Update(coord);
                    return(parent);
                }
                if (!item.IsLineSnap())
                {
                    item.Update(coord);
                    return(item);
                }
            }
            TrackSegment segment          = null;
            int          associateNodeIdx = 0;

            foreach (TrackSegment segment2 in aeItems.getSegments())
            {
                segment2.unsetSnap();
                num2 = DrawUtility.FindDistanceToSegment(coord.ConvertToPointF(), segment2, out closest);
                if ((num2 < snapSize) && (num2 < positiveInfinity))
                {
                    positiveInfinity = num2;
                    segment          = segment2;
                    segment.setSnap();
                    tf2 = closest;
                    associateNodeIdx = segment.associateNodeIdx;
                }
            }
            if (segment != null)
            {
                segment.setSnap();
            }
            if ((!item.IsLineSnap() || (segment != null)) || controlKey)
            {
                item3.Update(coord);
            }
            return(parent);
        }