[Bf-blender-cvs] [885e1d1] temp_constraint_volume: Extended mode enum for selecting affected axes for volume preservation.

Lukas Tönne noreply at git.blender.org
Thu Jan 15 13:54:06 CET 2015


Commit: 885e1d10169bb1c3f02180577b122623383415c3
Author: Lukas Tönne
Date:   Thu Jan 15 13:52:40 2015 +0100
Branches: temp_constraint_volume
https://developer.blender.org/rB885e1d10169bb1c3f02180577b122623383415c3

Extended mode enum for selecting affected axes for volume preservation.

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

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

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

diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index a7f3cc5..457b697 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -620,25 +620,43 @@ static void constraint_volume_eval_scale(float result[3], bConstraintVolumeSetti
 		}
 	}
 	
-	result[1] = factor;
 	switch (vol->mode) {
 		/* volume preserving scaling */
+		case CONSTRAINT_VOLUME_YZ:
+			result[0] = factor;
+			result[1] = result[2] = sqrtf(bulge);
+			break;
 		case CONSTRAINT_VOLUME_XZ:
+			result[1] = factor;
 			result[0] = result[2] = sqrtf(bulge);
 			break;
+		case CONSTRAINT_VOLUME_XY:
+			result[2] = factor;
+			result[0] = result[1] = sqrtf(bulge);
+			break;
+		
 		case CONSTRAINT_VOLUME_X:
 			result[0] = bulge;
 			result[2] = 1.0f;
+			result[2] = 1.0f;
+			break;
+		case CONSTRAINT_VOLUME_Y:
+			result[0] = bulge;
+			result[2] = 1.0f;
 			break;
 		case CONSTRAINT_VOLUME_Z:
 			result[0] = 1.0f;
 			result[2] = bulge;
 			break;
-		/* don't care for volume */
-		case CONSTRAINT_NONE:
+		
+		case CONSTRAINT_VOLUME_NONE:
+			/* no scaling */
 			result[0] = 1.0f;
 			result[2] = 1.0f;
 			break;
+		case CONSTRAINT_VOLUME_ORIG:
+			/* keep original scaling */
+			break;
 		default: /* should not happen */
 			BLI_assert(false);
 			break;
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index 748c283..2ec3190 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -556,10 +556,14 @@ typedef enum eConstraintChannel_Flags {
 
 /* bConstraintVolumeSettings->mode */
 typedef enum eConstraintVolumeSettings_Mode {
-	CONSTRAINT_NONE			= 0,
-	CONSTRAINT_VOLUME_XZ	= 1,
-	CONSTRAINT_VOLUME_X		= 2,
-	CONSTRAINT_VOLUME_Z		= 3,
+	CONSTRAINT_VOLUME_NONE		= 0,
+	CONSTRAINT_VOLUME_ORIG		= 1,
+	CONSTRAINT_VOLUME_YZ		= 2,
+	CONSTRAINT_VOLUME_XZ		= 3,
+	CONSTRAINT_VOLUME_XY		= 4,
+	CONSTRAINT_VOLUME_X			= 5,
+	CONSTRAINT_VOLUME_Y			= 6,
+	CONSTRAINT_VOLUME_Z			= 7,
 } eConstraintVolumeSettings_Mode;
 
 /* bConstraintVolumeSettings->flag */
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index 91b7d48..e5b0587 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -295,6 +295,47 @@ static void rna_ConstraintVolumeSettings_update(Main *UNUSED(bmain), Scene *UNUS
 	ED_object_constraint_update(ptr->id.data);
 }
 
+static EnumPropertyItem *rna_ConstraintVolumeSettings_mode_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+                                                                 PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
+{
+	bConstraint *con = (bConstraint *)ptr->data;
+	
+	static EnumPropertyItem mode_items_all[] = {
+		{CONSTRAINT_VOLUME_NONE,	"NONE",				0,	"None",		"No volume adjustment"},
+		{CONSTRAINT_VOLUME_ORIG,	"ORIG",				0,	"Original",	"Keep original volume"},
+		{CONSTRAINT_VOLUME_XZ,		"VOLUME_UNIFORM",	0,	"Uniform",	"Scale all other axes uniformly"},
+		{CONSTRAINT_VOLUME_X,		"VOLUME_X",			0,	"X",		"Only adjust X scale"},
+		{CONSTRAINT_VOLUME_Y,		"VOLUME_Y",			0,	"Y",		"Only adjust Y scale"},
+		{CONSTRAINT_VOLUME_Z,		"VOLUME_Z",			0,	"Z",		"Only adjust Z scale"},
+		{0, NULL, 0, NULL, NULL}
+	};
+	
+	static EnumPropertyItem mode_items_stretchto[] = {
+		{CONSTRAINT_VOLUME_NONE,	"NONE",				0,	"None",		"No volume adjustment"},
+		{CONSTRAINT_VOLUME_XZ,		"VOLUME_UNIFORM",	0,	"Uniform",	"Scale all other axes uniformly"},
+		{CONSTRAINT_VOLUME_X,		"VOLUME_X",			0,	"X",		"Only adjust X scale"},
+		{CONSTRAINT_VOLUME_Z,		"VOLUME_Z",			0,	"Z",		"Only adjust Z scale"},
+		{0, NULL, 0, NULL, NULL}
+	};
+	
+	static EnumPropertyItem mode_items_splineik[] = {
+		{CONSTRAINT_VOLUME_NONE,	"NONE",				0,	"None",		"No volume adjustment"},
+		{CONSTRAINT_VOLUME_ORIG,	"ORIG",				0,	"Original",	"Keep original volume"},
+		{CONSTRAINT_VOLUME_XZ,		"VOLUME_UNIFORM",	0,	"Uniform",	"Scale all other axes uniformly"},
+		{CONSTRAINT_VOLUME_X,		"VOLUME_X",			0,	"X",		"Only adjust X scale"},
+		{CONSTRAINT_VOLUME_Y,		"VOLUME_Y",			0,	"Y",		"Only adjust Y scale"},
+		{CONSTRAINT_VOLUME_Z,		"VOLUME_Z",			0,	"Z",		"Only adjust Z scale"},
+		{0, NULL, 0, NULL, NULL}
+	};
+	
+	switch (con->type) {
+		case CONSTRAINT_TYPE_STRETCHTO:
+			return mode_items_stretchto;
+		default:
+			return mode_items_all;
+	}
+}
+
 static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value)
 {
 	bConstraint *con = ptr->data;
@@ -514,11 +555,8 @@ static void rna_def_constraint_volume_settings(BlenderRNA *brna)
 	StructRNA *srna;
 	PropertyRNA *prop;
 
-	static EnumPropertyItem mode_items[] = {
-		{CONSTRAINT_NONE, "NONE", 0, "None", "No volume adjustment"},
-		{CONSTRAINT_VOLUME_XZ, "VOLUME_XZX", 0, "XZ", "Scale X and Z uniformly"},
-		{CONSTRAINT_VOLUME_X, "VOLUME_X", 0, "X", "Only adjust X scale"},
-		{CONSTRAINT_VOLUME_Z, "VOLUME_Z", 0, "Z", "Only adjust Z scale"},
+	static EnumPropertyItem dummy_items[] = {
+		{0, "DUMMY", 0, "", ""},
 		{0, NULL, 0, NULL, NULL}
 	};
 
@@ -527,7 +565,8 @@ static void rna_def_constraint_volume_settings(BlenderRNA *brna)
 	RNA_def_struct_sdna(srna, "bConstraintVolumeSettings");
 
 	prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
-	RNA_def_property_enum_items(prop, mode_items);
+	RNA_def_property_enum_items(prop, dummy_items);
+	RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_ConstraintVolumeSettings_mode_itemf");
 	RNA_def_property_ui_text(prop, "Mode", "Maintain the object's volume as it stretches");
 	RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_ConstraintVolumeSettings_update");




More information about the Bf-blender-cvs mailing list