Matt bugreport; stride bone caused character to float away while moving

a key in action window.

- Found bad constructed loop, it was redrawing and recalculating things
  even when key didnt move
- Depsgraph should also recalc object itself

Same code appeared in NLA editor, both fixed.
This commit is contained in:
Ton Roosendaal
2005-11-22 16:35:21 +00:00
parent 425fb98a05
commit 17c26f4ccb
2 changed files with 53 additions and 53 deletions

View File

@@ -1017,35 +1017,35 @@ void transform_actionchannel_keys(int mode, int dummy)
break;
}
}
}
if (mode=='s'){
sprintf(str, "sizeX: %.3f", fac);
headerprint(str);
}
else if (mode=='g'){
sprintf(str, "deltaX: %.3f", fac);
headerprint(str);
}
else if (mode=='t') {
float fac= 2.0*(cval[0]-sval[0])/(maxx-minx);
CLAMP(fac, -1.0f, 1.0f);
sprintf(str, "TimeSlide: %.3f", fac);
headerprint(str);
}
if (G.saction->lock) {
if(ob) {
ob->ctime= -1234567.0f;
if(ob->pose || ob_get_key(ob))
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
else
DAG_object_flush_update(G.scene, ob, OB_RECALC_OB);
if (mode=='s'){
sprintf(str, "sizeX: %.3f", fac);
headerprint(str);
}
else if (mode=='g'){
sprintf(str, "deltaX: %.3f", fac);
headerprint(str);
}
else if (mode=='t') {
float fac= 2.0*(cval[0]-sval[0])/(maxx-minx);
CLAMP(fac, -1.0f, 1.0f);
sprintf(str, "TimeSlide: %.3f", fac);
headerprint(str);
}
if (G.saction->lock) {
if(ob) {
ob->ctime= -1234567.0f;
if(ob->pose || ob_get_key(ob))
DAG_object_flush_update(G.scene, ob, OB_RECALC);
else
DAG_object_flush_update(G.scene, ob, OB_RECALC_OB);
}
force_draw_plus(SPACE_VIEW3D, 0);
}
else {
force_draw(0);
}
force_draw_plus(SPACE_VIEW3D, 0);
}
else {
force_draw(0);
}
}
@@ -1061,7 +1061,7 @@ void transform_actionchannel_keys(int mode, int dummy)
ob->ctime= -1234567.0f;
if(ob->pose || ob_get_key(ob))
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
DAG_object_flush_update(G.scene, ob, OB_RECALC);
else
DAG_object_flush_update(G.scene, ob, OB_RECALC_OB);
}

View File

@@ -1058,7 +1058,7 @@ void transform_nlachannel_keys(int mode, int dummy)
areamouseco_to_ipoco(G.v2d, mvalc, &cval[0], &cval[1]);
if (!firsttime && lastcval[0]==cval[0] && lastcval[1]==cval[1]) {
PIL_sleep_ms(1);
PIL_sleep_ms(10);
}
else {
for (i=0; i<tvtot; i++){
@@ -1112,33 +1112,33 @@ void transform_nlachannel_keys(int mode, int dummy)
break;
}
}
}
if (mode=='s'){
sprintf(str, "sizeX: %.3f", fac);
headerprint(str);
}
else if (mode=='g'){
sprintf(str, "deltaX: %.3f", fac);
headerprint(str);
}
if (G.snla->lock) {
for (base=G.scene->base.first; base; base=base->next){
if(base->flag & BA_HAS_RECALC_OB)
base->object->recalc |= OB_RECALC_OB;
if(base->flag & BA_HAS_RECALC_DATA)
base->object->recalc |= OB_RECALC_DATA;
if(base->object->recalc) base->object->ctime= -1234567.0f; // eveil!
if (mode=='s'){
sprintf(str, "sizeX: %.3f", fac);
headerprint(str);
}
else if (mode=='g'){
sprintf(str, "deltaX: %.3f", fac);
headerprint(str);
}
DAG_scene_flush_update(G.scene, screen_view3d_layers());
force_draw_all(0);
}
else {
force_draw(0);
if (G.snla->lock) {
for (base=G.scene->base.first; base; base=base->next){
if(base->flag & BA_HAS_RECALC_OB)
base->object->recalc |= OB_RECALC_OB;
if(base->flag & BA_HAS_RECALC_DATA)
base->object->recalc |= OB_RECALC_DATA;
if(base->object->recalc) base->object->ctime= -1234567.0f; // eveil!
}
DAG_scene_flush_update(G.scene, screen_view3d_layers());
force_draw_all(0);
}
else {
force_draw(0);
}
}
}