private void Draw() { CubicBezier worldBezier = cubicBezierPath.WorldSpaceBezier; // draw bezier Vector3[] cPointCache = new EvaluationCache(worldBezier, CubicBezier.GoodNumMidPoints).Values; /*Handles.color = Color.yellow; * Handles.DrawAAPolyLine(cPointCache); */ for (int i = 0; i < cPointCache.Length - 1; i++) { Handles.color = Color.Lerp(Color.yellow, Color.magenta, (float)i / cPointCache.Length); var lineSegment = new Vector3[2]; lineSegment[0] = cPointCache[i]; lineSegment[1] = cPointCache[i + 1]; Handles.DrawAAPolyLine(lineSegment); } // draw direction cone cap if (!settings.HideDirectionCones && targetScript.transform.lossyScale != Vector3.zero) //check for zero vector, since LookRotation logs messages { float startConeSize = PathEditorUtility.Nice3DHandleSize(worldBezier.Evaluate(0f)); float endConeSize = PathEditorUtility.Nice3DHandleSize(worldBezier.Evaluate(1f)); Handles.color = Color.yellow; Handles.ConeCap(0, worldBezier.Evaluate(0f), Quaternion.LookRotation(worldBezier.Tangent(0f)), startConeSize); Handles.color = Color.magenta; Handles.ConeCap(0, worldBezier.Evaluate(1f), Quaternion.LookRotation(worldBezier.Tangent(1f)), endConeSize); } // draw tangent lines if (!settings.HideTangentLines) { Handles.color = Color.cyan; Handles.DrawDottedLine(worldBezier.StartPosition, worldBezier.StartTangent, 7.5f); Handles.DrawDottedLine(worldBezier.EndPosition, worldBezier.EndTangent, 7.5f); } // test t if (settings.TestInterpolate) { PathEditorUtility.DrawTestInterpolate(worldBezier, settings.EditorData.T); } // draw GUI InterpolateSceneGUI(); ToolShelf(); }
public void TangentTest() { Point startPoint = new Point(0, 0, 0); Point startControlPoint = new Point(1.3, 3, 0); Point endControlPoint = new Point(6, 4, 0); Point endPoint = new Point(8, 1.6, 0); CubicBezier bezier = new CubicBezier(startPoint, endPoint, startControlPoint, endControlPoint); Assert.AreEqual(new Vector(0.93280749948951, 0.360375039224594, 0), bezier.Tangent(0.4)); }