[Bf-blender-cvs] [ed81c38] alembic: Extended 'add' function for shape keys that allows passing a NULL pointer for 'from'.

Lukas Tönne noreply at git.blender.org
Sun May 3 18:30:00 CEST 2015


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)




More information about the Bf-blender-cvs mailing list