Revision: 24653
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24653
Author:   theeth
Date:     2009-11-18 18:14:56 +0100 (Wed, 18 Nov 2009)

Log Message:
-----------
Custom Ratio mouse input didn't check for initialization properly, which could 
lead to NaN values with edge slide.

Also adding missing modal keymaps for some transform operators.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_input.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c  2009-11-18 
17:08:29 UTC (rev 24652)
+++ trunk/blender/source/blender/editors/transform/transform.c  2009-11-18 
17:14:56 UTC (rev 24653)
@@ -555,7 +555,8 @@
        WM_modalkeymap_assign(keymap, "TFM_OT_shrink_fatten");
        WM_modalkeymap_assign(keymap, "TFM_OT_tilt");
        WM_modalkeymap_assign(keymap, "TFM_OT_trackball");
-       
+       WM_modalkeymap_assign(keymap, "TFM_OT_mirror");
+       WM_modalkeymap_assign(keymap, "TFM_OT_edge_slide");
 }
 
 
@@ -4445,8 +4446,9 @@
 
        t->customFree = freeSlideVerts;
 
+       /* set custom point first if you want value to be initialized by init */
+       setCustomPoints(t, &t->mouse, sld->end, sld->start);
        initMouseInputMode(t, &t->mouse, INPUT_CUSTOM_RATIO);
-       setCustomPoints(t, &t->mouse, sld->end, sld->start);
        
        t->idx_max = 0;
        t->num.idx_max = 0;

Modified: trunk/blender/source/blender/editors/transform/transform_input.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_input.c    
2009-11-18 17:08:29 UTC (rev 24652)
+++ trunk/blender/source/blender/editors/transform/transform_input.c    
2009-11-18 17:14:56 UTC (rev 24653)
@@ -165,8 +165,14 @@
 
 void setCustomPoints(TransInfo *t, MouseInput *mi, short start[2], short 
end[2])
 {
-       short *data = mi->data;
+       short *data;
+
+       if (mi->data == NULL) {
+               mi->data = MEM_callocN(sizeof(short) * 4, "custom points");
+       }
        
+       data = mi->data;
+
        data[0] = start[0];
        data[1] = start[1];
        data[2] = end[0];
@@ -180,28 +186,30 @@
        short *data = mi->data;
        short dx, dy;
        
-       dx = data[2] - data[0];
-       dy = data[3] - data[1];
-       
-       length = (float)sqrtf(dx*dx + dy*dy);
-       
-       if (mi->precision) {
-               /* deal with Shift key by adding motion / 10 to motion before 
shift press */
-               short mdx, mdy;
-               mdx = (mi->precision_mval[0] + (float)(mval[0] - 
mi->precision_mval[0]) / 10.0f) - data[2];
-               mdy = (mi->precision_mval[1] + (float)(mval[1] - 
mi->precision_mval[1]) / 10.0f) - data[3];
+       if (data) {
+               dx = data[2] - data[0];
+               dy = data[3] - data[1];
                
-               distance = (mdx*dx + mdy*dy) / length;
-       }
-       else {
-               short mdx, mdy;
-               mdx = mval[0] - data[2];
-               mdy = mval[1] - data[3];
+               length = (float)sqrtf(dx*dx + dy*dy);
                
-               distance = (mdx*dx + mdy*dy) / length;
+               if (mi->precision) {
+                       /* deal with Shift key by adding motion / 10 to motion 
before shift press */
+                       short mdx, mdy;
+                       mdx = (mi->precision_mval[0] + (float)(mval[0] - 
mi->precision_mval[0]) / 10.0f) - data[2];
+                       mdy = (mi->precision_mval[1] + (float)(mval[1] - 
mi->precision_mval[1]) / 10.0f) - data[3];
+
+                       distance = (mdx*dx + mdy*dy) / length;
+               }
+               else {
+                       short mdx, mdy;
+                       mdx = mval[0] - data[2];
+                       mdy = mval[1] - data[3];
+
+                       distance = (mdx*dx + mdy*dy) / length;
+               }
+
+               output[0] = distance / length;
        }
-
-       output[0] = distance / length;
 }
 
 void InputAngle(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
@@ -335,7 +343,6 @@
        case INPUT_CUSTOM_RATIO:
                mi->apply = InputCustomRatio;
                t->helpline = HLP_NONE;
-               mi->data = MEM_callocN(sizeof(short) * 4, "custom points");
                break;
        case INPUT_NONE:
        default:


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

Reply via email to