Bugfix #21763: extremly zooming into graph editor via ctrl+mmb locks up blender
authorJoshua Leung <aligorith@gmail.com>
Thu, 1 Apr 2010 11:59:27 +0000 (11:59 +0000)
committerJoshua Leung <aligorith@gmail.com>
Thu, 1 Apr 2010 11:59:27 +0000 (11:59 +0000)
Curve sampling minimum 'sampling frequency' for display could get too low causing a hang (with really-slow convergence). Clamping with a coarses limit now.

source/blender/editors/space_graph/graph_draw.c

index 84df407109d3fcae623d1d8ecb83ef159f4aea5b..7f44df24a6e963fc3251a7ad7a29a9d56e2bda2d 100644 (file)
@@ -523,19 +523,20 @@ static void draw_fcurve_curve (bAnimContext *ac, ID *id, FCurve *fcu, SpaceIpo *
         *      though it is impossible to predict this from the modifiers!
         *
         *      If the automatically determined sampling frequency is likely to cause an infinite
-        *      loop (i.e. too close to FLT_EPSILON), fall back to default of 0.001
+        *      loop (i.e. too close to 0), then clamp it to a determined "safe" value. The value
+        *      chosen here is just the coarsest value which still looks reasonable...
         */
                /* grid->dx is the first float in View2DGrid struct, so just cast to float pointer, and use it
                 * It represents the number of 'frames' between gridlines, but we divide by U.v2d_min_gridsize to get pixels-steps
                 */
                // TODO: perhaps we should have 1.0 frames as upper limit so that curves don't get too distorted?
        samplefreq= *((float *)grid) / U.v2d_min_gridsize;
-       if (IS_EQ(samplefreq, 0)) samplefreq= 0.001f;
+       if (samplefreq < 0.00001f) samplefreq= 0.00001f;
        
        
        /* the start/end times are simply the horizontal extents of the 'cur' rect */
        stime= v2d->cur.xmin;
-       etime= v2d->cur.xmax;
+       etime= v2d->cur.xmax + samplefreq; /* + samplefreq here so that last item gets included... */
        
        
        /* at each sampling interval, add a new vertex