[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15765] branches/fluidcontrol: Fluid control: WIP commit before weekend, not working is crashing on the first 3 frames
Daniel Genrich
daniel.genrich at gmx.net
Fri Jul 25 20:57:18 CEST 2008
Revision: 15765
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15765
Author: genscher
Date: 2008-07-25 20:57:16 +0200 (Fri, 25 Jul 2008)
Log Message:
-----------
Fluid control: WIP commit before weekend, not working is crashing on the first 3 frames
Modified Paths:
--------------
branches/fluidcontrol/config/linux2-config.py
branches/fluidcontrol/intern/elbeem/extern/elbeem.h
branches/fluidcontrol/intern/elbeem/intern/controlparticles.cpp
branches/fluidcontrol/intern/elbeem/intern/elbeem.cpp
branches/fluidcontrol/intern/elbeem/intern/ntl_ray.cpp
branches/fluidcontrol/intern/elbeem/intern/ntl_world.cpp
branches/fluidcontrol/intern/elbeem/intern/solver_control.cpp
branches/fluidcontrol/source/blender/blenkernel/BKE_blender.h
branches/fluidcontrol/source/blender/blenkernel/BKE_pointcache.h
branches/fluidcontrol/source/blender/blenkernel/intern/DerivedMesh.c
branches/fluidcontrol/source/blender/blenkernel/intern/cdderivedmesh.c
branches/fluidcontrol/source/blender/blenkernel/intern/depsgraph.c
branches/fluidcontrol/source/blender/blenkernel/intern/modifier.c
branches/fluidcontrol/source/blender/blenkernel/intern/object.c
branches/fluidcontrol/source/blender/blenkernel/intern/particle_system.c
branches/fluidcontrol/source/blender/blenkernel/intern/pointcache.c
branches/fluidcontrol/source/blender/blenloader/intern/readfile.c
branches/fluidcontrol/source/blender/blenloader/intern/writefile.c
branches/fluidcontrol/source/blender/makesdna/DNA_modifier_types.h
branches/fluidcontrol/source/blender/makesdna/DNA_object_fluidsim.h
branches/fluidcontrol/source/blender/render/intern/source/convertblender.c
branches/fluidcontrol/source/blender/src/buttons_editing.c
branches/fluidcontrol/source/blender/src/buttons_object.c
branches/fluidcontrol/source/blender/src/editipo.c
branches/fluidcontrol/source/blender/src/editmesh.c
branches/fluidcontrol/source/blender/src/fluidsim.c
branches/fluidcontrol/source/blender/src/header_ipo.c
Modified: branches/fluidcontrol/config/linux2-config.py
===================================================================
--- branches/fluidcontrol/config/linux2-config.py 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/config/linux2-config.py 2008-07-25 18:57:16 UTC (rev 15765)
@@ -166,8 +166,8 @@
CPPFLAGS = ['-DXP_UNIX']
CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing']
-REL_CFLAGS = ['-O2']
-REL_CCFLAGS = ['-O2']
+REL_CFLAGS = ['-O3']
+REL_CCFLAGS = ['-O3']
##BF_DEPEND = 'true'
##
##AR = ar
Modified: branches/fluidcontrol/intern/elbeem/extern/elbeem.h
===================================================================
--- branches/fluidcontrol/intern/elbeem/extern/elbeem.h 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/intern/elbeem/extern/elbeem.h 2008-07-25 18:57:16 UTC (rev 15765)
@@ -32,7 +32,7 @@
short version;
/* id number of simulation domain, needed if more than a
* single domain should be simulated */
- short domainId;
+ short domainId; // unused within blender
/* geometrical extent */
float geoStart[3], geoSize[3];
@@ -187,6 +187,9 @@
// start fluidsim init (returns !=0 upon failure)
int elbeemInit(void);
+// frees fluidsim
+int elbeemFree(void);
+
// start fluidsim init (returns !=0 upon failure)
int elbeemAddDomain(struct elbeemSimulationSettings*);
Modified: branches/fluidcontrol/intern/elbeem/intern/controlparticles.cpp
===================================================================
--- branches/fluidcontrol/intern/elbeem/intern/controlparticles.cpp 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/intern/elbeem/intern/controlparticles.cpp 2008-07-25 18:57:16 UTC (rev 15765)
@@ -57,6 +57,7 @@
initTime(0. , 1.);
}
+// blender control object gets converted to mvm flui control object
int ControlParticles::initFromObject(ntlGeometryObjModel *model) {
vector<ntlTriangle> triangles;
vector<ntlVec3Gfx> vertices;
@@ -73,6 +74,7 @@
printf("a animated? %d\n", model->getIsAnimated());
printf("b animated? %d\n", model->getMeshAnimated());
*/
+
model->setGeoInitType(FGI_FLUID);
model->getTriangles(mCPSTimeStart, &triangles, &vertices, &normals, 1 );
@@ -137,7 +139,7 @@
// init first set, check dist
ControlParticleSet firstcps; //T
mPartSets.push_back(firstcps);
- mPartSets[mPartSets.size()-1].time = (gfxReal)0.;
+ mPartSets[mPartSets.size()-1].time = mCPSTimeStart;
vector<bool> useCP;
for(int i=0; i<(int)inspos.size(); i++) {
@@ -1378,8 +1380,10 @@
#if (CP_PROJECT2D==1) && (defined(MAIN_2D) || LBMDIM==2)
// fillFactor *= 2.0 *0.75 * pdistance; // 2d>3d sampling
#endif // (CP_PROJECT2D==1) && (defined(MAIN_2D) || LBMDIM==2)
+
+ LbmFloat signum = getInfluenceAttraction() > 0.0 ? 1.0 : -1.0;
cp->density += falloffAtt * fillFactor;
- force->forceAtt += posDelta *cp->densityWeight *cp->influence;
+ force->forceAtt += posDelta *cp->densityWeight *cp->influence *signum;
force->weightAtt += falloffAtt*cp->densityWeight *cp->influence;
LbmFloat falloffVel = 0.; //CPKernel::kernel(cpfo * 1.0, pdistance);
Modified: branches/fluidcontrol/intern/elbeem/intern/elbeem.cpp
===================================================================
--- branches/fluidcontrol/intern/elbeem/intern/elbeem.cpp 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/intern/elbeem/intern/elbeem.cpp 2008-07-25 18:57:16 UTC (rev 15765)
@@ -96,6 +96,13 @@
return 0;
}
+// fluidsim end
+extern "C"
+int elbeemFree() {
+
+ return 0;
+}
+
// start fluidsim init
extern "C"
int elbeemAddDomain(elbeemSimulationSettings *settings) {
@@ -253,6 +260,7 @@
if(getElbeemState() != SIMWORLD_STOP) {
// ok, we're done...
delete gpWorld;
+
gpWorld = NULL;
debMsgStd("elbeemSimulate",DM_NOTIFY, "El'Beem simulation done, time: "<<getTimeString(timeend-timestart)<<".\n", 2 );
} else {
Modified: branches/fluidcontrol/intern/elbeem/intern/ntl_ray.cpp
===================================================================
--- branches/fluidcontrol/intern/elbeem/intern/ntl_ray.cpp 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/intern/elbeem/intern/ntl_ray.cpp 2008-07-25 18:57:16 UTC (rev 15765)
@@ -688,7 +688,8 @@
if(mpTree != NULL) delete mpTree;
// cleanup lists, only if this is the rendering cleanup scene
- if(mSceneDel) {
+ if(mSceneDel)
+ {
for (vector<ntlGeometryClass*>::iterator iter = mGeos.begin();
iter != mGeos.end(); iter++) {
//errMsg("ntlScene::~ntlScene","Deleting obj "<<(*iter)->getName() );
Modified: branches/fluidcontrol/intern/elbeem/intern/ntl_world.cpp
===================================================================
--- branches/fluidcontrol/intern/elbeem/intern/ntl_world.cpp 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/intern/elbeem/intern/ntl_world.cpp 2008-07-25 18:57:16 UTC (rev 15765)
@@ -236,10 +236,15 @@
{
delete mpGlob->getRenderScene();
delete mpGlob->getSimScene();
- delete mpGlob;
- delete mpLightList;
- delete mpPropList;
- delete mpSims;
+
+ delete mpGlob;
+
+
+ // these get assigned to mpGlob but not freed there
+ delete mpLightList;
+ delete mpPropList; // materials
+ delete mpSims;
+
#ifndef NOGUI
if(mpOpenGLRenderer) delete mpOpenGLRenderer;
#endif // NOGUI
@@ -895,6 +900,8 @@
ntlRenderGlobals::~ntlRenderGlobals() {
if(mpOpenGlAttr) delete mpOpenGlAttr;
if(mpBlenderAttr) delete mpBlenderAttr;
+
+
}
Modified: branches/fluidcontrol/intern/elbeem/intern/solver_control.cpp
===================================================================
--- branches/fluidcontrol/intern/elbeem/intern/solver_control.cpp 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/intern/elbeem/intern/solver_control.cpp 2008-07-25 18:57:16 UTC (rev 15765)
@@ -236,7 +236,6 @@
// dont load any file
cset->mContrPartFile = string("");
- // TODO dg: switch to channels later
cset->mcForceAtt = obj->getCpsAttrFStr();
cset->mcRadiusAtt = obj->getCpsAttrFRad();
cset->mcForceVel = obj->getCpsVelFStr();
@@ -491,8 +490,8 @@
// init for current time
for(int cpssi=0; cpssi<(int)mpControl->mCons.size(); cpssi++) {
ControlParticles *cparts = mpControl->mCons[cpssi]->mCparts;
-
LbmControlSet *cset = mpControl->mCons[cpssi];
+
cparts->setRadiusAtt(cset->mcRadiusAtt.get(mSimulationTime));
cparts->setRadiusVel(cset->mcRadiusVel.get(mSimulationTime));
cparts->setInfluenceAttraction(cset->mcForceAtt.get(mSimulationTime) );
@@ -506,18 +505,22 @@
cparts->setInfluenceVelocity( cset->mcForceVel.get(mSimulationTime), mLevel[fineLev].timestep );
cparts->setLastOffset( vec2L(cset->mcCpOffset.get(mSimulationTime-mLevel[fineLev].timestep)) );
cparts->setLastScale( vec2L(cset->mcCpScale.get(mSimulationTime-mLevel[fineLev].timestep)) );
+
}
// check actual values
- LbmFloat iatt = mpControl->mCons[0]->mCparts->getInfluenceAttraction();
+ LbmFloat iatt = ABS(mpControl->mCons[0]->mCparts->getInfluenceAttraction());
LbmFloat ivel = mpControl->mCons[0]->mCparts->getInfluenceVelocity();
LbmFloat imaxd = mpControl->mCons[0]->mCparts->getInfluenceMaxdist();
//errMsg("FINCIT","iatt="<<iatt<<" ivel="<<ivel<<" imaxd="<<imaxd);
for(int cpssi=1; cpssi<(int)mpControl->mCons.size(); cpssi++) {
- LbmFloat iatt2 = mpControl->mCons[cpssi]->mCparts->getInfluenceAttraction();
+ LbmFloat iatt2 = ABS(mpControl->mCons[cpssi]->mCparts->getInfluenceAttraction());
LbmFloat ivel2 = mpControl->mCons[cpssi]->mCparts->getInfluenceVelocity();
LbmFloat imaxd2 = mpControl->mCons[cpssi]->mCparts->getInfluenceMaxdist();
- if(iatt2 >iatt) iatt = iatt2;
+
+ // we allow negative attraction force here!
+ if(iatt2 > iatt) iatt = iatt2;
+
if(ivel2 >ivel) ivel = ivel2;
if(imaxd2>imaxd) imaxd= imaxd2;
//errMsg("FINCIT"," "<<cpssi<<" iatt2="<<iatt2<<" ivel2="<<ivel2<<" imaxd2="<<imaxd<<" NEW "<<" iatt="<<iatt<<" ivel="<<ivel<<" imaxd="<<imaxd);
@@ -581,6 +584,12 @@
for(int cpssi=0; cpssi<(int)mpControl->mCons.size(); cpssi++) {
ControlParticles *cparts = mpControl->mCons[cpssi]->mCparts;
// ControlParticles *cpmotion = mpControl->mCons[cpssi]->mCpmotion;
+
+ // if control set is not active skip it
+ if((cparts->getControlTimStart() > mSimulationTime) || (cparts->getControlTimEnd() < mLastSimTime))
+ {
+ continue;
+ }
const LbmFloat velLatticeScale = mLevel[lev].timestep/mLevel[lev].nodeSize;
LbmFloat gsx = ((mvGeoEnd[0]-mvGeoStart[0])/(LbmFloat)mLevel[lev].lSizex);
Modified: branches/fluidcontrol/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/fluidcontrol/source/blender/blenkernel/BKE_blender.h 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/source/blender/blenkernel/BKE_blender.h 2008-07-25 18:57:16 UTC (rev 15765)
@@ -41,7 +41,7 @@
struct MemFile;
#define BLENDER_VERSION 246
-#define BLENDER_SUBVERSION 0
+#define BLENDER_SUBVERSION 1
#define BLENDER_MINVERSION 245
#define BLENDER_MINSUBVERSION 15
Modified: branches/fluidcontrol/source/blender/blenkernel/BKE_pointcache.h
===================================================================
--- branches/fluidcontrol/source/blender/blenkernel/BKE_pointcache.h 2008-07-25 18:48:24 UTC (rev 15764)
+++ branches/fluidcontrol/source/blender/blenkernel/BKE_pointcache.h 2008-07-25 18:57:16 UTC (rev 15765)
@@ -54,7 +54,8 @@
/* PTCacheID types */
#define PTCACHE_TYPE_SOFTBODY 0
#define PTCACHE_TYPE_PARTICLES 1
-#define PTCACHE_TYPE_CLOTH 2
+#define PTCACHE_TYPE_CLOTH 2
+#define PTCACHE_TYPE_FLUIDSIM 3
/* Structs */
struct Object;
@@ -83,6 +84,7 @@
void BKE_ptcache_id_from_softbody(PTCacheID *pid, struct Object *ob, struct SoftBody *sb);
void BKE_ptcache_id_from_particles(PTCacheID *pid, struct Object *ob, struct ParticleSystem *psys);
void BKE_ptcache_id_from_cloth(PTCacheID *pid, struct Object *ob, struct ClothModifierData *clmd);
+void BKE_ptcache_id_from_fluidsim(PTCacheID *pid, struct Object *ob, struct FluidsimModifierData *fluidmd);
void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob);
Modified: branches/fluidcontrol/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/fluidcontrol/source/blender/blenkernel/intern/DerivedMesh.c 2008-07-25 18:48:24 UTC (rev 15764)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list