Example #1
0
        public override ASSPointF GetPointF(double t)
        {
            List <ASSPointF> tmp = new List <ASSPointF>();

            while (tmp.Count < 10)
            {
                ASSPointF p = OriginalCurve.GetPointF(Common.RandomDouble(rnd, t - BlurRange, t + BlurRange));
                if (p != null)
                {
                    tmp.Add(p);
                }
            }
            ASSPointF pt = new ASSPointF {
                X = 0, Y = 0, T = t
            };

            foreach (ASSPointF tmppt in tmp)
            {
                pt.X += tmppt.X;
                pt.Y += tmppt.Y;
            }
            pt.X /= (double)tmp.Count;
            pt.Y /= (double)tmp.Count;
            return(pt);
        }
Example #2
0
        /// <summary>
        /// Compute specfied index key tangents.
        /// </summary>
        /// <param name="idx"></param>
        public void ComputeTangents(int keyIndex)
        {
            if (keyIndex < 0 || keyIndex > keys.Count || keyIndex > Int32.MaxValue - 2)
            {
                throw new ArgumentOutOfRangeException("keyIndex");
            }

            // Compute neighbors tangents too.
            for (int i = keyIndex - 1; i < keyIndex + 2; ++i)
            {
                if (i >= 0 && i < keys.Count)
                {
                    EditCurveKey key = keys[i];

                    MarkModify(key);

                    float        tangentInValue  = key.TangentIn;
                    float        tangentOutValue = key.TangentOut;
                    CurveTangent tangentIn       = Convert(key.TangentInType);
                    CurveTangent tangentOut      = Convert(key.TangentOutType);

                    OriginalCurve.ComputeTangent(i, tangentIn, tangentOut);

                    if (Single.IsNaN(key.TangentIn))
                    {
                        key.TangentIn = 0.0f;
                    }
                    if (Single.IsNaN(key.TangentOut))
                    {
                        key.TangentOut = 0.0f;
                    }

                    // Restore original value if EditCurveTanget is fixed.
                    if (key.TangentInType == EditCurveTangent.Fixed)
                    {
                        key.TangentIn = tangentInValue;
                    }

                    if (key.TangentOutType == EditCurveTangent.Fixed)
                    {
                        key.TangentOut = tangentOutValue;
                    }
                }
            }
        }
Example #3
0
 /// <summary>
 /// Evaluate this curve at given position.
 /// </summary>
 /// <param name="position"></param>
 /// <returns></returns>
 public float Evaluate(float position)
 {
     return(OriginalCurve.Evaluate(position));
 }