Revision: 19212
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19212
Author:   theeth
Date:     2009-03-06 16:50:15 +0100 (Fri, 06 Mar 2009)

Log Message:
-----------
Transform fun

extracting params in split transform operators.

work in progress still, but lots of fun with operator replay (F6)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/editors/include/BIF_transform.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_conversions.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-03-06 15:46:13 UTC (rev 19211)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c        
2009-03-06 15:50:15 UTC (rev 19212)
@@ -287,6 +287,8 @@
        sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH;
        sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE;
 
+       sce->toolsettings->proportional_size = 1.0f;
+
        pset= &sce->toolsettings->particle;
        pset->flag= PE_KEEP_LENGTHS|PE_LOCK_FIRST|PE_DEFLECT_EMITTER;
        pset->emitterdist= 0.25f;

Modified: 
branches/blender2.5/blender/source/blender/editors/include/BIF_transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/BIF_transform.h  
2009-03-06 15:46:13 UTC (rev 19211)
+++ branches/blender2.5/blender/source/blender/editors/include/BIF_transform.h  
2009-03-06 15:50:15 UTC (rev 19212)
@@ -56,7 +56,6 @@
        TFM_WARP,
        TFM_SHRINKFATTEN,
        TFM_TILT,
-       TFM_LAMP_ENERGY,
        TFM_TRACKBALL,
        TFM_PUSHPULL,
        TFM_CREASE,

Modified: 
branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c    
2009-03-06 15:46:13 UTC (rev 19211)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c    
2009-03-06 15:50:15 UTC (rev 19212)
@@ -772,7 +772,7 @@
                        break;
                case PADPLUSKEY:
                        if(event->keymodifier & KM_ALT && t->flag & 
T_PROP_EDIT) {
-                               t->propsize*= 1.1f;
+                               t->prop_size*= 1.1f;
                                calculatePropRatio(t);
                        }
                        t->redraw= 1;
@@ -783,7 +783,7 @@
                                transform_autoik_update(t, 1);
                        }
                        else if(t->flag & T_PROP_EDIT) {
-                               t->propsize*= 1.1f;
+                               t->prop_size*= 1.1f;
                                calculatePropRatio(t);
                        }
                        else view_editmove(event->type);
@@ -791,7 +791,7 @@
                        break;
                case PADMINUS:
                        if(event->keymodifier & KM_ALT && t->flag & 
T_PROP_EDIT) {
-                               t->propsize*= 0.90909090f;
+                               t->prop_size*= 0.90909090f;
                                calculatePropRatio(t);
                        }
                        t->redraw= 1;
@@ -802,7 +802,7 @@
                                transform_autoik_update(t, -1);
                        }
                        else if (t->flag & T_PROP_EDIT) {
-                               t->propsize*= 0.90909090f;
+                               t->prop_size*= 0.90909090f;
                                calculatePropRatio(t);
                        }
                        else view_editmove(event->type);
@@ -903,7 +903,7 @@
        
        t->mode = TFM_DUMMY;
 
-       initTransInfo(C, t, event);                                     // 
internal data, mouse, vectors
+       initTransInfo(C, t, NULL, event);                                       
// internal data, mouse, vectors
 
        createTransData(C, t);                  // make TransData structs from 
selection
 
@@ -942,21 +942,85 @@
 
 void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
 {
-       short twmode= (t->spacetype==SPACE_VIEW3D)? ((View3D*)t->view)->twmode: 
V3D_MANIP_GLOBAL;
+       Scene *sce = CTX_data_scene(C);
+       int constraint_axis[3] = {0, 0, 0};
+       int proportional = 0;
 
        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);
 
