[Bf-blender-cvs] [99ee1de094a] master: Fluid: Refactored 'Modifier Data to Python' value transfer function

Sebastián Barschkis noreply at git.blender.org
Sun May 3 21:11:02 CEST 2020


Commit: 99ee1de094a1744391a1bcddec56e53e3d180c4e
Author: Sebastián Barschkis
Date:   Sun May 3 18:33:34 2020 +0200
Branches: master
https://developer.blender.org/rB99ee1de094a1744391a1bcddec56e53e3d180c4e

Fluid: Refactored 'Modifier Data to Python' value transfer function

This function needed a bigger cleanup, especially after the problem from T76276.

===================================================================

M	intern/mantaflow/intern/MANTA_main.cpp
M	intern/mantaflow/intern/MANTA_main.h

===================================================================

diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index c1ac3d3a22d..1e32548bee2 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -184,17 +184,20 @@ MANTA::MANTA(int *res, FluidModifierData *mmd) : mCurrentID(++solverID)
   // Setup Mantaflow in Python
   initializeMantaflow();
 
+  // Initializa RNA map with values that Python will need
+  initializeRNAMap(mmd);
+
   // Initialize Mantaflow variables in Python
   // Liquid
   if (mUsingLiquid) {
-    initDomain(mmd);
-    initLiquid(mmd);
+    initDomain();
+    initLiquid();
     if (mUsingObstacle)
-      initObstacle(mmd);
+      initObstacle();
     if (mUsingInvel)
-      initInVelocity(mmd);
+      initInVelocity();
     if (mUsingOutflow)
-      initOutflow(mmd);
+      initOutflow();
 
     if (mUsingDrops || mUsingBubbles || mUsingFloats || mUsingTracers) {
       mUpresParticle = mmd->domain->particle_scale;
@@ -203,8 +206,8 @@ MANTA::MANTA(int *res, FluidModifierData *mmd) : mCurrentID(++solverID)
       mResZParticle = mUpresParticle * mResZ;
       mTotalCellsParticles = mResXParticle * mResYParticle * mResZParticle;
 
-      initSndParts(mmd);
-      initLiquidSndParts(mmd);
+      initSndParts();
+      initLiquidSndParts();
     }
 
     if (mUsingMesh) {
@@ -215,39 +218,39 @@ MANTA::MANTA(int *res, FluidModifierData *mmd) : mCurrentID(++solverID)
       mTotalCellsMesh = mResXMesh * mResYMesh * mResZMesh;
 
       // Initialize Mantaflow variables in Python
-      initMesh(mmd);
-      initLiquidMesh(mmd);
+      initMesh();
+      initLiquidMesh();
     }
 
     if (mUsingGuiding) {
       mResGuiding = (mmd->domain->guide_parent) ? mmd->domain->guide_res : mmd->domain->res;
-      initGuiding(mmd);
+      initGuiding();
     }
     if (mUsingFractions) {
-      initFractions(mmd);
+      initFractions();
     }
   }
 
   // Smoke
   if (mUsingSmoke) {
-    initDomain(mmd);
-    initSmoke(mmd);
+    initDomain();
+    initSmoke();
     if (mUsingHeat)
-      initHeat(mmd);
+      initHeat();
     if (mUsingFire)
-      initFire(mmd);
+      initFire();
     if (mUsingColors)
-      initColors(mmd);
+      initColors();
     if (mUsingObstacle)
-      initObstacle(mmd);
+      initObstacle();
     if (mUsingInvel)
-      initInVelocity(mmd);
+      initInVelocity();
     if (mUsingOutflow)
-      initOutflow(mmd);
+      initOutflow();
 
     if (mUsingGuiding) {
       mResGuiding = (mmd->domain->guide_parent) ? mmd->domain->guide_res : mmd->domain->res;
-      initGuiding(mmd);
+      initGuiding();
     }
 
     if (mUsingNoise) {
@@ -258,12 +261,12 @@ MANTA::MANTA(int *res, FluidModifierData *mmd) : mCurrentID(++solverID)
       mTotalCellsHigh = mResXNoise * mResYNoise * mResZNoise;
 
       // Initialize Mantaflow variables in Python
-      initNoise(mmd);
-      initSmokeNoise(mmd);
+      initNoise();
+      initSmokeNoise();
       if (mUsingFire)
-        initFireHigh(mmd);
+        initFireHigh();
       if (mUsingColors)
-        initColorsHigh(mmd);
+        initColorsHigh();
     }
   }
   updatePointers();
