Revision: 36863
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36863
Author:   aligorith
Date:     2011-05-24 12:20:02 +0000 (Tue, 24 May 2011)
Log Message:
-----------
Bugfix: Limit Distance constraint could be doing divide-by-zero in a
few cases, especially if the object and target are at the same
location when the constraint is created.

This manisfested as the constrained object disappearing when the
constraint was added, only reappearing after transforming it a bit.

Modified Paths:
--------------
    branches/soc-2011-pepper/source/blender/blenkernel/intern/constraint.c

Modified: branches/soc-2011-pepper/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/soc-2011-pepper/source/blender/blenkernel/intern/constraint.c      
2011-05-24 12:12:12 UTC (rev 36862)
+++ branches/soc-2011-pepper/source/blender/blenkernel/intern/constraint.c      
2011-05-24 12:20:02 UTC (rev 36863)
@@ -2642,15 +2642,13 @@
                /* set distance (flag is only set when user demands it) */
                if (data->dist == 0)
                        data->dist= dist;
-                       
-               // FIXME: dist may be 0!
                
                /* check if we're which way to clamp from, and calculate 
interpolation factor (if needed) */
                if (data->mode == LIMITDIST_OUTSIDE) {
                        /* if inside, then move to surface */
                        if (dist <= data->dist) {
                                clamp_surf= 1;
-                               sfac= data->dist / dist;
+                               if (dist != 0.0f) sfac= data->dist / dist;
                        }
                        /* if soft-distance is enabled, start fading once owner 
is dist+softdist from the target */
                        else if (data->flag & LIMITDIST_USESOFT) {
@@ -2663,14 +2661,14 @@
                        /* if outside, then move to surface */
                        if (dist >= data->dist) {
                                clamp_surf= 1;
-                               sfac= data->dist / dist;
+                               if (dist != 0.0f) sfac= data->dist / dist;
                        }
                        /* if soft-distance is enabled, start fading once owner 
is dist-soft from the target */
                        else if (data->flag & LIMITDIST_USESOFT) {
                                // FIXME: there's a problem with "jumping" when 
this kicks in
                                if (dist >= (data->dist - data->soft)) {
                                        sfac = (float)( data->soft*(1.0f - 
expf(-(dist - data->dist)/data->soft)) + data->dist );
-                                       sfac /= dist;
+                                       if (dist != 0.0f) sfac /= dist;
                                        
                                        clamp_surf= 1;
                                }
@@ -2679,7 +2677,7 @@
                else {
                        if (IS_EQF(dist, data->dist)==0) {
                                clamp_surf= 1;
-                               sfac= data->dist / dist;
+                               if (dist != 0.0f) sfac= data->dist / dist;
                        }
                }
                

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to