[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