[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16848] trunk/blender/source/blender: Bugfix:
Joshua Leung
aligorith at gmail.com
Tue Sep 30 13:53:03 CEST 2008
Revision: 16848
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16848
Author: aligorith
Date: 2008-09-30 13:52:59 +0200 (Tue, 30 Sep 2008)
Log Message:
-----------
Bugfix:
Keyframing from Buttons Window was broken for Materials/Lamps/Worlds due to a mixup regarding the correct adrcodes for texture-slots.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/ipo.c
trunk/blender/source/blender/include/BIF_keyframing.h
trunk/blender/source/blender/src/editipo.c
trunk/blender/source/blender/src/keyframing.c
Modified: trunk/blender/source/blender/blenkernel/intern/ipo.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/ipo.c 2008-09-30 10:54:12 UTC (rev 16847)
+++ trunk/blender/source/blender/blenkernel/intern/ipo.c 2008-09-30 11:52:59 UTC (rev 16848)
@@ -1903,7 +1903,7 @@
}
/* get texture-slot/mapping channel */
-void *give_mtex_poin (MTex *mtex, int adrcode )
+void *give_mtex_poin (MTex *mtex, int adrcode)
{
void *poin= NULL;
Modified: trunk/blender/source/blender/include/BIF_keyframing.h
===================================================================
--- trunk/blender/source/blender/include/BIF_keyframing.h 2008-09-30 10:54:12 UTC (rev 16847)
+++ trunk/blender/source/blender/include/BIF_keyframing.h 2008-09-30 11:52:59 UTC (rev 16848)
@@ -49,13 +49,17 @@
void insert_vert_icu(struct IpoCurve *icu, float x, float y, short flag);
-/* flags for use in insert_key(), and insert_vert_icu() */
+/* flags for use by keyframe creation/deletion calls */
enum {
+ /* used by isnertkey() and insert_vert_icu() */
INSERTKEY_NEEDED = (1<<0), /* only insert keyframes where they're needed */
INSERTKEY_MATRIX = (1<<1), /* insert 'visual' keyframes where possible/needed */
INSERTKEY_FAST = (1<<2), /* don't recalculate handles,etc. after adding key */
INSERTKEY_FASTR = (1<<3), /* don't realloc mem (or increase count, as array has already been set out) */
INSERTKEY_REPLACE = (1<<4), /* only replace an existing keyframe (this overrides INSERTKEY_NEEDED) */
+
+ /* used by common_*key() functions */
+ COMMONKEY_ADDMAP = (1<<10), /* common key: add texture-slot offset bitflag to adrcode before use */
} eInsertKeyFlags;
/* -------- */
Modified: trunk/blender/source/blender/src/editipo.c
===================================================================
--- trunk/blender/source/blender/src/editipo.c 2008-09-30 10:54:12 UTC (rev 16847)
+++ trunk/blender/source/blender/src/editipo.c 2008-09-30 11:52:59 UTC (rev 16848)
@@ -2022,12 +2022,9 @@
/* creates ipo too (if add) */
ipo= verify_ipo(from, blocktype, actname, constname, bonename, add);
- if (ipo && ipo->id.lib==NULL && from->lib==NULL) {
+ if ((ipo) && (ipo->id.lib==NULL) && (from->lib==NULL)) {
/* try to find matching curve */
- for (icu= ipo->curve.first; icu; icu= icu->next) {
- if (icu->adrcode==adrcode)
- break;
- }
+ icu= find_ipocurve(ipo, adrcode);
/* make a new one if none found (and can add) */
if ((icu==NULL) && (add)) {
Modified: trunk/blender/source/blender/src/keyframing.c
===================================================================
--- trunk/blender/source/blender/src/keyframing.c 2008-09-30 10:54:12 UTC (rev 16847)
+++ trunk/blender/source/blender/src/keyframing.c 2008-09-30 11:52:59 UTC (rev 16848)
@@ -334,7 +334,7 @@
/* Get pointer to use to get values from */
// FIXME: this should not be possible with Data-API
-static void *get_context_ipo_poin(ID *id, int blocktype, char *actname, char *constname, IpoCurve *icu, int *vartype)
+static void *get_context_ipo_poin (ID *id, int blocktype, char *actname, char *constname, IpoCurve *icu, int *vartype)
{
switch (blocktype) {
case ID_PO: /* posechannel */
@@ -755,7 +755,10 @@
/* get pointer to data to read from */
poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
- if (poin == NULL) return 0;
+ if (poin == NULL) {
+ printf("Insert Key: No pointer to variable obtained \n");
+ return 0;
+ }
/* obtain value to give keyframe */
if ( (flag & INSERTKEY_MATRIX) &&
@@ -1049,10 +1052,10 @@
{NULL, "%l", 0, -1, 0, {0}}, // separator
- {NULL, "Ofs", ID_MA, 0, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
- {NULL, "Size", ID_MA, 0, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+ {NULL, "Ofs", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
- {NULL, "All Mapping", ID_MA, 0, 14,
+ {NULL, "All Mapping", ID_MA, COMMONKEY_ADDMAP, 14,
{MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
MAP_R,MAP_G,MAP_B,MAP_DVAR,
@@ -1080,10 +1083,10 @@
{NULL, "%l", 0, -1, 0, {0}}, // separator
- {NULL, "Ofs", ID_WO, 0, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
- {NULL, "Size", ID_WO, 0, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+ {NULL, "Ofs", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
- {NULL, "All Mapping", ID_WO, 0, 14,
+ {NULL, "All Mapping", ID_WO, COMMONKEY_ADDMAP, 14,
{MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
MAP_R,MAP_G,MAP_B,MAP_DVAR,
@@ -1106,10 +1109,10 @@
{NULL, "%l", 0, -1, 0, {0}}, // separator
- {NULL, "Ofs", ID_LA, 0, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
- {NULL, "Size", ID_LA, 0, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+ {NULL, "Ofs", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
- {NULL, "All Mapping", ID_LA, 0, 14,
+ {NULL, "All Mapping", ID_LA, COMMONKEY_ADDMAP, 14,
{MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
MAP_R,MAP_G,MAP_B,MAP_DVAR,
@@ -1362,71 +1365,79 @@
{
Material *ma= editnode_get_active_material(G.buts->lockpoin);
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)ma;
- cks->ipo= ma->ipo;
- cks->map= texchannel_to_adrcode(ma->texact);
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_MAT];
- return;
+ if (ma) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)ma;
+ cks->ipo= ma->ipo;
+ cks->map= texchannel_to_adrcode(ma->texact);
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_MAT];
+ return;
+ }
}
break;
case TAB_SHADING_WORLD: /* >------------- World Tab -------------< */
{
World *wo= G.buts->lockpoin;
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)wo;
- cks->ipo= wo->ipo;
- cks->map= texchannel_to_adrcode(wo->texact);
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_WO];
- return;
+ if (wo) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)wo;
+ cks->ipo= wo->ipo;
+ cks->map= texchannel_to_adrcode(wo->texact);
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_WO];
+ return;
+ }
}
break;
case TAB_SHADING_LAMP: /* >------------- Lamp Tab -------------< */
{
Lamp *la= G.buts->lockpoin;
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)la;
- cks->ipo= la->ipo;
- cks->map= texchannel_to_adrcode(la->texact);
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_LA];
- return;
+ if (la) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)la;
+ cks->ipo= la->ipo;
+ cks->map= texchannel_to_adrcode(la->texact);
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_LA];
+ return;
+ }
}
break;
case TAB_SHADING_TEX: /* >------------- Texture Tab -------------< */
{
Tex *tex= G.buts->lockpoin;
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)tex;
- cks->ipo= tex->ipo;
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_TEX];
- return;
+ if (tex) {
+ /* add new keyframing destination */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(sources, cks);
+
+ /* set data */
+ cks->id= (ID *)tex;
+ cks->ipo= tex->ipo;
+
+ /* set keyingsets */
+ *ksc= &ks_contexts[KSC_BUTS_TEX];
+ return;
+ }
}
break;
}
@@ -1785,7 +1796,7 @@
* - certain adrcodes (for MTEX channels need special offsets) // BAD CRUFT!!!
*/
adrcode= ks->adrcodes[i];
- if (ELEM3(ks->blocktype, ID_MA, ID_LA, ID_WO)) {
+ if (ELEM3(ks->blocktype, ID_MA, ID_LA, ID_WO) && (ks->flag & COMMONKEY_ADDMAP)) {
switch (adrcode) {
case MAP_OFS_X: case MAP_OFS_Y: case MAP_OFS_Z:
case MAP_SIZE_X: case MAP_SIZE_Y: case MAP_SIZE_Z:
@@ -1800,6 +1811,7 @@
if (mode == COMMONKEY_MODE_DELETE) {
/* local flags only add on to global flags */
flag = 0;
+ //flag &= ~COMMONKEY_ADDMAP;
/* delete keyframe */
success += deletekey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
@@ -1810,6 +1822,7 @@
if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
// if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
+ flag &= ~COMMONKEY_ADDMAP;
/* insert keyframe */
success += insertkey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
More information about the Bf-blender-cvs
mailing list