+       if (t->flag & T_AUTOVALUES)
+       {
+               RNA_float_set_array(op->ptr, "value", t->auto_values);
+       }
+       else
+       {
+               RNA_float_set_array(op->ptr, "value", t->values);
+       }
+
+       /* XXX convert stupid flag to enum */
+       switch(t->flag & (T_PROP_EDIT|T_PROP_CONNECTED))
+       {
+       case (T_PROP_EDIT|T_PROP_CONNECTED):
+               proportional = 2;
+               break;
+       case T_PROP_EDIT:
+               proportional = 1;
+               break;
+       default:
+               proportional = 0;
+       }
+
+       if (RNA_struct_find_property(op->ptr, "proportional"))
+       {
+               RNA_enum_set(op->ptr, "proportional", proportional);
+               RNA_enum_set(op->ptr, "proportional_mode", t->prop_mode);
+               RNA_float_set(op->ptr, "proportional_size", t->prop_size);
+       }
+
+       if (RNA_struct_find_property(op->ptr, "mirror"))
+       {
+               RNA_boolean_set(op->ptr, "mirror", t->flag & T_MIRROR);
+       }
        
-       RNA_int_set(op->ptr, "constraint_mode", t->con.mode);
-       RNA_int_set(op->ptr, "constraint_orientation", twmode);
-       RNA_float_set_array(op->ptr, "constraint_matrix", (float*)t->con.mtx);
+       if (RNA_struct_find_property(op->ptr, "constraint_mode"))
+       {
+               RNA_int_set(op->ptr, "constraint_mode", t->con.mode);
+               RNA_int_set(op->ptr, "constraint_orientation", 
t->current_orientation);
+
+               if (t->con.mode & CON_APPLY)
+               {
+                       if (t->con.mode & CON_AXIS0) {
+                               constraint_axis[0] = 1;
+                       }
+                       if (t->con.mode & CON_AXIS1) {
+                               constraint_axis[1] = 1;
+                       }
+                       if (t->con.mode & CON_AXIS2) {
+                               constraint_axis[2] = 1;
+                       }
+               }
+
+               RNA_boolean_set_array(op->ptr, "constraint_axis", 
constraint_axis);
+       }
+
+       // XXX If modal, save settings back in scene
+       if (t->flag & T_MODAL)
+       {
+               sce->prop_mode = t->prop_mode;
+               sce->proportional = proportional;
+
+               if(t->spacetype == SPACE_VIEW3D)
+               {
+                       View3D *v3d = t->view;
+                       
+                       v3d->twmode = t->current_orientation;
+               }
+       }
 }
 
-void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
+void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, 
int mode)
 {
-       int mode    = RNA_int_get(op->ptr, "mode");
        int options = RNA_int_get(op->ptr, "options");
 
        /* added initialize, for external calls to set stuff in TransInfo, like 
undo string */
@@ -967,8 +1031,8 @@
        
        t->mode = mode;
 
-       initTransInfo(C, t, event);                                     // 
internal data, mouse, vectors
-       
+       initTransInfo(C, t, op, event);                                 // 
internal data, mouse, vectors
+
        initTransformOrientation(C, t);
 
        if(t->spacetype == SPACE_VIEW3D)
@@ -1094,26 +1158,40 @@
                initAlign(t);
                break;
        }
-       
+
        /* overwrite initial values if operator supplied a non-null vector */
-       if (RNA_property_is_set(op->ptr, "values"))
+       if (RNA_property_is_set(op->ptr, "value"))
        {
                float values[4];
-               RNA_float_get_array(op->ptr, "values", values);
+               RNA_float_get_array(op->ptr, "value", values);
                QUATCOPY(t->values, values);
+               QUATCOPY(t->auto_values, values);
+               t->flag |= T_AUTOVALUES;
        }
 
        /* Constraint init from operator */
+       if (RNA_property_is_set(op->ptr, "constraint_axis"))
        {
-               t->con.mode = RNA_int_get(op->ptr, "constraint_mode");
-               
-               if (t->con.mode & CON_APPLY)
+               int constraint_axis[3];
+
+               RNA_boolean_get_array(op->ptr, "constraint_axis", 
constraint_axis);
+
+               if (constraint_axis[0] || constraint_axis[1] || 
constraint_axis[2])
                {
-                       RNA_float_get_array(op->ptr, "constraint_matrix", 
(float*)t->spacemtx);
-                       
+                       t->con.mode |= CON_APPLY;
+
+                       if (constraint_axis[0]) {
+                               t->con.mode |= CON_AXIS0;
+                       }
+                       if (constraint_axis[1]) {
+                               t->con.mode |= CON_AXIS1;
+                       }
+                       if (constraint_axis[2]) {
+                               t->con.mode |= CON_AXIS2;
+                       }
+                               
                        setUserConstraint(t, t->con.mode, "%s");                
                }
-
        }
 }
 
