private void Init() { var segment = Utilities.GetSegment(Id); IsStartSide = segment.m_startNode == Markup.Id; IsLaneInvert = IsStartSide ^ segment.IsInvert(); var info = segment.Info; var lanes = segment.GetLanesId().ToArray(); var driveLanesIdxs = info.m_sortedLanes.Where(s => Utilities.IsDriveLane(info.m_lanes[s])); if (!IsLaneInvert) { driveLanesIdxs = driveLanesIdxs.Reverse(); } DriveLanes = driveLanesIdxs.Select(d => new DriveLane(this, lanes[d], info.m_lanes[d])).ToArray(); if (!DriveLanes.Any()) { return; } Lines = new SegmentMarkupLine[DriveLanes.Length + 1]; for (int i = 0; i < Lines.Length; i += 1) { var left = i - 1 >= 0 ? DriveLanes[i - 1] : null; var right = i < DriveLanes.Length ? DriveLanes[i] : null; var markupLine = new SegmentMarkupLine(this, left, right); Lines[i] = markupLine; } }
private void CreatePoints(NetSegment segment) { var info = segment.Info; var lanes = segment.GetLanesId().ToArray(); var driveLanesIdxs = info.m_sortedLanes.Where(s => Utilities.IsDriveLane(info.m_lanes[s])); if (!IsLaneInvert) { driveLanesIdxs = driveLanesIdxs.Reverse(); } DriveLanes = driveLanesIdxs.Select(d => new DriveLane(this, lanes[d], info.m_lanes[d])).ToArray(); if (!DriveLanes.Any()) { return; } Lines = new SegmentMarkupLine[DriveLanes.Length + 1]; for (int i = 0; i < Lines.Length; i += 1) { var left = i - 1 >= 0 ? DriveLanes[i - 1] : null; var right = i < DriveLanes.Length ? DriveLanes[i] : null; var markupLine = new SegmentMarkupLine(this, left, right); Lines[i] = markupLine; } foreach (var markupLine in Lines) { PointsList.AddRange(markupLine.GetMarkupPoints()); } }