Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / transform / transform.h
index f642dfc27d9df68cddf554417a2623d35d5cd22e..892187f11db0a4f6fb4e4bf36831429c71130d78 100644 (file)
@@ -200,16 +200,16 @@ typedef struct TransSeq {
 /* for NLA transform (stored in td->extra pointer) */
 typedef struct TransDataNla {
        ID *id;                                         /* ID-block NLA-data is attached to */
-       
+
        struct NlaTrack *oldTrack;      /* Original NLA-Track that the strip belongs to */
        struct NlaTrack *nlt;           /* Current NLA-Track that the strip belongs to */
-       
+
        struct NlaStrip *strip;         /* NLA-strip this data represents */
-       
+
        /* dummy values for transform to write in - must have 3 elements... */
        float h1[3];                            /* start handle */
        float h2[3];                            /* end handle */
-       
+
        int trackIndex;                         /* index of track that strip is currently in */
        int handle;                                     /* handle-index: 0 for dummy entry, -1 for start, 1 for end, 2 for both ends */
 } TransDataNla;
@@ -307,11 +307,6 @@ typedef struct VertSlideData {
 
        SlideOrigData orig_data;
 
-       float perc;
-
-       bool use_even;
-       bool flipped;
-
        int curr_sv_index;
 
        /* result of ED_view3d_ob_project_mat_get */
@@ -428,8 +423,20 @@ typedef struct TransDataContainer {
        TransData2D *data_2d;
 
        struct Object *obedit;
-       /** Normalized editmode matrix ('T_EDIT' only). */
-       float          obedit_mat[3][3];
+
+       /**
+        * Use when #T_LOCAL_MATRIX is set.
+        * Typically: 'obedit->obmat' or 'poseobj->obmat', but may be used elsewhere too.
+        */
+       bool use_local_mat;
+       float  mat[4][4];
+       float imat[4][4];
+       /** 3x3 copies of matrices above. */
+       float  mat3[3][3];
+       float imat3[3][3];
+
+       /** Normalized 'mat3' */
+       float  mat3_unit[3][3];
 
        /** if 't->flag & T_POSE', this denotes pose object */
        struct Object *poseobj;
@@ -500,10 +507,11 @@ typedef struct TransInfo {
        short           twflag;                 /* backup from view3d, to restore on end */
 
        short           prop_mode;
-       
+
        short           mirror;
 
        float           values[4];
+       float           values_modal_offset[4];  /* Offset applied ontop of modal input. */
        float           auto_values[4];
        float           axis[3];
        float           axis_orig[3];   /* TransCon can change 'axis', store the original value here */
@@ -543,6 +551,7 @@ typedef struct TransInfo {
 
 /* transinfo->flag */
 #define T_OBJECT               (1 << 0)
+/** \note We could remove 'T_EDIT' and use 'obedit_type', for now ensure they're in sync. */
 #define T_EDIT                 (1 << 1)
 #define T_POSE                 (1 << 2)
 #define T_TEXTURE              (1 << 3)
@@ -550,7 +559,10 @@ typedef struct TransInfo {
 #define T_CAMERA               (1 << 4)
                 // trans on points, having no rotation/scale
 #define T_POINTS               (1 << 6)
-/* empty slot - (1 << 7) */
+/**
+ * Apply matrix #TransDataContainer.matrix, this avoids having to have duplicate check all over
+ * that happen to apply to spesiifc modes (edit & pose for eg). */
+#define T_LOCAL_MATRIX (1 << 7)
 
        /* restrictions flags */
 #define T_ALL_RESTRICTIONS     ((1 << 8)|(1 << 9)|(1 << 10))
@@ -709,8 +721,10 @@ bool transdata_check_local_islands(TransInfo *t, short around);
 int count_set_pose_transflags(int *out_mode, short around, struct Object *ob);
 
 /* auto-keying stuff used by special_aftertrans_update */
-void autokeyframe_ob_cb_func(struct bContext *C, struct Scene *scene, struct ViewLayer *view_layer, struct View3D *v3d, struct Object *ob, int tmode);
-void autokeyframe_pose_cb_func(struct bContext *C, struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode, short targetless_ik);
+void autokeyframe_ob_cb_func(
+        struct bContext *C, struct Scene *scene, struct ViewLayer *view_layer, struct Object *ob, int tmode);
+void autokeyframe_pose_cb_func(
+        struct bContext *C, struct Scene *scene, struct Object *ob, int tmode, short targetless_ik);
 
 /*********************** Constraints *****************************/
 
@@ -800,6 +814,7 @@ void setInputPostFct(MouseInput *mi, void   (*post)(struct TransInfo *t, float val
 
 void initTransDataContainers_FromObjectData(TransInfo *t);
 void initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, const struct wmEvent *event);
+void freeTransCustomDataForMode(TransInfo *t);
 void postTrans(struct bContext *C, TransInfo *t);
 void resetTransModal(TransInfo *t);
 void resetTransRestrictions(TransInfo *t);