Revision: 18300
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18300
Author:   theeth
Date:     2009-01-03 23:15:59 +0100 (Sat, 03 Jan 2009)

Log Message:
-----------
2.5

Transform operator replay

Basic support working. Only saves mode and values, not constraint setup.

Removed event pointer from TransInfo (it's not available in operator exec). 
Replaced checks to event->modifiers to a functional modifier bitfield in 
TransInfo (that is, instead of checking for Shift, it checks for MOD_PRECISION) 
to make it remappable later.

Misc:
        X-Mirror for mesh now working with transform

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/transform/transform.c
    branches/blender2.5/blender/source/blender/editors/transform/transform.h
    
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_input.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h        
2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h        
2009-01-03 22:15:59 UTC (rev 18300)
@@ -89,6 +89,7 @@
 void           remake_editMesh(Scene *scene, Object *ob);
 void           free_editMesh(struct EditMesh *em);
 
+void           recalc_editnormals(struct EditMesh *em);
 
 void           EM_init_index_arrays(struct EditMesh *em, int forVert, int 
forEdge, int forFace);
 void           EM_free_index_arrays(void);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h       
2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h       
2009-01-03 22:15:59 UTC (rev 18300)
@@ -127,8 +127,6 @@
 extern void flipface(EditMesh *em, EditFace *efa); // flips for normal 
direction
 extern int compareface(EditFace *vl1, EditFace *vl2);
 
-void recalc_editnormals(EditMesh *em);
-
 /* flag for selection bits, *nor will be filled with normal for extrusion 
constraint */
 /* return value defines if such normal was set */
 extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor);

Modified: 
branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c    
2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c    
2009-01-03 22:15:59 UTC (rev 18300)
@@ -59,7 +59,10 @@
 #include "DNA_userdef_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_space_types.h"
+#include "DNA_windowmanager_types.h"
 
+#include "RNA_access.h"
+
 //#include "BIF_editview.h"            /* arrows_move_cursor   */
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -560,8 +563,6 @@
        float mati[3][3] = {{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 
0.0f, 1.0f}};
        char cmode = constraintModeToChar(t);
        
-       t->event = event;
-       
        t->redraw |= handleMouseInput(t, &t->mouse, event);
 
        if (event->type == MOUSEMOVE)
@@ -569,6 +570,8 @@
                t->mval[0] = event->x - t->ar->winrct.xmin;
                t->mval[1] = event->y - t->ar->winrct.ymin;
                
+               t->redraw = 1;
+               
                applyMouseInput(t, &t->mouse, t->mval, t->values);
        }
        
@@ -577,9 +580,16 @@
                /* enforce redraw of transform when modifiers are used */
                case LEFTCTRLKEY:
                case RIGHTCTRLKEY:
+                       t->modifiers |= MOD_SNAP_GEARS;
                        t->redraw = 1;
                        break;
                        
+               case LEFTSHIFTKEY:
+               case RIGHTSHIFTKEY:
+                       t->modifiers |= MOD_CONSTRAINT_PLANE;
+                       t->redraw = 1;
+                       break;
+
                case SPACEKEY:
                        if ((t->spacetype==SPACE_VIEW3D) && event->alt) {
 #if 0 // TRANSFORM_FIX_ME
@@ -597,7 +607,6 @@
                        }
                        break;
                        
