/// <summary>
 /// Make sure Oriented Points were calculated
 /// </summary>
 private void ValidateOrientedPoints()
 {
     if (spline.OrientedPoints == null || (spline.OrientedPoints.Length == 0 || spline.GetComponent <SplineMeshRenderer>() == null))
     {
         spline.CalculateOrientedPoints(1f);
     }
 }
        /// <summary>
        /// Calculate mesh generation parameters
        /// </summary>
        private void CreateMesh()
        {
            Profiler.BeginSample("CreateMesh");

            if (_spline == null)
            {
                return;
            }

            if (_auxTransform1 != null)
            {
                GetAuxTranforms();
            }

            if (_auxTransform1 == null)
            {
                return;
            }

            bool exceededVertsLimit = false;

            _splineLength = _spline.Length;

            // 2.0 Mesh generation
            _spline.CalculateOrientedPoints(_baseMeshLength);

            int penultimateIndex = _spline.OrientedPoints.Length - 2;

            for (int i = 0; i <= penultimateIndex; i++)
            {
                // Set aux transform 1
                _auxTransform1.rotation = _spline.OrientedPoints[i].Rotation;
                _auxTransform1.position = _spline.OrientedPoints[i].Position + _meshOffset;
                // Set aux transform 2
                _auxTransform2.rotation = _spline.OrientedPoints[i + 1].Rotation;
                _auxTransform2.position = _spline.OrientedPoints[i + 1].Position + _meshOffset;

                exceededVertsLimit = false;
                AddMeshSegment(_auxTransform1, _auxTransform2, out exceededVertsLimit);
                if (exceededVertsLimit)
                {
                    _meshGenerationMethod = MeshGenerationMethod.Manual;
                    break;
                }
            }

            Profiler.EndSample();
        }