Fix #29483: edge slide gives nan when zoomed in close. Cause was integer
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Sat, 3 Dec 2011 13:16:32 +0000 (13:16 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Sat, 3 Dec 2011 13:16:32 +0000 (13:16 +0000)
overflow leading to negative value for sqrt().

source/blender/editors/transform/transform_input.c

index 3de68a6e3126494e13f12640407533f9824012f0..a4f03e76fd1a17d7ed0a489390e35a2e5d03af54 100644 (file)
@@ -189,16 +189,16 @@ void setCustomPoints(TransInfo *UNUSED(t), MouseInput *mi, int start[2], int end
 
 static void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], float output[3])
 {
-       float length;
-       float distance;
+       double length;
+       double distance;
+       double dx, dy;
        int *data = mi->data;
-       int dx, dy;
        
        if (data) {
                dx = data[2] - data[0];
                dy = data[3] - data[1];
                
-               length = (float)sqrtf(dx*dx + dy*dy);
+               length = sqrt(dx*dx + dy*dy);
                
                if (mi->precision) {
                        /* deal with Shift key by adding motion / 10 to motion before shift press */
@@ -216,7 +216,7 @@ static void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, const int mva
                        distance = (length != 0.0f)? (mdx*dx + mdy*dy) / length: 0.0f;
                }
 
-               output[0] = (length != 0.0f)? distance / length: 0.0f;
+               output[0] = (float)((length != 0.0f)? distance / length: 0.0f);
        }
 }