public void RenderTransformCurves(int samplesPerSecond)
        {
            if (_transformCurves == null || _transformCurves.clip == null)
            {
                CreateTransformCurves();
            }
            else
            {
                _transformCurves.RefreshCurves();
            }

            float totalTime     = _animEvt.LengthTime;
            float timePerSample = totalTime / samplesPerSecond;

            int numSamples = Mathf.RoundToInt(totalTime / timePerSample);

            Vector3[] pts = new Vector3[numSamples];
            float     t   = 0;

            for (int i = 0; i < numSamples; ++i)
            {
                pts[i] = _transformCurves.GetWorldPosition(t);
                t     += timePerSample;
            }

            Handles.DrawPolyLine(pts);
        }
        public void RenderTransformCurves(int samplesPerSecond)
        {
            if (_transformCurves == null || _transformCurves.clip == null)
            {
                CreateTransformCurves();
            }
            else
            {
                _transformCurves.RefreshCurves();
            }

            float totalTime     = AnimEvt.LengthTime;
            float timePerSample = totalTime / samplesPerSecond;

            int numSamples = Mathf.RoundToInt(totalTime / timePerSample) + 1;

            Vector3[] pts = new Vector3[numSamples];
            float     t   = 0;

            for (int i = 0; i < numSamples; ++i)
            {
                pts[i] = _transformCurves.GetWorldPosition(t);
                t     += timePerSample;
            }

            Handles.DrawPolyLine(pts);

            FAnimationTrackEditor animTrackEditor = (FAnimationTrackEditor)TrackEditor;

//			if( _transformCurves.clip.name.Contains("1") )
//				Debug.Log( _transformCurves.xRot.keys[0].tangentMode + " " + _transformCurves.yRot[0].tangentMode + " " + _transformCurves.zRot[0].tangentMode + " " + _transformCurves.wRot[0].tangentMode );

            if (animTrackEditor.ShowKeyframes || animTrackEditor.ShowKeyframeTimes)
            {
                int animFramerate = Mathf.RoundToInt(_transformCurves.clip.frameRate);

                Keyframe[] keyframes = _transformCurves.GetPositionKeyframes();
                for (int i = 0; i != keyframes.Length; ++i)
                {
                    Keyframe keyframe = keyframes[i];

                    Vector3    pos = _transformCurves.GetPosition(keyframe.time);
                    Quaternion rot = _transformCurves.GetRotation(keyframe.time);

                    Quaternion toolRot          = rot;
                    bool       isGlobalRotation = Tools.pivotRotation == PivotRotation.Global;
                    if (isGlobalRotation)
                    {
                        toolRot = _globalRotation;                        //Quaternion.identity;
                    }
//					Handles.color = Color.gray;
                    //				Vector3 newPos = Handles.FreeMoveHandle(pos, rot, 1, Vector3.one*0.2f, Handles.SphereCap);//Handles.PositionHandle( pos, rot );
                    if (animTrackEditor.ShowKeyframes)
                    {
                        if (Tools.current == Tool.Move)
                        {
                            Vector3 newPos = Handles.DoPositionHandle(pos, toolRot);                             //Handles.PositionHandle( pos, rot );
                            if (newPos != pos)
                            {
                                Undo.RecordObject(_transformCurves.clip, "Change Keyframe");
                                _transformCurves.SetPosition(newPos, keyframe.time);
                            }
                        }
                        else if (Tools.current == Tool.Rotate)
                        {
                            Quaternion newRot = Handles.DoRotationHandle(toolRot, pos);
                            if (newRot != toolRot)
                            {
                                Undo.RecordObject(_transformCurves.clip, "Change Keyframe");
                                _transformCurves.SetRotation(isGlobalRotation ? (newRot * Quaternion.Inverse(toolRot)) * rot : newRot, keyframe.time);
                                if (isGlobalRotation)
                                {
                                    _globalRotation = newRot;
                                }
                            }
                        }
                    }

                    if (Event.current.type == EventType.MouseUp || Event.current.type == EventType.Ignore)
                    {
                        _globalRotation = Quaternion.identity;
                    }

                    if (animTrackEditor.ShowKeyframeTimes)
                    {
                        int frame = Mathf.RoundToInt(keyframe.time * animFramerate);
                        Handles.Label(pos + new Vector3(0, .25f, 0), FUtility.GetTime(AnimEvt.Start + frame, animFramerate), EditorStyles.toolbarButton);
                    }

                    //				Handles.BeginGUI();
                    //				Vector3 screenPos = SceneView.currentDrawingSceneView.camera.WorldToScreenPoint( pos );
                    //				GUI.Label( new Rect( screenPos.x-10, SceneView.currentDrawingSceneView.position.height-screenPos.y-50, 20, 20 ), keyframe.time.ToString() );
                    //				Handles.EndGUI();
                }
            }
        }