public static void GetCsvData(this Curb curb,
                               out List <CsvPoint> csvPoints,
                               out List <CsvLine> csvLines,
                               out List <CsvCurb> csvCurbs)
 {
     csvPoints = new List <CsvPoint>();
     csvLines  = new List <CsvLine>();
     csvCurbs  = new List <CsvCurb>();
     for (int i = 0; i < curb.LineRenderer.positionCount; i++)
     {
         var csvPoint = new CsvPoint()
         {
             Position = curb.LineRenderer.GetPosition(i)
         };
         csvPoints.Add(csvPoint);
         if (i > 0)
         {
             var csvLine = new CsvLine()
             {
                 PointBegin = csvPoints[i - 1], PointFinal = csvPoint
             };
             if (i > 1)
             {
                 csvLine.LineLast = csvLines.Last();
             }
             csvLines.Add(csvLine);
             csvCurbs.Add(new CsvCurb()
             {
                 Line = csvLine
             });
         }
     }
 }
 public static void GetCsvData(this WhiteLine whiteLine,
                               out List <CsvPoint> csvPoints,
                               out List <CsvLine> csvLines,
                               out List <CsvWhiteLine> csvWhiteLines)
 {
     csvPoints     = new List <CsvPoint>();
     csvLines      = new List <CsvLine>();
     csvWhiteLines = new List <CsvWhiteLine>();
     for (int i = 0; i < whiteLine.LineRenderer.positionCount; i++)
     {
         var csvPoint = new CsvPoint()
         {
             Position = whiteLine.LineRenderer.GetPosition(i)
         };
         csvPoints.Add(csvPoint);
         if (i > 0)
         {
             var csvLine = new CsvLine()
             {
                 PointBegin = csvPoints[i - 1], PointFinal = csvPoint
             };
             if (i > 1)
             {
                 csvLine.LineLast = csvLines.Last();
             }
             csvLines.Add(csvLine);
             csvWhiteLines.Add(new CsvWhiteLine()
             {
                 Line = csvLine, Width = whiteLine.width
             });
         }
     }
 }
 public static void GetCsvData(this Lane lane,
                               out List <CsvPoint> csvPoints,
                               out List <CsvNode> csvNodes,
                               out List <CsvDtLane> csvDtLanes,
                               out List <CsvLane> csvLanes)
 {
     csvPoints  = new List <CsvPoint>();
     csvNodes   = new List <CsvNode>();
     csvDtLanes = new List <CsvDtLane>();
     csvLanes   = new List <CsvLane>();
     for (int i = 0; i < lane.LineRenderer.positionCount; i++)
     {
         var csvPoint = new CsvPoint()
         {
             Position = lane.LineRenderer.GetPosition(i)
         };
         csvPoints.Add(csvPoint);
         var csvNode = new CsvNode()
         {
             Point = csvPoint
         };
         csvNodes.Add(csvNode);
         CsvDtLane csvDtLane;
         if (i > 0)
         {
             csvDtLane = new CsvDtLane()
             {
                 Point = csvPoint, LastDtLane = csvDtLanes[i - 1]
             };
         }
         else
         {
             csvDtLane = new CsvDtLane()
             {
                 Point = csvPoint
             };
         }
         csvDtLanes.Add(csvDtLane);
         if (i > 0)
         {
             var csvLane = new CsvLane()
             {
                 DtLaneFinal = csvDtLane, BeginNode = csvNodes[i - 1], FinalNode = csvNode
             };
             if (i > 1)
             {
                 csvLane.AddPreLane(csvLanes[i - 2]);
             }
             csvLane.Velocity = Mathf.Lerp(lane.velocityBegin, lane.velocityFinal, (float)i / (lane.LineRenderer.positionCount - 1));
             csvLanes.Add(csvLane);
         }
     }
 }
        public static void GetCsvData(this StopLine stopLine,
                                      PointOctree <CsvLane> finalLanes,
                                      out List <CsvPoint> csvPoints,
                                      out List <CsvLine> csvLines,
                                      out List <CsvVector> csvVectors,
                                      out List <CsvSignalLight> csvSignalLights,
                                      out List <CsvStopLine> csvStopLines)
        {
            csvPoints    = new List <CsvPoint>();
            csvLines     = new List <CsvLine>();
            csvStopLines = new List <CsvStopLine>();
            var csvSLPoints = new List <CsvPoint>();

            csvVectors      = new List <CsvVector>();
            csvSignalLights = new List <CsvSignalLight>();
            for (int i = 0; i < stopLine.Count; i++)
            {
                var csvPoint = new CsvPoint()
                {
                    Position = stopLine.LineRenderer.GetPosition(i)
                };
                csvPoints.Add(csvPoint);
                if (i > 0)
                {
                    var csvLine = new CsvLine()
                    {
                        PointBegin = csvPoints[i - 1], PointFinal = csvPoint
                    };
                    if (i > 1)
                    {
                        csvLine.LineLast = csvLines.Last();
                    }
                    csvLines.Add(csvLine);
                    var signalLight = stopLine.signalLights[i - 1];
                    var csvSLPoint  = new CsvPoint()
                    {
                        Position = signalLight.transform.position
                    };
                    csvSLPoints.Add(csvSLPoint);
                    var csvVector = new CsvVector()
                    {
                        Point = csvSLPoint, Rotation = signalLight.transform.rotation
                    };
                    csvVectors.Add(csvVector);
                    var csvSignalLight = new CsvSignalLight()
                    {
                        Vector = csvVector
                    };
                    csvSignalLights.Add(csvSignalLight);
                    var midPoint    = (csvLine.PointBegin.Position + csvLine.PointFinal.Position) / 2;
                    var csvStopLine = new CsvStopLine()
                    {
                        Line        = csvLine,
                        SignalLight = csvSignalLight,
                        Lane        = finalLanes
                                      .GetNearby(midPoint, Vector3.Distance(csvLine.PointBegin.Position, csvLine.PointFinal.Position))
                                      ?.OrderBy(_ => Vector3.Distance(_.FinalNode.Point.Position, midPoint))?
                                      .FirstOrDefault()
                    };
                    csvStopLines.Add(csvStopLine);
                }
            }
            csvPoints.AddRange(csvSLPoints);
        }