[Bf-blender-cvs] [9121517] master: Followup to rB8714ae09f894: better not have several RNA properties affect a single DNA one.

Bastien Montagne noreply at git.blender.org
Mon Apr 28 14:28:46 CEST 2014


Commit: 912151763d0a217ba53e3d566fae655d1f8b8553
Author: Bastien Montagne
Date:   Mon Apr 28 13:20:37 2014 +0200
https://developer.blender.org/rB912151763d0a217ba53e3d566fae655d1f8b8553

Followup to rB8714ae09f894: better not have several RNA properties affect a single DNA one.

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

M	source/blender/blenkernel/BKE_blender.h
M	source/blender/blenkernel/intern/constraint.c
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/makesdna/DNA_constraint_types.h
M	source/blender/makesrna/intern/rna_constraint.c

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

diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 009cff4..6326ba1 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -42,7 +42,7 @@ extern "C" {
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         270
-#define BLENDER_SUBVERSION      4
+#define BLENDER_SUBVERSION      5
 /* 262 was the last editmesh release but it has compatibility code for bmesh data */
 #define BLENDER_MINVERSION      262
 #define BLENDER_MINSUBVERSION   0
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index b55520a..d2ae005 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3206,6 +3206,7 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
 	
 	/* only evaluate if there is a target */
 	if (VALID_CONS_TARGET(ct)) {
+		float *from_min, *from_max, *to_min, *to_max;
 		float loc[3], eul[3], size[3];
 		float dvec[3], sval[3];
 		int i;
@@ -3223,13 +3224,19 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
 					 */
 					negate_v3(dvec);
 				}
+				from_min = data->from_min_scale;
+				from_max = data->from_max_scale;
 				break;
 			case TRANS_ROTATION:
 				mat4_to_eulO(dvec, cob->rotOrder, ct->matrix);
+				from_min = data->from_min_rot;
+				from_max = data->from_max_rot;
 				break;
 			case TRANS_LOCATION:
 			default:
 				copy_v3_v3(dvec, ct->matrix[3]);
+				from_min = data->from_min;
+				from_max = data->from_max;
 				break;
 		}
 		
@@ -3241,8 +3248,8 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
 		/* determine where in range current transforms lie */
 		if (data->expo) {
 			for (i = 0; i < 3; i++) {
-				if (data->from_max[i] - data->from_min[i])
-					sval[i] = (dvec[i] - data->from_min[i]) / (data->from_max[i] - data->from_min[i]);
+				if (from_max[i] - from_min[i])
+					sval[i] = (dvec[i] - from_min[i]) / (from_max[i] - from_min[i]);
 				else
 					sval[i] = 0.0f;
 			}
@@ -3250,9 +3257,9 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
 		else {
 			/* clamp transforms out of range */
 			for (i = 0; i < 3; i++) {
-				CLAMP(dvec[i], data->from_min[i], data->from_max[i]);
-				if (data->from_max[i] - data->from_min[i])
-					sval[i] = (dvec[i] - data->from_min[i]) / (data->from_max[i] - data->from_min[i]);
+				CLAMP(dvec[i], from_min[i], from_max[i]);
+				if (from_max[i] - from_min[i])
+					sval[i] = (dvec[i] - from_min[i]) / (from_max[i] - from_min[i]);
 				else
 					sval[i] = 0.0f;
 			}
@@ -3262,22 +3269,28 @@ static void transform_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
 		/* apply transforms */
 		switch (data->to) {
 			case TRANS_SCALE:
+				to_min = data->to_min_scale;
+				to_max = data->to_max_scale;
 				for (i = 0; i < 3; i++) {
 					/* multiply with original scale (so that it can still be scaled) */
-					size[i] *= data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i]));
+					size[i] *= to_min[i] + (sval[(int)data->map[i]] * (to_max[i] - to_min[i]));
 				}
 				break;
 			case TRANS_ROTATION:
+				to_min = data->to_min_rot;
+				to_max = data->to_max_rot;
 				for (i = 0; i < 3; i++) {
 					/* add to original rotation (so that it can still be rotated) */
-					eul[i] += data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i]));
+					eul[i] += to_min[i] + (sval[(int)data->map[i]] * (to_max[i] - to_min[i]));
 				}
 				break;
 			case TRANS_LOCATION:
 			default:
+				to_min = data->to_min;
+				to_max = data->to_max;
 				for (i = 0; i < 3; i++) {
 					/* add to original location (so that it can still be moved) */
-					loc[i] += (data->to_min[i] + (sval[(int)data->map[i]] * (data->to_max[i] - data->to_min[i])));
+					loc[i] += (to_min[i] + (sval[(int)data->map[i]] * (to_max[i] - to_min[i])));
 				}
 				break;
 		}
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 507d711..ae6d5ee 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -79,6 +79,34 @@ static void do_version_constraints_radians_degrees_270_1(ListBase *lb)
 	}
 }
 