@@ -2227,6 +2305,13 @@
 
        applySnapping(t, size);
 
+       if (t->flag & T_AUTOVALUES)
+       {
+               VECCOPY(size, t->auto_values);
+       }
+
+       VECCOPY(t->values, size);
+
        SizeToMat3(size, mat);
 
        if (t->con.applySize) {

Modified: 
branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h    
2009-03-06 15:46:13 UTC (rev 19211)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h    
2009-03-06 15:50:15 UTC (rev 19212)
@@ -214,7 +214,7 @@
     NDofInput   ndof;           /* ndof input                           */
     MouseInput mouse;                  /* mouse input                          
*/
     char        redraw;         /* redraw flag                          */
-       float           propsize;               /* proportional circle radius   
        */
+       float           prop_size;              /* proportional circle radius   
        */
        char            proptext[20];   /* proportional falloff text            
        */
     float       center[3];      /* center of transformation             */
     int         center2d[2];    /* center in screen coordinates         */
@@ -245,7 +245,12 @@
 
        /*************** NEW STUFF *********************/
 
+       short           current_orientation;
+
+       short           prop_mode;
+
        float           values[4];
+       float           auto_values[4];
        void            *view;
        struct ScrArea  *sa;
        struct ARegion  *ar;
@@ -303,6 +308,13 @@
        /* auto-ik is on */
 #define T_AUTOIK                       (1 << 18)
 
+#define T_MIRROR                       (1 << 19)
+
+#define T_AUTOVALUES           (1 << 20)
+
+       /* to specificy if we save back settings at the end */
+#define        T_MODAL                         (1 << 21)
+
 /* TransInfo->modifiers */
 #define        MOD_CONSTRAINT_SELECT   0x01
 #define        MOD_PRECISION                   0x02
@@ -354,7 +366,7 @@
 
 void TFM_OT_transform(struct wmOperatorType *ot);
 
-void initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator 
*op, struct wmEvent *event);
+void initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator 
*op, struct wmEvent *event, int mode);
 void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator 
*op);
 void transformEvent(TransInfo *t, struct wmEvent *event);
 void transformApply(struct bContext *C, TransInfo *t);
@@ -539,7 +551,7 @@
 
 /*********************** Generics ********************************/
 
-void initTransInfo(struct bContext *C, TransInfo *t, struct wmEvent *event);
+void initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, 
struct wmEvent *event);
 void postTrans (TransInfo *t);
 void resetTransRestrictions(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-03-06 15:46:13 UTC (rev 19211)
+++ 
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
        2009-03-06 15:50:15 UTC (rev 19212)
@@ -90,6 +90,28 @@
 static void drawObjectConstraint(TransInfo *t);
 
 /* ************************** CONSTRAINTS ************************* */
+void constraintAutoValues(TransInfo *t, float vec[3])
+{
+       int mode = t->con.mode;
+       if (mode & CON_APPLY)
+       {
+               float nval = (t->flag & T_NULL_ONE)?1.0f:0.0f;
+
+               if ((mode & CON_AXIS0) == 0)
+               {
+                       vec[0] = nval;
+               }
+               if ((mode & CON_AXIS1) == 0)
+               {
+                       vec[1] = nval;
+               }
+               if ((mode & CON_AXIS2) == 0)
+               {
+                       vec[2] = nval;
+               }
+       }
+}
+
 void constraintNumInput(TransInfo *t, float vec[3])
 {
        int mode = t->con.mode;
@@ -99,6 +121,8 @@
                if (getConstraintSpaceDimension(t) == 2) {
                        int axis = mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2);
                        if (axis == (CON_AXIS0|CON_AXIS1)) {
+                               vec[0] = vec[0];
+                               vec[1] = vec[1];
                                vec[2] = nval;
                        }

@@ 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