[Bf-blender-cvs] [db47130] fluid-mantaflow: simplified grid pointer access functions

Sebastián Barschkis noreply at git.blender.org
Sat Apr 23 13:48:43 CEST 2016


Commit: db47130a9c91f823633a5a190e6c5b84550e5c8c
Author: Sebastián Barschkis
Date:   Sat Apr 23 13:45:38 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBdb47130a9c91f823633a5a190e6c5b84550e5c8c

simplified grid pointer access functions

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

M	intern/mantaflow/intern/MANTA.cpp
M	intern/mantaflow/intern/MANTA.h

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

diff --git a/intern/mantaflow/intern/MANTA.cpp b/intern/mantaflow/intern/MANTA.cpp
index 05b3c5d..9e1f17c 100644
--- a/intern/mantaflow/intern/MANTA.cpp
+++ b/intern/mantaflow/intern/MANTA.cpp
@@ -611,29 +611,32 @@ PyObject* MANTA::getPythonObject(std::string pyVariableName)
 	return pyObject;
 }
 
-std::string MANTA::getGridPointer(std::string gridName, std::string solverName)
+void* MANTA::getGridPointer(std::string gridName, std::string solverName)
 {
-	if ((gridName == "") && (solverName == "")) return "";
+	if ((gridName == "") && (solverName == "")) return NULL;
 
 	PyGILState_STATE gilstate = PyGILState_Ensure();
 
+	// Get pyobject that holds pointer address as string
 	PyObject* main = PyImport_AddModule("__main__");
 	PyObject* gridObject = PyObject_GetAttrString(main, gridName.c_str());
-
 	PyObject* func = PyObject_GetAttrString(gridObject, (char*) "getDataPointer");
 	PyObject* returnedValue = PyObject_CallObject(func, NULL);
 	PyObject* encoded = PyUnicode_AsUTF8String(returnedValue);
 
-	std::string res = PyBytes_AsString(encoded);
-	std::cout << "Pointer on "<< gridName << " " << res << std::endl;
-
+	// Convert string pointer to void pointer
+	std::string pointerString = PyBytes_AsString(encoded);
+	std::istringstream in(pointerString);
+	void *gridPointer = NULL;
+	in >> gridPointer;
+	
 	Py_DECREF(gridObject);
 	Py_DECREF(func);
 	Py_DECREF(returnedValue);
 	Py_DECREF(encoded);
 
 	PyGILState_Release(gilstate);
-	return res;
+	return gridPointer;
 }
 
 void* MANTA::pointerFromString(const std::string& s)