+static void do_version_constraints_radians_degrees_270_5(ListBase *lb)
+{
+	bConstraint *con;
+
+	for (con = lb->first; con; con = con->next) {
+		if (con->type == CONSTRAINT_TYPE_TRANSFORM) {
+			bTransformConstraint *data = (bTransformConstraint *)con->data;
+
+			if (data->from == TRANS_ROTATION) {
+				copy_v3_v3(data->from_min_rot, data->from_min);
+				copy_v3_v3(data->from_max_rot, data->from_max);
+			}
+			else if (data->from == TRANS_SCALE) {
+				copy_v3_v3(data->from_min_scale, data->from_min);
+				copy_v3_v3(data->from_max_scale, data->from_max);
+			}
+
+			if (data->to == TRANS_ROTATION) {
+				copy_v3_v3(data->to_min_rot, data->to_min);
+				copy_v3_v3(data->to_max_rot, data->to_max);
+			}
+			else if (data->to == TRANS_SCALE) {
+				copy_v3_v3(data->to_min_scale, data->to_min);
+				copy_v3_v3(data->to_max_scale, data->to_max);
+			}
+		}
+	}
+}
 
 void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 {
@@ -204,6 +232,23 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 		}
 	}
 
+	if (!MAIN_VERSION_ATLEAST(main, 270, 5)) {
+		Object *ob;
+
+		/* Update Transform constraint (again :|). */
+		for (ob = main->object.first; ob; ob = ob->id.next) {
+			do_version_constraints_radians_degrees_270_5(&ob->constraints);
+
+			if (ob->pose) {
+				/* Bones constraints! */
+				bPoseChannel *pchan;
+				for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
+					do_version_constraints_radians_degrees_270_5(&pchan->constraints);
+				}
+			}
+		}
+	}
+
 	if (!DNA_struct_elem_find(fd->filesdna, "Material", "int", "mode2")) { /* will be replaced with version check when other new flag is added to mode2 */
 		Material *ma;
 
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index 999c669..e35e467 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -338,9 +338,18 @@ typedef struct bTransformConstraint {
 	
 	float		from_min[3];	/* from_min/max defines range of target transform 	*/
 	float		from_max[3];	/* 	to map on to to_min/max range. 			*/
-	
 	float		to_min[3];		/* range of motion on owner caused by target  */
 	float		to_max[3];
+
+	float		from_min_rot[3];	/* from_min/max defines range of target transform 	*/
+	float		from_max_rot[3];	/* 	to map on to to_min/max range. 			*/
+	float		to_min_rot[3];		/* range of motion on owner caused by target  */
+	float		to_max_rot[3];
+
+	float		from_min_scale[3];	/* from_min/max defines range of target transform 	*/
+	float		from_max_scale[3];	/* 	to map on to to_min/max range. 			*/
+	float		to_min_scale[3];		/* range of motion on owner caused by target  */
+	float		to_max_scale[3];
 } bTransformConstraint;
 
 /* Pivot Constraint */
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index 1a18a1d..5fbaae7 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -1719,146 +1719,146 @@ static void rna_def_constraint_transform(BlenderRNA *brna)
 
 	/* Rot */
 	prop = RNA_def_property(srna, "from_min_x_rot", PROP_FLOAT, PROP_ANGLE);
-	RNA_def_property_float_sdna(prop, NULL, "from_min[0]");
+	RNA_def_property_float_sdna(prop, NULL, "from_min_rot[0]");
 	RNA_def_property_ui_range(prop, DEG2RADF(-180.0f), DEG2RADF(180.0f), 10, 3);
 	RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion");
 	RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
 
 	prop = RNA_def_property(srna, "from_min_y_rot", PROP_FLOAT, PROP_ANGLE);
-	RNA_def_property_float_sdna(prop, NULL, "from_min[1]");
+	RNA_def_property_float_sdna(prop, NULL, "from_min_rot[1]");
 	RNA_def_property_ui_range(prop, DEG2RADF(-180.0f), DEG2RADF(180.0f), 10, 3);
 	RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion");
 	RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
 
 	prop = RNA_def_property(srna, "from_min_z_rot", PROP_FLOAT, PROP_ANGLE);
-	RNA_def_property_float_sdna(prop, NULL, "from_min[2]");
+	RNA_def_property_float_sdna(prop, NULL, "from_min_rot[2]");
 	RNA_def_property_ui_range(prop, DEG2RADF(-180.0f), DEG2RADF(180.0f), 10, 3);
 	RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion");
 	RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
 
 	prop = RNA_def_property(srna, "from_max_x_rot", PROP_FLOAT, PROP_ANGLE);
-	RNA_def_property_float_sdna(prop, NULL, "from_max[0]");
+	RNA_def_property_float_sdna(prop, NULL, "from_max_rot[0]");
 	RNA_def_property_ui_range(prop, DEG2RADF(-180.0f), DEG2RADF(180.0f), 10, 3);
 	RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion");
 	RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
 
 	prop = RNA_def_property(srna, "from_max_y_rot", PROP_FLOAT, PROP_ANGLE);
-	RNA_def_property_float_sdna(prop, NULL, "from_max[1]");
+	RNA_def_property_float_sdna(prop, NULL, "from_max_rot[1]");
 	RNA_def_property_ui_range(prop, DEG2RADF(-180.0f), DEG2RADF(180.0f), 10, 3);
 	RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion");
 	RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
 
 	prop = RNA_def_property(srna, "from_max_z_rot", PROP_FLOAT, PROP_ANGLE);
-	RNA_def_property_float_sdna(prop, NULL, "from_max[2]");
+	RNA_def_property_float_sdna(prop, NULL, "from_max_rot[2]");
 	RNA_def_property_ui_range(prop, DEG2RADF(-180.0f), DEG2RADF(180.0f), 10, 3);
 	RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source mo

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list