Commit: ed81c38c975fae00f1ef11c0ea48a4e52a7feaf8
Author: Lukas Tönne
Date:   Sun May 3 13:46:38 2015 +0200
Branches: alembic
https://developer.blender.org/rBed81c38c975fae00f1ef11c0ea48a4e52a7feaf8

Extended 'add' function for shape keys that allows passing a NULL
pointer for 'from'.

The Key DNA has some very old and largely deprecated legacy code that
needs initializing, which requires either explicit info or deduction
from an ID. The cache modifier creates keys in a new environment without
an existing known ID type to deduce the data element settings from.

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

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

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

diff --git a/source/blender/blenkernel/BKE_key.h 
b/source/blender/blenkernel/BKE_key.h
index 08fa096..03b781e 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -47,9 +47,15 @@ struct WeightsArrayCache;
 extern "C" {
 #endif
 
+/* old defines from DNA_ipo_types.h for data-type, stored in DNA - don't 
modify! */
+#define IPO_FLOAT       4
+#define IPO_BEZTRIPLE   100
+#define IPO_BPOINT      101
+
 void        BKE_key_free(struct Key *sc);
 void        BKE_key_free_nolib(struct Key *key);
 struct Key *BKE_key_add(struct ID *id);
+struct Key *BKE_key_add_ex(struct ID *from, char elemtype, char numelem, int 
elemsize);
 struct Key *BKE_key_copy(struct Key *key);
 struct Key *BKE_key_copy_nolib(struct Key *key);
 void        BKE_key_make_local(struct Key *key);
diff --git a/source/blender/blenkernel/intern/key.c 
b/source/blender/blenkernel/intern/key.c
index 3d8950b..e29a522 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -68,11 +68,6 @@
 #define KEY_MODE_BPOINT     1
 #define KEY_MODE_BEZTRIPLE  2
 
-/* old defines from DNA_ipo_types.h for data-type, stored in DNA - don't 
modify! */
-#define IPO_FLOAT       4
-#define IPO_BEZTRIPLE   100
-#define IPO_BPOINT      101
-
 void BKE_key_free(Key *key)
 {
        KeyBlock *kb;
@@ -97,7 +92,7 @@ void BKE_key_free_nolib(Key *key)
        }
 }
 
-Key *BKE_key_add(ID *id)    /* common function */
+Key *BKE_key_add_ex(ID *from, char elemtype, char numelem, int elemsize)    /* 
common function */
 {
        Key *key;
        char *el;
@@ -105,47 +100,49 @@ Key *BKE_key_add(ID *id)    /* common function */
        key = BKE_libblock_alloc(G.main, ID_KE, "Key");
        
        key->type = KEY_NORMAL;
-       key->from = id;
+       key->from = from;
 
        key->uidgen = 1;
        
+       el = key->elemstr;
+       
+       el[0] = numelem;
+       el[1] = elemtype;
+       el[2] = 0;
+       
+       key->elemsize = elemsize;
+       
+       return key;
+}
+
+Key *BKE_key_add(ID *id)
+{
+       /* XXX the code here uses some defines which will soon be deprecated... 
*/
+       char elemtype = IPO_FLOAT;
+       char numelem = 0;
+       int elemsize = 0;
+       
        if (id) {
-               /* XXX the code here uses some defines which will soon be 
deprecated... */
                switch (GS(id->name)) {
                        case ID_ME:
-                               el = key->elemstr;
-                               
-                               el[0] = 3;
-                               el[1] = IPO_FLOAT;
-                               el[2] = 0;
-                               
-                               key->elemsize = 12;
-                               
+                               numelem = 3;
+                               elemtype = IPO_FLOAT;
+                               elemsize = 12;
                                break;
                        case ID_LT:
-                               el = key->elemstr;
-                               
-                               el[0] = 3;
-                               el[1] = IPO_FLOAT;
-                               el[2] = 0;
-                               
-                               key->elemsize = 12;
-                               
+                               numelem = 3;
+                               elemtype = IPO_FLOAT;
+                               elemsize = 12;
                                break;
                        case ID_CU:
-                               el = key->elemstr;
-                               
-                               el[0] = 4;
-                               el[1] = IPO_BPOINT;
-                               el[2] = 0;
-                               
-                               key->elemsize = 16;
-                               
+                               numelem = 4;
+                               elemtype = IPO_BPOINT;
+                               elemsize = 16;
                                break;
                }
        }
        
-       return key;
+       return BKE_key_add_ex(id, elemtype, numelem, elemsize);
 }
 
 Key *BKE_key_copy(Key *key)

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to