@@ -647,52 +650,58 @@ void* MANTA::pointerFromString(const std::string& s)
 void MANTA::updatePointers(SmokeModifierData *smd)
 {
 	std::cout << "Updating pointers low res" << std::endl;
-	mDensity        = (float*) pointerFromString( getGridPointer("density",    "s") );
-	mVelocityX      = (float*) pointerFromString( getGridPointer("x_vel",      "s") );
-	mVelocityY      = (float*) pointerFromString( getGridPointer("y_vel",      "s") );
-	mVelocityZ      = (float*) pointerFromString( getGridPointer("z_vel",      "s") );
-	mForceX         = (float*) pointerFromString( getGridPointer("x_force",    "s") );
-	mForceY         = (float*) pointerFromString( getGridPointer("y_force",    "s") );
-	mForceZ         = (float*) pointerFromString( getGridPointer("z_force",    "s") );
-	mDensityInflow  = (float*) pointerFromString( getGridPointer("inflow_grid","s") );
-	mFuelInflow     = (float*) pointerFromString( getGridPointer("fuel_inflow","s") );
-	mObstacles      = (unsigned char*) pointerFromString( getGridPointer("flags",      "s") );
+
+	mDensity        = (float*)         getGridPointer("density",     "s");
+	mVelocityX      = (float*)         getGridPointer("x_vel",       "s");
+	mVelocityY      = (float*)         getGridPointer("y_vel",       "s");
+	mVelocityZ      = (float*)         getGridPointer("z_vel",       "s");
+	mObVelocityX    = (float*)         getGridPointer("x_obvel",     "s");
+	mObVelocityY    = (float*)         getGridPointer("y_obvel",     "s");
+	mObVelocityZ    = (float*)         getGridPointer("z_obvel",     "s");
+	mForceX         = (float*)         getGridPointer("x_force",     "s");
+	mForceY         = (float*)         getGridPointer("y_force",     "s");
+	mForceZ         = (float*)         getGridPointer("z_force",     "s");
+	mDensityInflow  = (float*)         getGridPointer("inflow_grid", "s");
+	mFuelInflow     = (float*)         getGridPointer("fuel_inflow", "s");
+	mObstacles      = (unsigned char*) getGridPointer("flags",       "s");
 	
 	if (mUsingHeat) {
-		mHeat       = (float*) pointerFromString(getGridPointer("heat",        "s") );
+		mHeat       = (float*) getGridPointer("heat",    "s");
 	}
 	if (mUsingFire) {
-		mFlame      = (float*) pointerFromString( getGridPointer("flame",      "s") );
-		mFuel       = (float*) pointerFromString( getGridPointer("fuel",       "s") );
-		mReact      = (float*) pointerFromString( getGridPointer("react",      "s") );
+		mFlame      = (float*) getGridPointer("flame",   "s");
+		mFuel       = (float*) getGridPointer("fuel",    "s");
+		mReact      = (float*) getGridPointer("react",   "s");
 	}
 	if (mUsingColors) {
-		mColorR     = (float*) pointerFromString( getGridPointer("color_r",    "s") );
-		mColorG     = (float*) pointerFromString( getGridPointer("color_g",    "s") );
-		mColorB     = (float*) pointerFromString( getGridPointer("color_b",    "s") );
+		mColorR     = (float*) getGridPointer("color_r", "s");
+		mColorG     = (float*) getGridPointer("color_g", "s");
+		mColorB     = (float*) getGridPointer("color_b", "s");
 	}
+
 }
 
 void MANTA::updatePointersHigh(SmokeModifierData *smd)
 {
 	std::cout << "Updating pointers high res" << std::endl;
-	mDensityHigh    = (float*) pointerFromString( getGridPointer("xl_density",   "xl") );
-	mTextureU       = (float*) pointerFromString( getGridPointer("texture_u",     "s") );
-	mTextureV       = (float*) pointerFromString( getGridPointer("texture_v",     "s") );
-	mTextureW       = (float*) pointerFromString( getGridPointer("texture_w",     "s") );
-	mTextureU2      = (float*) pointerFromString( getGridPointer("texture_u2",    "s") );
-	mTextureV2      = (float*) pointerFromString( getGridPointer("texture_v2",    "s") );
-	mTextureW2      = (float*) pointerFromString( getGridPointer("texture_w2",    "s") );
+
+	mDensityHigh    = (float*) getGridPointer("xl_density", "xl");
+	mTextureU       = (float*) getGridPointer("texture_u",  "s");
+	mTextureV       = (float*) getGridPointer("texture_v",  "s");
+	mTextureW       = (float*) getGridPointer("texture_w",  "s");
+	mTextureU2      = (float*) getGridPointer("texture_u2", "s");
+	mTextureV2      = (float*) getGridPointer("texture_v2", "s");
+	mTextureW2      = (float*) getGridPointer("texture_w2", "s");
 	
 	if (mUsingFire) {
-		mFlameHigh  = (float*) pointerFromString( getGridPointer("xl_flame",     "xl") );
-		mFuelHigh   = (float*) pointerFromString( getGridPointer("xl_fuel",      "xl") );
-		mReactHigh  = (float*) pointerFromString( getGridPointer("xl_react",     "xl") );
+		mFlameHigh  = (float*) getGridPointer("xl_flame",   "xl");
+		mFuelHigh   = (float*) getGridPointer("xl_fuel",    "xl");
+		mReactHigh  = (float*) getGridPointer("xl_react",   "xl");
 	}
 	if (mUsingColors) {
-		mColorRHigh = (float*) pointerFromString( getGridPointer("xl_color_r",   "xl") );
-		mColorGHigh = (float*) pointerFromString( getGridPointer("xl_color_g",   "xl") );
-		mColorBHigh = (float*) pointerFromString( getGridPointer("xl_color_b",   "xl") );
+		mColorRHigh = (float*) getGridPointer("xl_color_r", "xl");
+		mColorGHigh = (float*) getGridPointer("xl_color_g", "xl");
+		mColorBHigh = (float*) getGridPointer("xl_color_b", "xl");
 	}
 }
 
diff --git a/intern/mantaflow/intern/MANTA.h b/intern/mantaflow/intern/MANTA.h
index a411c43..bacb6e5 100644
--- a/intern/mantaflow/intern/MANTA.h
+++ b/intern/mantaflow/intern/MANTA.h
@@ -177,7 +177,7 @@ private:
 	std::string getRealValue(const std::string& varName, SmokeModifierData *smd);
 	std::string parseLine(const std::string& line, SmokeModifierData *smd);
 	std::string parseScript(const std::string& setup_string, SmokeModifierData *smd);
-	std::string getGridPointer(std::string gridName, std::string solverName);
+	void* getGridPointer(std::string gridName, std::string solverName);
 	void* pointerFromString(const std::string& s);
 	PyObject* getPythonObject(std::string pyVariableName);




More information about the Bf-blender-cvs mailing list