diff options
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_cloth.c | 22 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_internal.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_key.c | 48 |
3 files changed, 59 insertions, 14 deletions
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c index 19718a33265..3518044a601 100644 --- a/source/blender/makesrna/intern/rna_cloth.c +++ b/source/blender/makesrna/intern/rna_cloth.c @@ -140,6 +140,22 @@ static void rna_ClothSettings_bend_vgroup_set(PointerRNA *ptr, const char *value rna_object_vgroup_name_index_set(ptr, value, &sim->vgroup_bend); } +static PointerRNA rna_ClothSettings_rest_shape_key_get(PointerRNA *ptr) +{ + Object *ob= (Object*)ptr->id.data; + ClothSimSettings *sim= (ClothSimSettings*)ptr->data; + + return rna_object_shapekey_index_get(ob->data, sim->shapekey_rest); +} + +static void rna_ClothSettings_rest_shape_key_set(PointerRNA *ptr, PointerRNA value) +{ + Object *ob= (Object*)ptr->id.data; + ClothSimSettings *sim= (ClothSimSettings*)ptr->data; + + sim->shapekey_rest= rna_object_shapekey_index_set(ob->data, value, sim->shapekey_rest); +} + static void rna_ClothSettings_gravity_get(PointerRNA *ptr, float *values) { ClothSimSettings *sim= (ClothSimSettings*)ptr->data; @@ -334,6 +350,12 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Pre Roll", "Simulation starts on this frame"); RNA_def_property_update(prop, 0, "rna_cloth_reset"); + prop= RNA_def_property(srna, "rest_shape_key", PROP_POINTER, PROP_NONE); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_struct_type(prop, "ShapeKey"); + RNA_def_property_pointer_funcs(prop, "rna_ClothSettings_rest_shape_key_get", "rna_ClothSettings_rest_shape_key_set", NULL); + RNA_def_property_ui_text(prop, "Rest Shade Key", "Shape key to use the rest spring lengths from"); + RNA_def_property_update(prop, 0, "rna_cloth_update"); /* unused */ diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 68a7ca29a1f..433d5ff2904 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -31,6 +31,7 @@ #define RNA_MAGIC ((int)~0) +struct ID; struct IDProperty; struct SDNA; @@ -200,6 +201,8 @@ void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen); void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen); void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen); +PointerRNA rna_object_shapekey_index_get(struct ID *id, int value); +int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current); void rna_Object_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); void rna_Object_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr); diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index 8c7e684b422..47accb86d8f 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -24,6 +24,7 @@ #include <stdlib.h> +#include "RNA_access.h" #include "RNA_define.h" #include "rna_internal.h" @@ -96,30 +97,49 @@ static void rna_ShapeKey_value_range(PointerRNA *ptr, float *min, float *max) *max= data->slidermax; } -static PointerRNA rna_ShapeKey_relative_key_get(PointerRNA *ptr) +PointerRNA rna_object_shapekey_index_get(ID *id, int value) { - Key *key= rna_ShapeKey_find_key(ptr->id.data); - KeyBlock *kb= (KeyBlock*)ptr->data, *kbrel; + Key *key= rna_ShapeKey_find_key(id); + KeyBlock *kb= NULL; + PointerRNA ptr; int a; - if(key && kb->relative < key->totkey) - for(a=0, kbrel=key->block.first; kbrel; kbrel=kbrel->next, a++) - if(a == kb->relative) - return rna_pointer_inherit_refine(ptr, &RNA_ShapeKey, kbrel); + if(key && value < key->totkey) + for(a=0, kb=key->block.first; kb; kb=kb->next, a++) + if(a == value) + break; + + RNA_pointer_create(id, &RNA_ShapeKey, kb, &ptr); - return rna_pointer_inherit_refine(ptr, NULL, NULL); + return ptr; } -static void rna_ShapeKey_relative_key_set(PointerRNA *ptr, PointerRNA value) +int rna_object_shapekey_index_set(ID *id, PointerRNA value, int current) { - Key *key= rna_ShapeKey_find_key(ptr->id.data); - KeyBlock *kb= (KeyBlock*)ptr->data, *kbrel; + Key *key= rna_ShapeKey_find_key(id); + KeyBlock *kb; int a; if(key) - for(a=0, kbrel=key->block.first; kbrel; kbrel=kbrel->next, a++) - if(kbrel == value.data) - kb->relative= a; + for(a=0, kb=key->block.first; kb; kb=kb->next, a++) + if(kb == value.data) + return a; + + return current; +} + +static PointerRNA rna_ShapeKey_relative_key_get(PointerRNA *ptr) +{ + KeyBlock *kb= (KeyBlock*)ptr->data; + + return rna_object_shapekey_index_get(ptr->id.data, kb->relative); +} + +static void rna_ShapeKey_relative_key_set(PointerRNA *ptr, PointerRNA value) +{ + KeyBlock *kb= (KeyBlock*)ptr->data; + + kb->relative= rna_object_shapekey_index_set(ptr->id.data, value, kb->relative); } static void rna_ShapeKeyPoint_co_get(PointerRNA *ptr, float *values) |