-                       
                case MIDDLEMOUSE:
                        if ((t->flag & T_NO_CONSTRAINT)==0) {
                                /* exception for switching to dolly, or 
trackball, in camera view */
@@ -610,7 +619,7 @@
                                        }
                                }
                                else {
-                                       t->flag |= T_MMB_PRESSED;
+                                       t->modifiers |= MOD_CONSTRAINT_SELECT;
                                        if (t->con.mode & CON_APPLY) {
                                                stopConstraint(t);
                                        }
@@ -867,11 +876,22 @@
        }
        else {
                switch (event->type){
-               /* no redraw on release modifier keys! this makes sure you can 
assign the 'grid' still 
-                  after releasing modifer key */
+               case LEFTSHIFTKEY:
+               case RIGHTSHIFTKEY:
+                       t->modifiers &= ~MOD_CONSTRAINT_PLANE;
+                       t->redraw = 1;
+                       break;
+
+               case LEFTCTRLKEY:
+               case RIGHTCTRLKEY:
+                       t->modifiers &= ~MOD_SNAP_GEARS;
+                       /* no redraw on release modifier keys! this makes sure 
you can assign the 'grid' still 
+                          after releasing modifer key */
+                       //t->redraw = 1;
+                       break;
                case MIDDLEMOUSE:
                        if ((t->flag & T_NO_CONSTRAINT)==0) {
-                               t->flag &= ~T_MMB_PRESSED;
+                               t->modifiers &= ~MOD_CONSTRAINT_SELECT;
                                postSelectConstraint(t);
                                t->redraw = 1;
                        }
@@ -928,8 +948,19 @@
        return success;
 }
 
-void initTransform(bContext *C, TransInfo *t, int mode, int options, wmEvent 
*event)
+void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
 {
+       RNA_int_set(op->ptr, "mode", t->mode);
+       RNA_int_set(op->ptr, "options", t->options);
+       RNA_float_set_array(op->ptr, "values", t->values);
+}
+
+void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
+{
+       int mode    = RNA_int_get(op->ptr, "mode");
+       int options = RNA_int_get(op->ptr, "options");
+       float values[4];
+
        /* added initialize, for external calls to set stuff in TransInfo, like 
undo string */
 
        t->state = TRANS_RUNNING;
@@ -1053,19 +1084,25 @@
                initNodeTranslate(t);
                break;
        }
+
+
+
+       RNA_float_get_array(op->ptr, "values", values);
+       
+       /* overwrite initial values if operator supplied a non-null vector */
+       if (!QuatIsNul(values))
+       {
+               QUATCOPY(t->values, values); /* vec-4 */
+       }
+
 }
 
 void transformApply(TransInfo *t)
 {
-       if (1) // MOUSE MOVE
+       if (t->redraw)
        {
-               if (t->flag & T_MMB_PRESSED)
+               if (t->modifiers & MOD_CONSTRAINT_SELECT)
                        t->con.mode |= CON_SELECT;
-               t->redraw = 1;
-       }
-       if (t->redraw)
-       {
-               // RESET MOUSE MOVE
 
                selectConstraint(t);
                if (t->transform) {
@@ -1090,15 +1127,25 @@
 
 int transformEnd(bContext *C, TransInfo *t)
 {
+       int exit_code = OPERATOR_RUNNING_MODAL;
+       
        if (t->state != TRANS_RUNNING)
        {
                /* handle restoring objects */
-               if(t->state == TRANS_CANCEL) {
+               if(t->state == TRANS_CANCEL)
+               {
+                       exit_code = OPERATOR_CANCELLED;
+                       
+                       /* TRANSFORM_FIX_ME fix jesty's node stuff, shouldn't 
be exceptional at this level */   
                        if(t->spacetype == SPACE_NODE)
                                restoreTransNodes(t);
                        else
                                restoreTransObjects(t); // calls recalcData()
                }
+               else
+               {
+                       exit_code = OPERATOR_FINISHED;
+               }
                
                /* free data */
                postTrans(t);
@@ -1119,12 +1166,9 @@
                        else ED_undo_push(C, transform_to_undostr(t));
                }
                t->undostr= NULL;
-
-               return 1;
        }
-       t->event = NULL;
        
-       return 0;
+       return exit_code;
 }
 
 /* ************************** Manipulator init and main 
**************************** */
@@ -3980,6 +4024,7 @@
 
 /* ---------------- Special Helpers for Various Settings ------------- */
 
+
 /* This function returns the snapping 'mode' for Animation Editors only 
  * We cannot use the standard snapping due to NLA-strip scaling complexities.
  */
@@ -4008,14 +4053,15 @@
                        autosnap= snla->autosnap;
        }
        else {
-               // FIXME: this still toggles the modes...
-               if (t->event->ctrl) 
-                       autosnap= SACTSNAP_STEP;
-               else if (t->event->shift)
-                       autosnap= SACTSNAP_FRAME;
-               else if (t->event->alt)
-                       autosnap= SACTSNAP_MARKER;
-               else
+               // TRANSFORM_FIX_ME This needs to use proper defines for 
t->modifiers
+//             // FIXME: this still toggles the modes...
+//             if (ctrl) 
+//                     autosnap= SACTSNAP_STEP;
+//             else if (shift)
+//                     autosnap= SACTSNAP_FRAME;
+//             else if (alt)
+//                     autosnap= SACTSNAP_MARKER;
+//             else
                        autosnap= SACTSNAP_OFF;
        }
        

Modified: 
branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h    
2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h    
2009-01-03 22:15:59 UTC (rev 18300)
@@ -46,6 +46,7 @@
 struct bConstraint;
 struct BezTriple;
 struct wmOperatorType;
+struct wmOperator;
 struct bContext;
 struct wmEvent;
 struct ARegion;
@@ -187,6 +188,7 @@
 typedef struct TransInfo {
     int         mode;           /* current mode                         */
     int                flag;           /* generic flags for special behaviors  
*/
+    int                        modifiers;              /* special modifiers, 
by function, not key */
        short           state;                  /* current state (running, 
canceled,...)*/
     int         options;        /* current context/options for transform       
               */
     float       val;            /* init value for some transformations (and 
rotation angle)  */
@@ -239,7 +241,6 @@
        struct ScrArea  *sa;
        struct ARegion  *ar;
        struct Scene    *scene;
-       struct wmEvent  *event;         /* last event, reset at the start of 
each transformApply and nulled at the transformEnd */
     short       mval[2];        /* current mouse position               */
     struct Object   *obedit;
 } TransInfo;
@@ -282,9 +283,6 @@
 #define T_PROP_EDIT                    (1 << 11)
 #define T_PROP_CONNECTED       (1 << 12)
 
-       /* if MMB is pressed or not */
-#define        T_MMB_PRESSED           (1 << 13)
-
 #define T_V3D_ALIGN                    (1 << 14)
        /* for 2d views like uv or ipo */
 #define T_2D_EDIT                      (1 << 15) 
@@ -294,6 +292,13 @@
        /* auto-ik is on */
 #define T_AUTOIK                       (1 << 18)
 
+/* TransInfo->modifiers */
+#define        MOD_CONSTRAINT_SELECT   0x01
+#define        MOD_PRECISION                   0x02
+#define        MOD_SNAP_GEARS                  0x04
+#define        MOD_CONSTRAINT_PLANE    0x08
+
+
 /* 
********************************************************************************
 */
 
 /* transinfo->con->mode */
@@ -342,7 +347,8 @@
 
 void TFM_OT_transform(struct wmOperatorType *ot);
 
-void initTransform(struct bContext *C, struct TransInfo *t, int mode, int 
context, struct wmEvent *event);
+void initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator 
*op, struct wmEvent *event);
+void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator 
*op);
 void transformEvent(TransInfo *t, struct wmEvent *event);
 void transformApply(TransInfo *t);
 int  transformEnd(struct bContext *C, TransInfo *t);

Modified: 
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
        2009-01-03 21:10:48 UTC (rev 18299)
+++ 
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
        2009-01-03 22:15:59 UTC (rev 18300)
@@ -906,7 +906,6 @@
 
 static void setNearestAxis3d(TransInfo *t)
 {
-       wmEvent *event = t->event;
        float zfac;
        float mvec[3], axis[3], proj[3];
        float len[3];
@@ -950,7 +949,7 @@
        }
 
        if (len[0] <= len[1] && len[0] <= len[2]) {
-               if (event->shift) {
+               if (t->modifiers & MOD_CONSTRAINT_PLANE) {
                        t->con.mode |= (CON_AXIS1|CON_AXIS2);
                        sprintf(t->con.text, " locking %s X axis", 
t->spacename);
                }
@@ -960,7 +959,7 @@
                }
        }
        else if (len[1] <= len[0] && len[1] <= len[2]) {
-               if (event->shift) {

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to