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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to