diff options
-rw-r--r-- | source/blender/blenkernel/intern/effect.c | 16 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_object_types.h | 4 | ||||
-rw-r--r-- | source/blender/src/buttons_object.c | 11 |
3 files changed, 24 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 46b6e330754..032a376c87f 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -1535,7 +1535,7 @@ int SoftBodyDetectCollision(float opco[3], float npco[3], float colco[3], short cur_frame; int d_object=0, d_face=0, ds_object=0, ds_face=0; -// i'm going to rearrange it to declatation rules when WIP is finoshed (BM) +// i'm going to rearrange it to declaration rules when WIP is finished (BM) float u,v,len_u,len_v; float innerfacethickness = -0.5f; float outerfacethickness = 0.2f; @@ -1543,10 +1543,6 @@ int SoftBodyDetectCollision(float opco[3], float npco[3], float colco[3], float ff = 0.1f; float fa; - fa = (ff*outerfacethickness-outerfacethickness); - fa *= fa; - fa = 1.0f/fa; - min_t = 200000; /* The first part of the code, finding the first intersected face*/ @@ -1564,7 +1560,13 @@ int SoftBodyDetectCollision(float opco[3], float npco[3], float colco[3], d_face = d_face + 1; mface= def_mesh->mface; a = def_mesh->totface; +/* need to have user control for that since it depends on model scale */ + innerfacethickness =-ob->pd->pdef_sbift; + outerfacethickness =ob->pd->pdef_sboft; + fa = (ff*outerfacethickness-outerfacethickness); + fa *= fa; + fa = 1.0f/fa; if(ob->parent==NULL && ob->ipo==NULL) { // static if(ob->sumohandle==NULL) cache_object_vertices(ob); @@ -1651,7 +1653,7 @@ int SoftBodyDetectCollision(float opco[3], float npco[3], float colco[3], force[0] += force_mag_norm*d_nvect[0] ; force[1] += force_mag_norm*d_nvect[1] ; force[2] += force_mag_norm*d_nvect[2] ; - *damp=ob->pd->pdef_damp; + *damp=ob->pd->pdef_sbdamp; deflected = 2; colco[0] = nv2[0] + len_u*u*edge1[0] + len_v*v*edge2[0]; @@ -1685,7 +1687,7 @@ int SoftBodyDetectCollision(float opco[3], float npco[3], float colco[3], force[0] += force_mag_norm*d_nvect[0] ; force[1] += force_mag_norm*d_nvect[1] ; force[2] += force_mag_norm*d_nvect[2] ; - *damp=ob->pd->pdef_damp; + *damp=ob->pd->pdef_sbdamp; deflected = 2; colco[0] = nv4[0] + len_u*u*edge1[0] + len_v*v*edge2[0]; colco[1] = nv4[1] + len_u*u*edge1[1] + len_v*v*edge2[1]; diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 35260805d05..2998e1f9d68 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -92,6 +92,10 @@ typedef struct PartDeflect { float f_strength; /* The strength of the force (+ or - ) */ float f_power; /* The power law - real gravitation is 2 (square) */ float maxdist; /* if indicated, use this maximum */ + + float pdef_sbdamp; /* Damping factor for softbody deflection */ + float pdef_sbift; /* inner face thickness for softbody deflection */ + float pdef_sboft; /* outer face thickness for softbody deflection */ } PartDeflect; /* pd->forcefield: Effector Fields types */ diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index 0fd762837b1..ceaeff9221b 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -1463,6 +1463,17 @@ static void object_panel_deflectors(Object *ob) uiDefButF(block, NUM, B_DIFF, "Permeability: ", 10,-10,200,20, &pd->pdef_perm, 0.0, 1.0, 10, 0, "Chance that the particle will pass through the mesh"); } uiBlockEndAlign(block); + + if(ob->type==OB_MESH) { + uiBlockBeginAlign(block); + uiDefBut(block, LABEL, 0, "Softbody", 210, 50,110,20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefButF(block, NUM, B_DIFF, "D", 210,30,110,20, &pd->pdef_sbdamp, 0.0, 1.0, 10, 0, "Amount of damping during softbody collision"); + uiDefButF(block, NUM, B_DIFF, "I", 210,10,110,20, &pd->pdef_sbift, 0.001, 1.0, 10, 0, "Inner face thickness"); + uiDefButF(block, NUM, B_DIFF, "O", 210,-10,110,20, &pd->pdef_sboft, 0.001, 1.0, 10, 0, "Outer face thickness"); + } + uiBlockEndAlign(block); + + } } |