@@ -529,6 +532,9 @@ MANTA::~MANTA()
   tmpString += manta_import;
   tmpString += fluid_delete_all;
 
+  // Initializa RNA map with values that Python will need
+  initializeRNAMap();
+
   // Leave out mmd argument in parseScript since only looking up IDs
   std::string finalString = parseScript(tmpString);
   pythonCommands.push_back(finalString);
@@ -613,401 +619,232 @@ static std::string getCacheFileEnding(char cache_format)
   }
 }
 
-std::string MANTA::getRealValue(const std::string &varName, FluidModifierData *mmd)
+void MANTA::initializeRNAMap(FluidModifierData *mmd)
 {
-  std::ostringstream ss;
-  bool is2D = false;
-  int tmpVar;
-  float tmpFloat;
+  if (with_debug)
+    std::cout << "MANTA::initializeRNAMap()" << std::endl;
 
-  if (varName == "ID") {
-    ss << mCurrentID;
-    return ss.str();
-  }
+  mRNAMap["ID"] = std::to_string(mCurrentID);
 
   if (!mmd) {
-    std::cerr << "Fluid Error -- Invalid modifier data." << std::endl;
-    ss << "ERROR - INVALID MODIFIER DATA";
-    return ss.str();
-  }
-
-  is2D = (mmd->domain->solver_res == 2);
-
-  if (varName == "USING_SMOKE")
-    ss << ((mmd->domain->type == FLUID_DOMAIN_TYPE_GAS) ? "True" : "False");
-  if (varName == "USING_LIQUID")
-    ss << ((mmd->domain->type == FLUID_DOMAIN_TYPE_LIQUID) ? "True" : "False");
-  if (varName == "USING_COLORS")
-    ss << (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_COLORS ? "True" : "False");
-  if (varName == "USING_HEAT")
-    ss << (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_HEAT ? "True" : "False");
-  if (varName == "USING_FIRE")
-    ss << (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_FIRE ? "True" : "False");
-  if (varName == "USING_NOISE")
-    ss << (mmd->domain->flags & FLUID_DOMAIN_USE_NOISE ? "True" : "False");
-  if (varName == "USING_OBSTACLE")
-    ss << (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OBSTACLE ? "True" : "False");
-  if (varName == "USING_GUIDING")
-    ss << (mmd->domain->flags & FLUID_DOMAIN_USE_GUIDE ? "True" : "False");
-  if (varName == "USING_INVEL")
-    ss << (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_INVEL ? "True" : "False");
-  if (varName == "USING_OUTFLOW")
-    ss << (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW ? "True" : "False");
-  if (varName == "USING_LOG_DISSOLVE")
-    ss << (mmd->domain->flags & FLUID_DOMAIN_USE_DISSOLVE_LOG ? "True" : "False");
-  if (varName == "USING_DISSOLVE")
-    ss << (mmd->domain->flags & FLUID_DOMAIN_USE_DISSOLVE ? "True" : "False");
-  if (varName == "SOLVER_DIM")
-    ss << mmd->domain->solver_res;
-  if (varName == "DO_OPEN") {
-    tmpVar = (FLUID_DOMAIN_BORDER_BACK | FLUID_DOMAIN_BORDER_FRONT | FLUID_DOMAIN_BORDER_LEFT |
-              FLUID_DOMAIN_BORDER_RIGHT | FLUID_DOMAIN_BORDER_BOTTOM | FLUID_DOMAIN_BORDER_TOP);
-    ss << (((mmd->domain->border_collisions & tmpVar) == tmpVar) ? "False" : "True");
-  }
-  if (varName == "BOUND_CONDITIONS") {
-    if (mmd->domain->solver_res == 2) {
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_LEFT) == 0)
-        ss << "x";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_RIGHT) == 0)
-        ss << "X";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_FRONT) == 0)
-        ss << "y";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_BACK) == 0)
-        ss << "Y";
-    }
-    if (mmd->domain->solver_res == 3) {
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_LEFT) == 0)
-        ss << "x";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_RIGHT) == 0)
-        ss << "X";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_FRONT) == 0)
-        ss << "y";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_BACK) == 0)
-        ss << "Y";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_BOTTOM) == 0)
-        ss << "z";
-      if ((mmd->domain->border_collisions & FLUID_DOMAIN_BORDER_TOP) == 0)
-        ss << "Z";
-    }
-  }
-  if (varName == "BOUNDARY_WIDTH")
-    ss << mmd->domain->boundary_width;
-  if (varName == "RES")
-    ss << mMaxRes;
-  if (varName == "RESX")
-    ss << mResX;
-  if (varName == "RESY")
-    if (is2D) {
-      ss << mResZ;
-    }
-    else {
-      ss << mResY;
-    }
-  else if (varName == "RESZ") {
-    if (is2D) {
-      ss << 1;
-    }
-    else {
-      ss << mResZ;
-    }
-  }
-  if (varName == "TIME_SCALE")
-    ss << mmd->domain->time_scale;
-  if (varName == "FRAME_LENGTH")
-    ss << mmd->domain->frame_length;
-  if (varName == "CFL")
-    ss << mmd->domain->cfl_condition;
-  if (varName == "DT")
-    ss << mmd->domain->dt;
-  if (varName == "TIMESTEPS_MIN")
-    ss << mmd->domain->timesteps_minimum;
-  if (varName == "TIMESTEPS_MAX")
-    ss << mmd->domain->timesteps_maximum;
-  if (varName == "TIME_TOTAL")
-    ss << mmd->domain->time_total;
-  if (varName == "TIME_PER_FRAME")
-    ss << mmd->domain->time_per_frame;
-  if (varName == "VORTICITY")
-    ss << mmd->domain->vorticity / mConstantScaling;
-  if (varName == "FLAME_VORTICITY")
-    ss << mmd->domain->flame_vorticity / mConstantScaling;
-  if (varName == "NOISE_SCALE")
-    ss << mmd->domain->noise_scale;
-  if (varName == "MESH_SCALE")
-    ss << mmd->domain->mesh_scale;
-  if (varName == "PARTICLE_SCALE")
-    ss << mmd->domain->particle_scale;
-  if (varName == "NOISE_RESX")
-    ss << mResXNoise;
-  if (varName == "NOISE_RESY") {
-    if (is2D) {
-      ss << mResZNoise;
-    }
-    else {
-      ss << mResYNoise;
-    }
-  }
-  if (varName == "NOISE_RESZ") {
-    if (is2D) {
-      ss << 1;
-    }
-    else {
-      ss << mResZNoise;
-    }
-  }
-  if (varName == "MESH_RESX")
-    ss << mResXMesh;
-  if (varName == "MESH_RESY") {
-    if (is2D) {
-      ss << mResZMesh;
-    }
-    else {
-      ss << mResYMesh;
-    }
-  }
-  if (varName == "MESH_RESZ") {
-    if (is2D) {
-      ss << 1;
-    }
-    else {
-      ss << mResZMesh;
-    }
-  }
-  if (varName == "PARTICLE_RESX")
-    ss << mResXParticle;
-  if (varName == "PARTICLE_RESY") {
-    if (is2D) {
-      ss << mResZParticle;
-    }
-    else {
-      ss << mResYParticle;
-    }
-  }
-  if (varName == "PARTICLE_RESZ") {
-    if (is2D) {
-      ss << 1;
-    }
-    else {
-      ss << mResZParticle;
-    }
-  }
-  if (varName == "GUIDING_RESX")
-    ss << mResGuiding[0];
-  if (varName == "GUIDING_RESY") {
-    if (is2D) {
-      ss << mResGuiding[2];
-    }
-    else {
-      ss << mResGuiding[1];
-    }
+    if (with_debug)
+      std::cout << "No modifier data given in RNA map setup - returning early" << std::endl;
+    return;
   }
-  if (varName == "GUIDING_RESZ") {
-    if (is2D) {
-      ss << 1;
-    }
-    else {
-      ss << mResGuiding[2];
-    }
+
+  FluidDomainSettings *mds = mmd->domain;
+  bool is2D = (mds->solver_res == 2);
+
+  int openDomain = (FLUID_DOMAIN_BORDER_BACK | FLUID_DOMAIN_BORDER_FRONT |
+                    FLUID_DOMAIN_BORDER_LEFT | FLUID_DOMAIN_BORDER_RIGHT |
+                    FLUID_DOMAIN_BORDER_BOTTOM | FLUID_DOMAIN_BORDER_TOP);
+
+  std::string borderCollisions = "";
+  if 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list