Commit: 99b8c0fe5d783bef9f441dcba7c317b0bb2b3ffb
Author: Campbell Barton
Date:   Mon Apr 9 08:59:28 2018 +0200
Branches: temp-object-multi-mode
https://developer.blender.org/rB99b8c0fe5d783bef9f441dcba7c317b0bb2b3ffb

Work in progress transform code

===================================================================

M       source/blender/editors/transform/transform.c
M       source/blender/editors/transform/transform.h
M       source/blender/editors/transform/transform_constraints.c
M       source/blender/editors/transform/transform_generics.c
M       source/blender/editors/transform/transform_snap.c

===================================================================

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index a4bce5b0f1d..587b1670810 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2963,7 +2963,6 @@ static eRedrawFlag handleEventBend(TransInfo *UNUSED(t), 
const wmEvent *event)
 
 static void Bend(TransInfo *t, const int UNUSED(mval[2]))
 {
-       TransData *td = t->data;
        float vec[3];
        float pivot[3];
        float warp_end_radius[3];
@@ -3034,7 +3033,9 @@ static void Bend(TransInfo *t, const int UNUSED(mval[2]))
                madd_v3_v3fl(pivot, data->warp_tan, +values.scale * 
shell_angle_to_dist((float)M_PI_2 + values.angle));
        }
 
