diff options
author | Daniel Genrich <daniel.genrich@gmx.net> | 2008-07-07 18:36:33 +0400 |
---|---|---|
committer | Daniel Genrich <daniel.genrich@gmx.net> | 2008-07-07 18:36:33 +0400 |
commit | e409c2463d448fa79b86250b03ed7e07d09b067e (patch) | |
tree | 9c64080648af5de503e2ce9a313b6404d280f31a /source/blender | |
parent | d3745d70a507bef4dfeadec2d8bd8947e5f3d6c4 (diff) |
WIP commit to introduce channels
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/ipo.c | 4 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_ipo_types.h | 9 | ||||
-rw-r--r-- | source/blender/src/editipo.c | 33 | ||||
-rw-r--r-- | source/blender/src/editipo_lib.c | 2 | ||||
-rw-r--r-- | source/blender/src/fluidsim.c | 64 |
5 files changed, 95 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 59eb3837aab..f4a500da9a3 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -175,7 +175,9 @@ int fluidsim_ar[FLUIDSIM_TOTIPO]= { FLUIDSIM_VISC, FLUIDSIM_TIME, FLUIDSIM_GRAV_X , FLUIDSIM_GRAV_Y , FLUIDSIM_GRAV_Z , FLUIDSIM_VEL_X , FLUIDSIM_VEL_Y , FLUIDSIM_VEL_Z , - FLUIDSIM_ACTIVE + FLUIDSIM_ACTIVE, + FLUIDSIM_ATTR_FORCE_STR, FLUIDSIM_ATTR_FORCE_RADIUS, + FLUIDSIM_VEL_FORCE_STR, FLUIDSIM_VEL_FORCE_RADIUS, }; int part_ar[PART_TOTIPO]= { diff --git a/source/blender/makesdna/DNA_ipo_types.h b/source/blender/makesdna/DNA_ipo_types.h index 3954a500dc7..09f4509df80 100644 --- a/source/blender/makesdna/DNA_ipo_types.h +++ b/source/blender/makesdna/DNA_ipo_types.h @@ -336,8 +336,8 @@ typedef short IPO_Channel; /* ******************** */ /* fluidsim ipos NT */ -#define FLUIDSIM_TOTIPO 9 -#define FLUIDSIM_TOTNAM 9 +#define FLUIDSIM_TOTIPO 13 +#define FLUIDSIM_TOTNAM 13 #define FLUIDSIM_VISC 1 #define FLUIDSIM_TIME 2 @@ -352,6 +352,11 @@ typedef short IPO_Channel; #define FLUIDSIM_ACTIVE 9 +#define FLUIDSIM_ATTR_FORCE_STR 10 +#define FLUIDSIM_ATTR_FORCE_RADIUS 11 +#define FLUIDSIM_VEL_FORCE_STR 12 +#define FLUIDSIM_VEL_FORCE_RADIUS 13 + /* ******************** */ /* particle ipos */ #define PART_TOTIPO 19 diff --git a/source/blender/src/editipo.c b/source/blender/src/editipo.c index c5dd41e16d5..22bcad06424 100644 --- a/source/blender/src/editipo.c +++ b/source/blender/src/editipo.c @@ -489,19 +489,40 @@ static void make_part_editipo(SpaceIpo *si) } // copied from make_seq_editipo -static void make_fluidsim_editipo(SpaceIpo *si) // NT +static void make_fluidsim_editipo(SpaceIpo *si, Object *ob) // NT { EditIpo *ei; int a; char *name; - ei= si->editipo= MEM_callocN(FLUIDSIM_TOTIPO*sizeof(EditIpo), "fluidsim_editipo"); - si->totipo = FLUIDSIM_TOTIPO; - for(a=0; a<FLUIDSIM_TOTIPO; a++) { + FluidsimSettings *fss= ob->fluidsimSettings; + int numipos = FLUIDSIM_TOTIPO; + int ipo_start_index = 0; + + // we don't need all fluid ipos for all types! - dg + if(fss->type == OB_FLUIDSIM_CONTROL) + { + numipos = 4; // there are 4 fluid control ipos + ipo_start_index = 9; + + } + else if(fss->type == OB_FLUIDSIM_DOMAIN) + { + numipos = 5; // there are 5 ipos for fluid domains + } + else + { + numipos = 4; // there are 4 for the rest + ipo_start_index = 5; + } + + ei= si->editipo= MEM_callocN(numipos*sizeof(EditIpo), "fluidsim_editipo"); + si->totipo = numipos; + for(a=ipo_start_index; a<numipos; a++) { //fprintf(stderr,"FSINAME %d %d \n",a,fluidsim_ar[a], (int)(getname_fluidsim_ei(fluidsim_ar[a])) ); name = getname_fluidsim_ei(fluidsim_ar[a]); strcpy(ei->name, name); ei->adrcode= fluidsim_ar[a]; - ei->col= ipo_rainbow(a, FLUIDSIM_TOTIPO); + ei->col= ipo_rainbow(a, numipos); ei->icu= find_ipocurve(si->ipo, ei->adrcode); if(ei->icu) { ei->flag = ei->icu->flag; @@ -962,7 +983,7 @@ static void make_editipo(void) else if(G.sipo->blocktype==ID_FLUIDSIM) { if (ob) { // NT ob->ipowin= ID_FLUIDSIM; - make_fluidsim_editipo(G.sipo); + make_fluidsim_editipo(G.sipo, ob); } } else if(G.sipo->blocktype==ID_PA) { diff --git a/source/blender/src/editipo_lib.c b/source/blender/src/editipo_lib.c index 41044ad13d7..042a59c3446 100644 --- a/source/blender/src/editipo_lib.c +++ b/source/blender/src/editipo_lib.c @@ -100,7 +100,7 @@ char *snd_ic_names[SND_TOTNAM] = { "Vol", "Pitch", "Pan", "Atten" }; char *ac_ic_names[AC_TOTNAM] = {"LocX", "LocY", "LocZ", "ScaleX", "ScaleY", "ScaleZ", "QuatW", "QuatX", "QuatY", "QuatZ"}; char *ic_name_empty[1] ={ "" }; -char *fluidsim_ic_names[FLUIDSIM_TOTNAM] = { "Fac-Visc", "Fac-Time", "GravX","GravY","GravZ", "VelX","VelY","VelZ", "Active" }; +char *fluidsim_ic_names[FLUIDSIM_TOTNAM] = { "Fac-Visc", "Fac-Time", "GravX","GravY","GravZ", "VelX","VelY","VelZ", "Active", "AttrForceStr", "AttrForceRad", "VelForceStr", "VelForceRad" }; char *part_ic_names[PART_TOTNAM] = { "E_Freq", "E_Life", "E_Speed", "E_Angular", "E_Size", "Angular", "Size", "Drag", "Brown", "Damp", "Length", "Clump", "GravX", "GravY", "GravZ", "KinkAmp", "KinkFreq", "KinkShape", "BBTilt"}; diff --git a/source/blender/src/fluidsim.c b/source/blender/src/fluidsim.c index 7298c767e45..3bc1ac42a33 100644 --- a/source/blender/src/fluidsim.c +++ b/source/blender/src/fluidsim.c @@ -314,6 +314,10 @@ void fluidsimGetGeometryObjFilename(struct Object *ob, char *dst) { //, char *sr FS_FREE_ONECHANNEL(channelObjMove[i][2],"channelObjMove2"); \ FS_FREE_ONECHANNEL(channelObjInivel[i],"channelObjInivel"); \ FS_FREE_ONECHANNEL(channelObjActive[i],"channelObjActive"); \ + FS_FREE_ONECHANNEL(channelAttractforceStrength[i],"channelAttractforceStrength"); \ + FS_FREE_ONECHANNEL(channelAttractforceRadius[i],"channelAttractforceRadius"); \ + FS_FREE_ONECHANNEL(channelVelocityforceStrength[i],"channelVelocityforceStrength"); \ + FS_FREE_ONECHANNEL(channelVelocityforceRadius[i],"channelVelocityforceRadius"); \ } \ } // end FS FREE CHANNELS @@ -532,6 +536,12 @@ void fluidsimBake(struct Object *ob) float *channelObjInivel[256]; // initial velocities float *channelObjActive[256]; // obj active channel + /* fluid control channels */ + float *channelAttractforceStrength[256]; + float *channelAttractforceRadius[256]; + float *channelVelocityforceStrength[256]; + float *channelVelocityforceRadius[256]; + if(getenv(strEnvName)) { int dlevel = atoi(getenv(strEnvName)); elbeemSetDebugLevel(dlevel); @@ -716,6 +726,10 @@ void fluidsimBake(struct Object *ob) channelObjMove[i][0] = channelObjMove[i][1] = channelObjMove[i][2] = NULL; channelObjInivel[i] = NULL; channelObjActive[i] = NULL; + channelAttractforceStrength[i] = NULL; + channelAttractforceRadius[i] = NULL; + channelVelocityforceStrength[i] = NULL; + channelVelocityforceRadius[i] = NULL; } allchannelSize = G.scene->r.efra; // always use till last frame aniFrameTime = (domainSettings->animEnd - domainSettings->animStart)/(double)noFrames; @@ -880,9 +894,32 @@ void fluidsimBake(struct Object *ob) channelObjMove[o][j][(i-1)*4 + 3] = timeAtFrame[i]; } } - + + { + int attrFSIcu[1] = { FLUIDSIM_ATTR_FORCE_STR }; + int attrFRIcu[1] = { FLUIDSIM_ATTR_FORCE_RADIUS }; + int velFSIcu[1] = { FLUIDSIM_VEL_FORCE_STR }; + int velFRIcu[1] = { FLUIDSIM_VEL_FORCE_RADIUS }; + + float attrFSDefs[1]; + float attrFRDefs[1]; + float velFSDefs[1]; + float velFRDefs[1]; + + attrFSDefs[0] = obit->fluidsimSettings->attractforceStrength; + attrFRDefs[0] = obit->fluidsimSettings->attractforceRadius; + velFSDefs[0] = obit->fluidsimSettings->velocityforceStrength; + velFRDefs[0] = obit->fluidsimSettings->velocityforceRadius; + + fluidsimInitChannel( &channelAttractforceStrength[o], allchannelSize, timeAtFrame, attrFSIcu,attrFSDefs, obit->fluidsimSettings->ipo, CHANNEL_FLOAT ); + fluidsimInitChannel( &channelAttractforceRadius[o], allchannelSize, timeAtFrame, attrFRIcu,attrFRDefs, obit->fluidsimSettings->ipo, CHANNEL_FLOAT ); + fluidsimInitChannel( &channelVelocityforceStrength[o], allchannelSize, timeAtFrame, velFSIcu,velFSDefs, obit->fluidsimSettings->ipo, CHANNEL_FLOAT ); + fluidsimInitChannel( &channelVelocityforceRadius[o], allchannelSize, timeAtFrame, velFRIcu,velFRDefs, obit->fluidsimSettings->ipo, CHANNEL_FLOAT ); + } + fluidsimInitChannel( &channelObjInivel[o], allchannelSize, timeAtFrame, inivelIcu,inivelDefs, obit->fluidsimSettings->ipo, CHANNEL_VEC ); fluidsimInitChannel( &channelObjActive[o], allchannelSize, timeAtFrame, activeIcu,activeDefs, obit->fluidsimSettings->ipo, CHANNEL_FLOAT ); + channelObjCount++; @@ -1028,7 +1065,7 @@ void fluidsimBake(struct Object *ob) fsmesh.obstaclePartslip = obit->fluidsimSettings->partSlipValue; fsmesh.volumeInitType = obit->fluidsimSettings->volumeInitType; fsmesh.obstacleImpactFactor = obit->fluidsimSettings->surfaceSmoothing; // misused value - /* + if(fsmesh.type == OB_FLUIDSIM_CONTROL) { // control fluids will get exported as whole @@ -1037,11 +1074,24 @@ void fluidsimBake(struct Object *ob) fsmesh.cpsTimeStart = obit->fluidsimSettings->cpsTimeStart; fsmesh.cpsTimeEnd = obit->fluidsimSettings->cpsTimeEnd; - fsmesh.attractforceStrength = obit->fluidsimSettings->attractforceStrength; - fsmesh.attractforceRadius = obit->fluidsimSettings->attractforceRadius; - fsmesh.velocityforceStrength = obit->fluidsimSettings->velocityforceStrength; - fsmesh.velocityforceRadius = obit->fluidsimSettings->velocityforceRadius; - }*/ + fsmesh.channelSizeAttractforceRadius = + fsmesh.channelSizeVelocityforceStrength = + fsmesh.channelSizeVelocityforceRadius = + fsmesh.channelSizeAttractforceStrength = allchannelSize; + + fsmesh.channelAttractforceRadius = channelAttractforceStrength[o]; + fsmesh.channelAttractforceRadius = channelAttractforceRadius[o]; + fsmesh.channelVelocityforceStrength = channelVelocityforceStrength[o]; + fsmesh.channelVelocityforceRadius = channelVelocityforceRadius[o]; + } + else + { + // set channels to 0 + fsmesh.channelAttractforceStrength = + fsmesh.channelAttractforceRadius = + fsmesh.channelVelocityforceStrength = + fsmesh.channelVelocityforceRadius = NULL; + } // animated meshes if(deform) { |