public static Spline ToSpline(this IEditablePath path) { var count = path.pointCount * 3; if (path.isOpenEnded) { count -= 2; } var spline = new Spline() { isOpenEnded = path.isOpenEnded, points = new Vector3[count] }; for (var i = 0; i < path.pointCount; ++i) { var point = path.GetPoint(i); spline.points[i * 3] = point.position; if (i * 3 + 1 < count) { var nextIndex = EditablePathUtility.Mod(i + 1, path.pointCount); spline.points[i * 3 + 1] = path.CalculateRightTangent(i); spline.points[i * 3 + 2] = path.CalculateLeftTangent(nextIndex); } } return(spline); }
public static Vector3 CalculateLocalLeftTangent(this IEditablePath path, int index) { return(path.CalculateLeftTangent(index) - path.GetPoint(index).position); }