[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45562] trunk/blender/source/blender/ blenkernel: change add_keyblock() not to sort keyblocks by time since this can be a problem when using the function in lower level parts of the code , instead add add_keyblock_ctime() which sets time and sorts on absolute shape keys.
Campbell Barton
ideasman42 at gmail.com
Thu Apr 12 13:05:17 CEST 2012
Revision: 45562
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45562
Author: campbellbarton
Date: 2012-04-12 11:05:16 +0000 (Thu, 12 Apr 2012)
Log Message:
-----------
change add_keyblock() not to sort keyblocks by time since this can be a problem when using the function in lower level parts of the code, instead add add_keyblock_ctime() which sets time and sorts on absolute shape keys.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_key.h
trunk/blender/source/blender/blenkernel/intern/key.c
trunk/blender/source/blender/blenkernel/intern/object.c
Modified: trunk/blender/source/blender/blenkernel/BKE_key.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_key.h 2012-04-12 09:10:10 UTC (rev 45561)
+++ trunk/blender/source/blender/blenkernel/BKE_key.h 2012-04-12 11:05:16 UTC (rev 45562)
@@ -63,6 +63,7 @@
struct Key *ob_get_key(struct Object *ob);
struct KeyBlock *add_keyblock(struct Key *key, const char *name);
+struct KeyBlock *add_keyblock_ctime(struct Key *key, const char * name, const short do_force);
struct KeyBlock *ob_get_keyblock(struct Object *ob);
struct KeyBlock *ob_get_reference_keyblock(struct Object *ob);
struct KeyBlock *key_get_keyblock(struct Key *key, int index);
Modified: trunk/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/key.c 2012-04-12 09:10:10 UTC (rev 45561)
+++ trunk/blender/source/blender/blenkernel/intern/key.c 2012-04-12 11:05:16 UTC (rev 45562)
@@ -1472,15 +1472,30 @@
kb->slidermin= 0.0f;
kb->slidermax= 1.0f;
-
- // XXX kb->pos is the confusing old horizontal-line RVK crap in old IPO Editor...
- if (key->type == KEY_RELATIVE) {
- kb->pos= curpos + 0.1f;
- }
- else {
+
+ /**
+ * \note caller may want to set this to current time, but don't do it here since we need to sort
+ * which could cause problems in some cases, see #add_keyblock_ctime */
+ kb->pos = curpos + 0.1f; /* only used for absolute shape keys */
+
+ return kb;
+}
+
+/**
+ * \note sorting is a problematic side effect in some cases,
+ * better only do this explicitly by having its own function,
+ *
+ * \param do_force always use ctime even for relative keys.
+ */
+KeyBlock *add_keyblock_ctime(Key *key, const char *name, const short do_force)
+{
+ KeyBlock *kb = add_keyblock(key, name);
+
+ if (do_force || (key->type != KEY_RELATIVE)) {
kb->pos = key->ctime / 100.0f;
sort_keys(key);
}
+
return kb;
}
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2012-04-12 09:10:10 UTC (rev 45561)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2012-04-12 11:05:16 UTC (rev 45562)
@@ -2869,7 +2869,7 @@
if (newkey || from_mix==FALSE) {
/* create from mesh */
- kb= add_keyblock(key, name);
+ kb = add_keyblock_ctime(key, name, FALSE);
mesh_to_key(me, kb);
}
else {
@@ -2877,7 +2877,7 @@
float *data= do_ob_key(scene, ob);
/* create new block with prepared data */
- kb= add_keyblock(key, name);
+ kb = add_keyblock_ctime(key, name, FALSE);
kb->data= data;
kb->totelem= me->totvert;
}
@@ -2899,7 +2899,7 @@
}
if (newkey || from_mix==FALSE) {
- kb= add_keyblock(key, name);
+ kb = add_keyblock_ctime(key, name, FALSE);
if (!newkey) {
KeyBlock *basekb= (KeyBlock *)key->block.first;
kb->data= MEM_dupallocN(basekb->data);
@@ -2914,7 +2914,7 @@
float *data= do_ob_key(scene, ob);
/* create new block with prepared data */
- kb= add_keyblock(key, name);
+ kb = add_keyblock_ctime(key, name, FALSE);
kb->totelem= lt->pntsu*lt->pntsv*lt->pntsw;
kb->data= data;
}
@@ -2938,7 +2938,7 @@
if (newkey || from_mix==FALSE) {
/* create from curve */
- kb= add_keyblock(key, name);
+ kb = add_keyblock_ctime(key, name, FALSE);
if (!newkey) {
KeyBlock *basekb= (KeyBlock *)key->block.first;
kb->data= MEM_dupallocN(basekb->data);
@@ -2953,7 +2953,7 @@
float *data= do_ob_key(scene, ob);
/* create new block with prepared data */
- kb= add_keyblock(key, name);
+ kb = add_keyblock_ctime(key, name, FALSE);
kb->totelem= count_curveverts(lb);
kb->data= data;
}
More information about the Bf-blender-cvs
mailing list