Baking all selected softbody: press ctrl+b in 3d window!

This commit is contained in:
2006-03-08 17:45:32 +00:00
parent b05269adc2
commit 0bc3e9639b
2 changed files with 57 additions and 9 deletions

View File

@@ -1185,24 +1185,45 @@ void do_constraintbuts(unsigned short event)
allqueue (REDRAWBUTSOBJECT, 0); allqueue (REDRAWBUTSOBJECT, 0);
} }
static void softbody_bake(Object *ob) void softbody_bake(Object *ob)
{ {
SoftBody *sb= ob->soft; Base *base;
SoftBody *sb;
ScrArea *sa; ScrArea *sa;
float frameleno= G.scene->r.framelen; float frameleno= G.scene->r.framelen;
int cfrao= CFRA; int cfrao= CFRA, sfra=100000, efra=0;
unsigned short event=0; unsigned short event=0;
short val; short val;
G.scene->r.framelen= 1.0; // baking has to be in uncorrected time G.scene->r.framelen= 1.0; // baking has to be in uncorrected time
CFRA= sb->sfra;
if(ob) {
sb= ob->soft;
sfra= MIN2(sfra, sb->sfra);
efra= MAX2(efra, sb->efra);
sbObjectToSoftbody(ob); // put softbody in restposition, free bake
ob->softflag |= OB_SB_BAKEDO;
}
else {
for(base=G.scene->base.first; base; base= base->next) {
if(TESTBASE(base)) {
if(base->object->soft) {
sb= base->object->soft;
sfra= MIN2(sfra, sb->sfra);
efra= MAX2(efra, sb->efra);
sbObjectToSoftbody(base->object); // put softbody in restposition, free bake
base->object->softflag |= OB_SB_BAKEDO;
}
}
}
}
CFRA= sfra;
update_for_newframe_muted(); // put everything on this frame update_for_newframe_muted(); // put everything on this frame
sbObjectToSoftbody(ob); // put softbody in restposition
ob->softflag |= OB_SB_BAKEDO;
curarea->win_swap= 0; // clean swapbuffers curarea->win_swap= 0; // clean swapbuffers
for(; CFRA <= sb->efra; CFRA++) { for(; CFRA <= efra; CFRA++) {
set_timecursor(CFRA); set_timecursor(CFRA);
update_for_newframe_muted(); update_for_newframe_muted();
@@ -1222,11 +1243,32 @@ static void softbody_bake(Object *ob)
if(event==ESCKEY) break; if(event==ESCKEY) break;
} }
if(event==ESCKEY) sbObjectToSoftbody(ob); // clears all if(event==ESCKEY) {
if(ob)
sbObjectToSoftbody(ob); // free bake
else {
for(base=G.scene->base.first; base; base= base->next) {
if(TESTBASE(base)) {
if(base->object->soft) {
sbObjectToSoftbody(base->object); // free bake
}
}
}
}
}
/* restore */ /* restore */
waitcursor(0); waitcursor(0);
ob->softflag &= ~OB_SB_BAKEDO;
if(ob)
ob->softflag &= ~OB_SB_BAKEDO;
else {
for(base=G.scene->base.first; base; base= base->next)
if(TESTBASE(base))
if(base->object->soft)
base->object->softflag &= ~OB_SB_BAKEDO;
}
CFRA= cfrao; CFRA= cfrao;
G.scene->r.framelen= frameleno; G.scene->r.framelen= frameleno;
update_for_newframe_muted(); update_for_newframe_muted();

View File

@@ -1213,6 +1213,12 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
view3d_edit_clipping(v3d); view3d_edit_clipping(v3d);
else if(G.qual==LR_SHIFTKEY) else if(G.qual==LR_SHIFTKEY)
set_render_border(); set_render_border();
else if(G.qual==LR_CTRLKEY) {
if(okee("Bake all selected")) {
extern void softbody_bake(Object *ob);
softbody_bake(NULL);
}
}
else if(G.qual==0) else if(G.qual==0)
borderselect(); borderselect();
break; break;