[Bf-blender-cvs] [86aeeb1] soc-2014-fluid: in-memory passing of force fields

Roman Pogribnyi noreply at git.blender.org
Thu Oct 16 22:07:22 CEST 2014


Commit: 86aeeb16f84a096bf1be57c25eb8fbba5c17e34d
Author: Roman Pogribnyi
Date:   Thu Oct 16 22:05:00 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB86aeeb16f84a096bf1be57c25eb8fbba5c17e34d

in-memory passing of force fields

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

M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/scenarios/smoke.h
M	intern/smoke/intern/smoke_API.cpp

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 6419ed4..9691520 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -345,6 +345,10 @@ string Manta_API::gridNameFromType(const string &type)
 	{
 		return "RealGrid";
 	}
+	else if (type == "Vec3")
+	{
+		return "MACGrid";	
+	}
 	else
 	{
 		cout<<"ERROR: can not create grid from type: "<< type << endl;
@@ -361,7 +365,7 @@ void Manta_API::addGrid(void * data, string name, string type, int x, int y, int
 	stringStream << grid_name << " = s.create(" << gridNameFromType(type) << ")";
 	const std::string command_1 = stringStream.str();
 	stringStream.str("");
-	stringStream << grid_name << ".readGridFromMemory("<< data << "," << x << "," << z << "," << y << ")";
+	stringStream << grid_name << ".readGridFromMemory(\'"<< data << "\',\'" << name << "\', " << x << "," << z << "," << y << ")";
 	const std::string command_2 = stringStream.str();
 	const std::string command_3 = name + ".add(" + grid_name + ")";
 	PyGILState_STATE gilstate = PyGILState_Ensure();
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index a6cf500..300e5d6 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -88,7 +88,7 @@ const string smoke_step_low = "def sim_step(t):\n\
   #source_grid.load('manta_em_influence.uni')\n\
   print (\"Source_Grid\" , str(source_grid))\n\
   #density.add(source_grid)\n\
-  #addForceField(flags=flags, vel=vel,force=forces)\n\
+  addForceField(flags=flags, vel=vel,force=forces)\n\
   \n\
   advectSemiLagrange(flags=flags, vel=vel, grid=density, order=$ADVECT_ORDER$)\n\
   advectSemiLagrange(flags=flags, vel=vel, grid=vel    , order=$ADVECT_ORDER$, strength=1.0)\n\
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 8ccee68..a5ba264 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -528,7 +528,19 @@ extern "C" void manta_write_effectors(struct Scene *s, struct SmokeModifierData
 	float *force_x = smoke_get_force_x(smd->domain->fluid);
 	float *force_y = smoke_get_force_y(smd->domain->fluid);
 	float *force_z = smoke_get_force_z(smd->domain->fluid);
-	export_force_fields(size_x, size_y, size_z, force_x, force_y, force_z);
+//	export_force_fields(size_x, size_y, size_z, force_x, force_y, force_z);
+	/*accumulate all force fields in one grid*/
+	Vec3 * accumulated_force = (Vec3*)malloc(size_x * size_y * size_z * sizeof(Vec3));
+	long index(0);
+	for (int x(0); x < size_x; x++){
+			for (int y(0); y < size_y; y++){
+				for (int z(0); z < size_z; z++){
+					index = x + y * size_x + z * size_x * size_y;
+					accumulated_force[index] = Vec3(force_x[x], force_y[y], force_z[z]);
+				}	
+			}		
+		}
+	Manta_API::addGrid(accumulated_force, "forces", "Vec3", size_x, size_y, size_z);
 }
 
 extern "C" void manta_write_emitters(struct SmokeFlowSettings *sfs, int min_x, int min_y, int min_z, int max_x, int max_y, int max_z, int d_x, int d_y, int d_z,float *influence, float *vel)




More information about the Bf-blender-cvs mailing list