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