private void Draw() { var worldBezier = targetPath.WorldSpaceBezier; var vertexCount = DynamicBezier.GoodNumMidPoints * worldBezier.Knots.Count; vertexCount /= 2; var cPointCache = new EvaluationCache(worldBezier, vertexCount).Values; // draw bezier PathEditorUtility.DrawSplineInScene(cPointCache); // draw direction cone cap if (!settings.HideDirectionCones && targetScript.transform.lossyScale != Vector3.zero && targetPath.LocalBezier.Knots.Count > 1) // also hide cones if virtually a dot { 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.Evaluate(0.01f) - worldBezier.Evaluate(0f)), startConeSize); Handles.color = Color.magenta; Handles.ConeCap(0, worldBezier.Evaluate(1f), Quaternion.LookRotation(worldBezier.Evaluate(1f) - worldBezier.Evaluate(1f - 0.01f)), endConeSize); } // draw tangent lines if (!settings.HideTangentLines) { Handles.color = Color.cyan; for (int i = 0; i < worldBezier.Knots.Count - 1; i++) { Handles.DrawDottedLine(worldBezier.Knots[i], worldBezier.Knots[i + 1], 7.5f); } } // Draw knot labels var knotLabelStyle = new GUIStyle(); knotLabelStyle.fontStyle = FontStyle.Bold; knotLabelStyle.fontSize = 17; knotLabelStyle.alignment = TextAnchor.UpperRight; knotLabelStyle.contentOffset = new Vector2(25f, -50f); for (int i = 0; i < worldBezier.Knots.Count; i++) { knotLabelStyle.normal.textColor = PathEditorUtility.GetTColor((float)i / worldBezier.Knots.Count); Handles.Label(worldBezier.Knots[i], i.ToString(), knotLabelStyle); } // test t if (settings.TestInterpolate) { PathEditorUtility.DrawTestInterpolate(worldBezier, settings.EditorData.T); } // draw GUI InterpolateSceneGUI(); ToolShelf(); }
private void Draw() { Vector3 startPoint = linePath.Evaluate(0f); Vector3 endPoint = linePath.Evaluate(1f); // draw line var cPointCache = new Vector3[32]; for (int i = 0; i < cPointCache.Length; i++) { cPointCache[i] = Vector3.Lerp(startPoint, endPoint, (float)i / (cPointCache.Length - 1)); } 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 && linePath.LocalSpaceTransform.lossyScale != Vector3.zero && linePath.StartPosition != linePath.EndPosition) // also hide cones if virtually a dot { float startConeSize = PathEditorUtility.Nice3DHandleSize(startPoint); float endConeSize = PathEditorUtility.Nice3DHandleSize(endPoint); Handles.color = Color.yellow; Handles.ConeCap(0, startPoint, Quaternion.LookRotation(linePath.Tangent()), startConeSize); Handles.color = Color.magenta; Handles.ConeCap(0, endPoint, Quaternion.LookRotation(linePath.Tangent()), endConeSize); } // test t Handles.color = PathEditorUtility.GetTColor(settings.EditorData.T); if (settings.TestInterpolate) { Vector3 targetPoint = linePath.Evaluate(settings.EditorData.T); float sphereSize = PathEditorUtility.Nice3DHandleSize(targetPoint); Handles.SphereCap(0, targetPoint, Quaternion.identity, sphereSize); } // draw GUI InterpolateSceneGUI(); ToolShelf(); }