forked from bartvdbraak/blender
fix [#33682] Animation not updated when the active shape index isnt set
This commit is contained in:
parent
df3e244887
commit
d8d24bdebd
@ -59,7 +59,7 @@ void key_curve_position_weights(float t, float data[4], int type);
|
||||
void key_curve_tangent_weights(float t, float data[4], int type);
|
||||
void key_curve_normal_weights(float t, float data[4], int type);
|
||||
|
||||
float *do_ob_key(struct Scene *scene, struct Object *ob);
|
||||
float *BKE_key_evaluate_object(struct Scene *scene, struct Object *ob, int *r_totelem);
|
||||
|
||||
struct Key *BKE_key_from_object(struct Object *ob);
|
||||
struct KeyBlock *BKE_keyblock_from_object(struct Object *ob);
|
||||
|
@ -799,7 +799,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl
|
||||
required_mode |= eModifierMode_Editmode;
|
||||
|
||||
if (cu->editnurb == NULL) {
|
||||
keyVerts = do_ob_key(scene, ob);
|
||||
keyVerts = BKE_key_evaluate_object(scene, ob, &numVerts);
|
||||
|
||||
if (keyVerts) {
|
||||
/* split coords from key data, the latter also includes
|
||||
@ -808,7 +808,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl
|
||||
* shape key modifier yet. */
|
||||
deformedVerts = BKE_curve_keyVertexCos_get(cu, nurb, keyVerts);
|
||||
originalVerts = MEM_dupallocN(deformedVerts);
|
||||
numVerts = BKE_nurbList_verts_count(nurb);
|
||||
BLI_assert(BKE_nurbList_verts_count(nurb) == numVerts);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1300,13 +1300,13 @@ static void do_latt_key(Scene *scene, Object *ob, Key *key, char *out, const int
|
||||
}
|
||||
|
||||
/* returns key coordinates (+ tilt) when key applied, NULL otherwise */
|
||||
float *do_ob_key(Scene *scene, Object *ob)
|
||||
float *BKE_key_evaluate_object(Scene *scene, Object *ob, int *r_totelem)
|
||||
{
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
KeyBlock *actkb = BKE_keyblock_from_object(ob);
|
||||
char *out;
|
||||
int tot = 0, size = 0;
|
||||
|
||||
|
||||
if (key == NULL || key->block.first == NULL)
|
||||
return NULL;
|
||||
|
||||
@ -1344,7 +1344,7 @@ float *do_ob_key(Scene *scene, Object *ob)
|
||||
return NULL;
|
||||
|
||||
/* allocate array */
|
||||
out = MEM_callocN(size, "do_ob_key out");
|
||||
out = MEM_callocN(size, "BKE_key_evaluate_object out");
|
||||
|
||||
/* prevent python from screwing this up? anyhoo, the from pointer could be dropped */
|
||||
key->from = (ID *)ob->data;
|
||||
@ -1383,6 +1383,9 @@ float *do_ob_key(Scene *scene, Object *ob)
|
||||
else if (ob->type == OB_SURF) do_curve_key(scene, ob, key, out, tot);
|
||||
}
|
||||
|
||||
if (r_totelem) {
|
||||
*r_totelem = tot;
|
||||
}
|
||||
return (float *)out;
|
||||
}
|
||||
|
||||
@ -1732,7 +1735,7 @@ void BKE_key_convert_to_mesh(KeyBlock *kb, Mesh *me)
|
||||
}
|
||||
|
||||
/************************* vert coords ************************/
|
||||
float (*BKE_key_convert_to_vertcos(Object * ob, KeyBlock * kb))[3]
|
||||
float (*BKE_key_convert_to_vertcos(Object *ob, KeyBlock *kb))[3]
|
||||
{
|
||||
float (*vertCos)[3], *co;
|
||||
float *fp = kb->data;
|
||||
|
@ -2981,12 +2981,13 @@ static KeyBlock *insert_meshkey(Scene *scene, Object *ob, const char *name, int
|
||||
}
|
||||
else {
|
||||
/* copy from current values */
|
||||
float *data = do_ob_key(scene, ob);
|
||||
int totelem;
|
||||
float *data = BKE_key_evaluate_object(scene, ob, &totelem);
|
||||
|
||||
/* create new block with prepared data */
|
||||
kb = BKE_keyblock_add_ctime(key, name, FALSE);
|
||||
kb->data = data;
|
||||
kb->totelem = me->totvert;
|
||||
kb->totelem = totelem;
|
||||
}
|
||||
|
||||
return kb;
|
||||
@ -3018,11 +3019,12 @@ static KeyBlock *insert_lattkey(Scene *scene, Object *ob, const char *name, int
|
||||
}
|
||||
else {
|
||||
/* copy from current values */
|
||||
float *data = do_ob_key(scene, ob);
|
||||
int totelem;
|
||||
float *data = BKE_key_evaluate_object(scene, ob, &totelem);
|
||||
|
||||
/* create new block with prepared data */
|
||||
kb = BKE_keyblock_add_ctime(key, name, FALSE);
|
||||
kb->totelem = lt->pntsu * lt->pntsv * lt->pntsw;
|
||||
kb->totelem = totelem;
|
||||
kb->data = data;
|
||||
}
|
||||
|
||||
@ -3057,11 +3059,12 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, int
|
||||
}
|
||||
else {
|
||||
/* copy from current values */
|
||||
float *data = do_ob_key(scene, ob);
|
||||
int totelem;
|
||||
float *data = BKE_key_evaluate_object(scene, ob, &totelem);
|
||||
|
||||
/* create new block with prepared data */
|
||||
kb = BKE_keyblock_add_ctime(key, name, FALSE);
|
||||
kb->totelem = BKE_nurbList_verts_count(lb);
|
||||
kb->totelem = totelem;
|
||||
kb->data = data;
|
||||
}
|
||||
|
||||
|
@ -54,13 +54,16 @@ static void deformVerts(ModifierData *md, Object *ob,
|
||||
int numVerts,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
KeyBlock *kb = BKE_keyblock_from_object(ob);
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
float (*deformedVerts)[3];
|
||||
|
||||
if (kb && kb->totelem == numVerts) {
|
||||
deformedVerts = (float(*)[3])do_ob_key(md->scene, ob);
|
||||
if (key && key->block.first) {
|
||||
int deformedVerts_tot;
|
||||
deformedVerts = (float(*)[3])BKE_key_evaluate_object(md->scene, ob, &deformedVerts_tot);
|
||||
if (deformedVerts) {
|
||||
memcpy(vertexCos, deformedVerts, sizeof(float) * 3 * numVerts);
|
||||
if (numVerts == deformedVerts_tot) {
|
||||
memcpy(vertexCos, deformedVerts, sizeof(float) * 3 * numVerts);
|
||||
}
|
||||
MEM_freeN(deformedVerts);
|
||||
}
|
||||
}
|
||||
|
@ -779,8 +779,7 @@ add_dependencies(blender makesdna)
|
||||
|
||||
get_property(BLENDER_LINK_LIBS GLOBAL PROPERTY BLENDER_LINK_LIBS)
|
||||
|
||||
set(BLENDER_LINK_LIBS
|
||||
${BLENDER_LINK_LIBS}
|
||||
list(APPEND BLENDER_LINK_LIBS
|
||||
bf_windowmanager
|
||||
bf_render
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user