forked from bartvdbraak/blender
= Fix for softbody collision mode selector =
This commit makes all softbody collision modes work as they should. Thanks to Genscher for noticing the issue. bjornmose, please check this commit.
This commit is contained in:
parent
6dbe745396
commit
fd3764f9a4
@ -782,21 +782,21 @@ static void calculate_collision_balls(Object *ob)
|
||||
}
|
||||
|
||||
if (akku_count > 0) {
|
||||
if (sb->sbc_mode == 0){
|
||||
if (sb->sbc_mode == SBC_MODE_MANUAL){
|
||||
bp->colball=sb->colball;
|
||||
}
|
||||
if (sb->sbc_mode == 1){
|
||||
bp->colball = akku/(float)akku_count*sb->colball;
|
||||
}
|
||||
if (sb->colball == 2){
|
||||
if (sb->sbc_mode == SBC_MODE_AVG){
|
||||
bp->colball = akku/(float)akku_count*sb->colball;
|
||||
}
|
||||
if (sb->sbc_mode == SBC_MODE_MIN){
|
||||
bp->colball=min*sb->colball;
|
||||
}
|
||||
if (sb->colball == 3){
|
||||
}
|
||||
if (sb->sbc_mode == SBC_MODE_MAX){
|
||||
bp->colball=max*sb->colball;
|
||||
}
|
||||
if (sb->colball == 4){
|
||||
bp->colball = (min + max)/2.0f*sb->colball;
|
||||
}
|
||||
}
|
||||
if (sb->sbc_mode == SBC_MODE_AVGMINMAX){
|
||||
bp->colball = (min + max)/2.0f*sb->colball;
|
||||
}
|
||||
}
|
||||
else bp->colball=0;
|
||||
}/*for bp*/
|
||||
|
@ -143,9 +143,17 @@ typedef struct SoftBody {
|
||||
#define OB_SB_EDGECOLL 2048
|
||||
#define OB_SB_COLLFINAL 4096
|
||||
|
||||
/* sb->solverflags */
|
||||
#define SBSO_MONITOR 1
|
||||
#define SBSO_OLDERR 2
|
||||
|
||||
/* sb->sbc_mode */
|
||||
#define SBC_MODE_MANUAL 0
|
||||
#define SBC_MODE_AVG 1
|
||||
#define SBC_MODE_MIN 2
|
||||
#define SBC_MODE_MAX 3
|
||||
#define SBC_MODE_AVGMINMAX 4
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -2900,11 +2900,11 @@ static void object_softbodies_II(Object *ob)
|
||||
uiDefButBitS(block, TOG, OB_SB_SELF, B_SOFTBODY_CHANGE, "Self Collision", 10,170,150,20, &ob->softflag, 0, 0, 0, 0, "enable naive vertex ball self collision");
|
||||
if(ob->softflag & OB_SB_SELF){
|
||||
uiDefButF(block, NUM, B_SOFTBODY_CHANGE, "Ball Size:", 160,170,150,20, &sb->colball, -10.0, 10.0, 10, 0, "Absolute ball size or factor if not manual adjusted");
|
||||
uiDefButS(block, ROW, B_DIFF, "Man",10,150,60,20, &sb->sbc_mode, 4.0,(float)0, 0, 0, "Manual adjust");
|
||||
uiDefButS(block, ROW, B_DIFF, "Av",70,150,60,20, &sb->sbc_mode, 4.0,(float)1, 0, 0, "Average Spring lenght * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "Min",130,150,60,20, &sb->sbc_mode, 4.0,(float)2, 0, 0, "Minimal Spring lenght * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "Max",190,150,60,20, &sb->sbc_mode, 4.0,(float)3, 0, 0, "Maximal Spring lenght * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "AvMiMa",250,150,60,20, &sb->sbc_mode, 4.0,(float)4, 0, 0, "(Min+Max)/2 * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "Man",10,150,60,20, &sb->sbc_mode, 4.0,SBC_MODE_MANUAL, 0, 0, "Manual adjust");
|
||||
uiDefButS(block, ROW, B_DIFF, "Av",70,150,60,20, &sb->sbc_mode, 4.0,SBC_MODE_AVG, 0, 0, "Average Spring lenght * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "Min",130,150,60,20, &sb->sbc_mode, 4.0,SBC_MODE_MIN, 0, 0, "Minimal Spring lenght * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "Max",190,150,60,20, &sb->sbc_mode, 4.0,SBC_MODE_MAX, 0, 0, "Maximal Spring lenght * Ball Size");
|
||||
uiDefButS(block, ROW, B_DIFF, "AvMiMa",250,150,60,20, &sb->sbc_mode, 4.0,SBC_MODE_AVGMINMAX, 0, 0, "(Min+Max)/2 * Ball Size");
|
||||
uiDefButF(block, NUM, B_DIFF, "B Stiff:", 10,130,150,20, &sb->ballstiff, 0.001, 100.0, 10, 0, "Ball inflating presure");
|
||||
uiDefButF(block, NUM, B_DIFF, "B Damp:", 160,130,150,20, &sb->balldamp, 0.001, 1.0, 10, 0, "Blending to inelastic collision");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user