[Bf-blender-cvs] [47de0321bf6] blender2.8: Transform: support initial offset option

Campbell Barton noreply at git.blender.org
Sun May 6 10:19:58 CEST 2018


Commit: 47de0321bf68c8cd96c14e8d0f5ddd8850a2cc12
Author: Campbell Barton
Date:   Sun May 6 09:52:12 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB47de0321bf68c8cd96c14e8d0f5ddd8850a2cc12

Transform: support initial offset option

Needed to redo extrude+transform macro w/o resetting the translation.

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

M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_input.c
M	source/blender/editors/transform/transform_ops.c

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

diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 69f48292b71..0f1abe00eb4 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2408,6 +2408,8 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
 		}
 	}
 
+	BLI_assert(is_zero_v4(t->values_modal_offset));
+
 	/* overwrite initial values if operator supplied a non-null vector
 	 *
 	 * keep last so we can apply the constraints space.
@@ -2423,8 +2425,14 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
 		}
 
 		copy_v4_v4(t->values, values);
-		copy_v4_v4(t->auto_values, values);
-		t->flag |= T_AUTOVALUES;
+
+		if (t->flag & T_MODAL) {
+			copy_v4_v4(t->values_modal_offset, values);
+		}
+		else {
+			copy_v4_v4(t->auto_values, values);
+			t->flag |= T_AUTOVALUES;
+		}
 	}
 
 	t->context = NULL;
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 358be8f9e29..7686431d808 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -511,6 +511,7 @@ typedef struct TransInfo {
 	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 */
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index db761e5e23a..799d2acb918 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -417,6 +417,12 @@ void applyMouseInput(TransInfo *t, MouseInput *mi, const int mval[2], float outp
 		mi->apply(t, mi, mval_db, output);
 	}
 
+	if (!is_zero_v3(t->values_modal_offset)) {
+		float values_ofs[3];
+		mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset);
+		add_v3_v3(t->values, values_ofs);
+	}
+
 	if (mi->post) {
 		mi->post(t, output);
 	}
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 6f31f5311bc..eba03087711 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -479,7 +479,10 @@ static int transform_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 		return OPERATOR_CANCELLED;
 	}
 
-	if (RNA_struct_property_is_set(op->ptr, "value")) {
+	/* When modal, allow 'value' to set initial offset. */
+	if ((event == NULL) &&
+	    RNA_struct_property_is_set(op->ptr, "value"))
+	{
 		return transform_exec(C, op);
 	}
 	else {



More information about the Bf-blender-cvs mailing list