Commit: 68e60b3cbbdc6e3396aecab34e9b3bc8b3a8ac6d
Author: Grigory Revzin
Date:   Sat May 31 00:48:14 2014 +0400
https://developer.blender.org/rB68e60b3cbbdc6e3396aecab34e9b3bc8b3a8ac6d

Fixed key->mix_mode having incorrect values

The values of mix_mode (KEY_MIX_FROM_ANIMDATA/KEY_MIX_FROM_TEMPVALUES)
were used the wrong way. Also, added a function to access the active value
of the keyblock.

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

M       source/blender/blenkernel/BKE_key.h
M       source/blender/blenkernel/intern/key.c
M       source/blender/makesdna/DNA_key_types.h

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

diff --git a/source/blender/blenkernel/BKE_key.h 
b/source/blender/blenkernel/BKE_key.h
index c70c054..1232907 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -78,6 +78,9 @@ KeyBlock *BKE_keyblock_find_name(Key *key, const char name[]);
 void      BKE_keyblock_copy_settings(KeyBlock *kb_dst, const KeyBlock *kb_src);
 char     *BKE_keyblock_curval_rnapath_get(Key *key, KeyBlock *kb);
 
+/* returns a pointer to active shape value (mixval/anim-driven val) */
+float    *BKE_keyblock_get_active_value(Key *key, KeyBlock *kb);
+
 /* ==== scratch keyblock ==== */
 
 /* performs a first-time setup of the scratch. if it's already inited 
diff --git a/source/blender/blenkernel/intern/key.c 
b/source/blender/blenkernel/intern/key.c
index 6b0b0b6..ca151f9 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -2073,6 +2073,13 @@ void BKE_key_convert_from_offset(Object *ob, KeyBlock 
*kb, float (*ofs)[3])
                }
        }
 }
+
+float    *BKE_keyblock_get_active_value(Key *key, KeyBlock *kb)
+{
+       return key->mix_mode == KEY_MIX_FROM_ANIMDATA ? &kb->curval : 
&kb->mixval;
+}
+
+
 /* ================== Scratch stuff ======================  */
 
 void BKE_key_init_scratch(Object *ob) 
@@ -2188,7 +2195,7 @@ void key_block_mesh_eval_rel(Object *ob, Key *key, 
KeyBlock *kb, bool use_vgroup
        int a;
        float *per_vertex_weights = NULL;
 
-       float influence = key->mix_mode == KEY_MIX_FROM_ANIMDATA ? kb->curval : 
kb->mixval;
+       float influence = *BKE_keyblock_get_active_value(key, kb);
        
        if (use_vgroup)
                per_vertex_weights = get_weights_array(ob, kb->vgroup, NULL);
diff --git a/source/blender/makesdna/DNA_key_types.h 
b/source/blender/makesdna/DNA_key_types.h
index a0de0b9..cd329bd 100644
--- a/source/blender/makesdna/DNA_key_types.h
+++ b/source/blender/makesdna/DNA_key_types.h
@@ -66,7 +66,7 @@ typedef struct KeyBlock {
        
        float mixval;      /* animation-independent mix influence (Key->type == 
KEY_RELATIVE only) */
 
-       /* ranges, for RNA and UI only to clamp 'curval' */
+       /* ranges, for RNA and UI only to clamp 'curval' and 'mixval' */
        float slidermin;
        float slidermax;
 
@@ -132,8 +132,8 @@ enum {
 
 /* Key->mix_mode */
 enum {
-       KEY_MIX_FROM_ANIMDATA   = 0,
-       KEY_MIX_FROM_TEMPVALUES = 1
+       KEY_MIX_FROM_TEMPVALUES = 0,
+       KEY_MIX_FROM_ANIMDATA   = 1
 };
 
 /* Key->flag */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to