-       for (i = 0; i < t->total; i++, td++) {
+       for (TransHandle *th = t->thand, *th_end = t->thand + t->thand_len; th 
!= th_end; th++) {
+       TransData *td = th->data;
+       for (i = 0; i < th->total; i++, td++) {
                float mat[3][3];
                float delta[3];
                float fac, fac_scaled;
@@ -3080,6 +3081,7 @@ static void Bend(TransInfo *t, const int UNUSED(mval[2]))
                /* location */
                copy_v3_v3(td->loc, vec);
        }
+       } // FIXME(indent)
        
        recalcData(t);
        
@@ -3194,7 +3196,9 @@ static void applyShear(TransInfo *t, const int 
UNUSED(mval[2]))
        mul_m3_m3m3(tmat, smat, persmat);
        mul_m3_m3m3(totmat, persinv, tmat);
 
-       for (i = 0; i < t->total; i++, td++) {
+       for (TransHandle *th = t->thand, *th_end = t->thand + t->thand_len; th 
!= th_end; th++) {
+       TransData *td = th->data;
+       for (i = 0; i < th->total; i++, td++) {
                const float *center, *co;
 
                if (td->flag & TD_NOACTION)
@@ -3232,6 +3236,7 @@ static void applyShear(TransInfo *t, const int 
UNUSED(mval[2]))
                
                add_v3_v3v3(td->loc, td->iloc, vec);
        }
+       } // FIXME(indent)
        
        recalcData(t);
        
@@ -3719,7 +3724,7 @@ static void applyToSphere(TransInfo *t, const int 
UNUSED(mval[2]))
 static void postInputRotation(TransInfo *t, float values[3])
 {
        if ((t->con.mode & CON_APPLY) && t->con.applyRot) {
-               t->con.applyRot(t, NULL, t->axis, values);
+               t->con.applyRot(t, NULL, NULL, t->axis, values);
        }
 }
 
@@ -4032,7 +4037,7 @@ static void applyRotation(TransInfo *t, const int 
UNUSED(mval[2]))
        snapGridIncrement(t, &final);
 
        if ((t->con.mode & CON_APPLY) && t->con.applyRot) {
-               t->con.applyRot(t, NULL, t->axis, NULL);
+               t->con.applyRot(t, NULL, NULL, t->axis, NULL);
        }
        else {
                /* reset axis if constraint is not set */
@@ -5004,7 +5009,7 @@ static void applyPushPull(TransInfo *t, const int 
UNUSED(mval[2]))
        }
 
        if (t->con.applyRot && t->con.mode & CON_APPLY) {
-               t->con.applyRot(t, NULL, axis_global, NULL);
+               t->con.applyRot(t, NULL, NULL, axis_global, NULL);
        }
 
        for (i = 0; i < t->total; i++, td++) {
@@ -5018,7 +5023,7 @@ static void applyPushPull(TransInfo *t, const int 
UNUSED(mval[2]))
                if (t->con.applyRot && t->con.mode & CON_APPLY) {
                        float axis[3];
                        copy_v3_v3(axis, axis_global);
-                       t->con.applyRot(t, td, axis, NULL);
+                       t->con.applyRot(t, th, td, axis, NULL);
 
                        mul_m3_v3(td->smtx, axis);
                        if (isLockConstraint(t)) {
@@ -8280,8 +8285,6 @@ static void headerTimeTranslate(TransInfo *t, char 
str[UI_MAX_DRAW_STR])
 
 static void applyTimeTranslateValue(TransInfo *t)
 {
-       TransData *td = t->data;
-       TransData2D *td2d = t->data2d;
        Scene *scene = t->scene;
        int i;
        
@@ -8290,6 +8293,9 @@ static void applyTimeTranslateValue(TransInfo *t)
 
        float deltax, val /* , valprev */;
 
+       for (TransHandle *th = t->thand, *th_end = t->thand + t->thand_len; th 
!= th_end; th++) {
+       TransData *td = th->data;
+       TransData2D *td2d = th->data2d;
        /* it doesn't matter whether we apply to t->data or t->data2d, but 
t->data2d is more convenient */
        for (i = 0; i < t->total; i++, td++, td2d++) {
                /* it is assumed that td->extra is a pointer to the AnimData,
@@ -8331,6 +8337,7 @@ static void applyTimeTranslateValue(TransInfo *t)
                /* apply nearest snapping */
                doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
        }
+       } // FIXME(indent)
 }
 
 static void applyTimeTranslate(TransInfo *t, const int mval[2])
@@ -8622,7 +8629,8 @@ static void applyTimeScaleValue(TransInfo *t)
        const short autosnap = getAnimEdit_SnapMode(t);
        const double secf = FPS;
 
-
+       for (TransHandle *th = t->thand, *th_end = t->thand + t->thand_len; th 
!= th_end; th++) {
+       TransData *td = th->data;
        for (i = 0; i < t->total; i++, td++, td2d++) {
                /* it is assumed that td->extra is a pointer to the AnimData,
                 * whose active action is where this keyframe comes from
@@ -8649,6 +8657,7 @@ static void applyTimeScaleValue(TransInfo *t)
                /* apply nearest snapping */
                doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
        }
+       } // FIXME(indent)
 }
 
 static void applyTimeScale(TransInfo *t, const int UNUSED(mval[2]))
diff --git a/source/blender/editors/transform/transform.h 
b/source/blender/editors/transform/transform.h
index fe05207e645..e5ea6940551 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -47,6 +47,7 @@
 
 struct Depsgraph;
 struct TransInfo;
+struct TransHandle;
 struct TransData;
 struct TransformOrientation;
 struct TransSnap;
@@ -109,7 +110,7 @@ typedef struct TransSnap {
         * \note Return value can be anything,
         * where the smallest absolute value defines whats closest.
         */
-       float  (*distance)(struct TransInfo *, const float p1[3], const float 
p2[3]);
+       float  (*distance)(struct TransInfo *t, const float p1[3], const float 
p2[3]);
 
        /**
         * Re-usable snap context data.
@@ -127,14 +128,16 @@ typedef struct TransCon {
                             /* the one in TransInfo is not garanty to stay the 
same (Rotates change it)  */
        int   mode;          /* Mode flags of the Constraint                    
                          */
        void  (*drawExtra)(struct TransInfo *t);
+
+                            /* Note: if 'th' is NULL, 'td' must also be NULL. 
*/
                             /* For constraints that needs to draw differently 
from the other
                              * uses this instead of the generic draw function  
                          */
-       void  (*applyVec)(struct TransInfo *t, struct TransData *td, const 
float in[3], float out[3], float pvec[3]);
+       void  (*applyVec)(struct TransInfo *t, struct TransHandle *th, struct 
TransData *td, const float in[3], float out[3], float pvec[3]);
                             /* Apply function pointer for linear vectorial 
transformation                */
                             /* The last three parameters are pointers to the 
in/out/printable vectors    */
-       void  (*applySize)(struct TransInfo *t, struct TransData *td, float 
smat[3][3]);
+       void  (*applySize)(struct TransInfo *t, struct TransHandle *th, struct 
TransData *td, float smat[3][3]);
                             /* Apply function pointer for size transformation 
*/
-       void  (*applyRot)(struct TransInfo *t, struct TransData *td, float 
vec[3], float *angle);
+       void  (*applyRot)(struct TransInfo *t, struct TransHandle *th, struct 
TransData *td, float vec[3], float *angle);
                             /* Apply function pointer for rotation 
transformation */
 } TransCon;
 
@@ -382,7 +385,23 @@ typedef struct TransCenterData {
        unsigned int is_set : 1;
 } TransCenterData;
 
+typedef struct TransHandle {
+       TransData  *data;           /* transformed data (array)             */
+       TransDataExtension *ext;        /* transformed data extension (array)   
*/
+       TransData2D *data2d;            /* transformed data for 2d (array)      
*/
+       int         total;          /* total number of transformed data     */
+
+       struct Object *obedit;
+       float          obedit_mat[3][3]; /* normalized editmode matrix (T_EDIT 
only) */
+
+       struct Object *poseobj;         /* if t->flag & T_POSE, this denotes 
pose object */
+} TransHandle;
+
 typedef struct TransInfo {
+       TransHandle *thand;
+       int          thand_len;
+       int          total_all_handle;
+
        int         mode;           /* current mode                         */
        int             flag;           /* generic flags for special behaviors  
*/
        int                     modifiers;              /* special modifiers, 
by function, not key */
@@ -393,10 +412,6 @@ typedef struct TransInfo {
                                                                /* transform 
function pointer           */
        eRedrawFlag (*handleEvent)(struct TransInfo *, const struct wmEvent *);
                                                                /* event 
handler function pointer  RETURN 1 if redraw is needed */
-       int         total;          /* total number of transformed data     */
-       TransData  *data;           /* transformed data (array)             */
-       TransDataExtension *ext;        /* transformed data extension (array)   
*/
-       TransData2D *data2d;            /* transformed data for 2d (array)      
*/
        TransCon    con;            /* transformed constraint               */
        TransSnap       tsnap;
        NumInput    num;            /* numerical input                      */
@@ -425,6 +440,7 @@ typedef struct TransInfo {
        short           around;
        char            spacetype;              /* spacetype where transforming 
is      */
        char            helpline;               /* helpline modes (not to be 
confused with hotline) */
+       short           obedit_type;    /* Avoid looking inside TransHandle 
obedit. */
 
        float           vec[3];                 /* translation, to show for 
widget      */
        float           mat[3][3];              /* rot/rescale, to show for 
widget      */
@@ -432,8 +448,6 @@ typedef struct TransInfo {
        float           spacemtx[3][3]; /* orientation matrix of the current 
space      */
        char            spacename[64];  /* name of the current space, MAX_NAME  
        */
 
-       struct Object *poseobj;         /* if t->flag & T_POSE, this denotes 
pose object */
-
        /**
         * Rule of thumb for choosing between mode/type:
         * - If transform mode uses the data, assign to `mode`
@@ -484,8 +498,6 @@ typedef struct TransInfo {
        struct ReportList *reports;  /* assign from the operator, or can be 
NULL */
        int         mval[2];        /* current mouse position               */
        float       zfac;           /* use for 3d view */
-       struct Object *obedit;
-       float          obedit_mat[3][3]; /* normalized editmode matrix (T_EDIT 
only) */
        void            *draw_handle_apply;
        void            *draw_handle_view;
        void            *draw_handle_pixel;
diff --git a/source/blender/editors/transform/transform_constraints.c 
b/source/blender/editors/transform/transform_constraints.c
index 4e409e7f77f..81a0d45063e 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -333,7 +333,8 @@ static void planeProject

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to