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); }