[Bf-blender-cvs] [dcdb8a6] soc-2014-fluid: inflow without noise; passing rotated geometry to amantaflow correct

Roman Pogribnyi noreply at git.blender.org
Fri Aug 15 20:18:12 CEST 2014


Commit: dcdb8a658cfc58e0fff7b16f2d02586c65152e9e
Author: Roman Pogribnyi
Date:   Thu Aug 14 23:04:56 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rBdcdb8a658cfc58e0fff7b16f2d02586c65152e9e

inflow without noise; passing rotated geometry to amantaflow correct

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

M	intern/smoke/intern/MANTA.cpp
M	release/scripts/startup/bl_ui/properties_physics_smoke.py

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 954e382..9006544 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -162,16 +162,16 @@ extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, b
         if ( ! reading_wavelets){
 			if (!manta_check_grid_size(sds->fluid, head.dimX, head.dimY, head.dimZ))	return 0;
 			/*Y and Z axes are swapped in manta and blender*/
-			read_rotated_grid(gzf,sds->fluid->_density,head.dimX,head.dimY,head.dimZ);
-			//gzread(gzf,sds->fluid->_density, sizeof(float)*head.dimX*head.dimY*head.dimZ);
+//			read_rotated_grid(gzf,sds->fluid->_density,head.dimX,head.dimY,head.dimZ);
+			gzread(gzf,sds->fluid->_density, sizeof(float)*head.dimX*head.dimY*head.dimZ);
     	}
 		else{
 			if (!manta_check_wavelets_size(sds->wt, head.dimX, head.dimY, head.dimZ))	return 0;
 			/*Y and Z axes are swapped in manta and blender*/
-			read_rotated_grid(gzf,sds->wt->_densityBig,head.dimX,head.dimY,head.dimZ);
+			gzread(gzf,sds->wt->_densityBig, sizeof(float)*head.dimX*head.dimY*head.dimZ);
+//			read_rotated_grid(gzf,sds->wt->_densityBig,head.dimX,head.dimY,head.dimZ);
 //			wavelets_add_lowres_density(sds);
 //			read_rotated_grid(gzf,sds->wt->_densityBigOld,head.dimX,head.dimY,head.dimZ);
-			//	gzread(gzf,sds->wt->_densityBig, sizeof(float)*head.dimX*head.dimY*head.dimZ);
 		}
 	}
     gzclose(gzf);
@@ -391,6 +391,11 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	/*Solver Resolution*/
 	ss << "res = " << smd->domain->maxres << " \n";
 	/*Z axis in Blender = Y axis in Mantaflow*/
+//	float factor = smd->domain->maxres / max(max(smd->domain->global_size[0],smd->domain->global_size[1]), smd->domain->global_size[2]);
+//	int size_x = int(smd->domain->global_size[0] * factor);
+//	int size_y = int(smd->domain->global_size[1] * factor);
+//	int size_z = int(smd->domain->global_size[2] * factor);
+//	
 	manta_create_solver(ss, "s", "main", "gs", smd->domain->base_res[0], smd->domain->base_res[1], smd->domain->base_res[2], smd->domain->manta_solver_res);
 	ss << "s.timestep = " << smd->domain->time_scale << " \n";
 	
@@ -501,9 +506,9 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	}
 	ss << "  applyInflow=False\n";
 	ss << "  if (t>=0 and t<75):\n";
-	//ss << "    source_shape.applyToGrid(grid=density, value=1)\n";
+	ss << "    source.applyToGrid(grid=density, value=1,cutoff=7)\n";
 	
-	ss << "    densityInflowMesh( flags=flags, density=density, noise=noise, mesh=source, scale=3, sigma=0.5 )\n";
+//	ss << "    densityInflowMesh( flags=flags, density=density, noise=noise, mesh=source, scale=3, sigma=0.5 )\n";
 	//ss << "    sourceVel.applyToGrid( grid=vel , value=velInflow )\n";
 	//ss << "    sourceVel.applyToGrid(grid=vel , value=velInflow,cutoff = 3)\n";
 //	ss << "    source.applyToGrid(grid=vel , value=velInflow,cutoff = 3)\n";
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 09570c0..b13cd8b 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -349,11 +349,52 @@ class OBJECT_OT_RunMantaButton(bpy.types.Operator):
         #         obj.scale[dim] *=  domain_obj.scale[dim]
         #         obj.location[dim] *=  domain_obj.scale[dim]
         #         obj.location[dim] += domain_obj.location[dim] 
+        def transform_objgroup(obj_list, domain_obj):
+            #D.objects['Suzanne'].constraints.new('CHILD_OF')
+            #D.objects['Suzanne'].constraints['Child Of'].target = D.objects['Cube.001']
+            #scale_factor = domain_obj.modifiers['Smoke'].domain_settings.domain_resolution
+            #max_factor = max(domain_obj.scale[0],domain_obj.scale[1],domain_obj.scale[2])
+            #rot_euler = deepcopy(obj.rotation_euler)
+            old_scale = deepcopy(domain_obj.scale)
+            old_location = deepcopy(domain_obj.location)
+            #link all objects to reference
+            domain_obj.scale = (1,1,1)
+            for obj in obj_list:
+                obj.select = True
+                obj.constraints.new('CHILD_OF')
+                obj.constraints.active.target = domain_obj
+                #scale down to original size
+                #obj.location[0] -= domain_obj.location[0]
+                #obj.location[1] -= domain_obj.location[1]
+                #obj.location[2] -= domain_obj.location[2]
+                #obj.scale[0] /= domain_obj.scale[0]
+                #obj.scale[1] /= domain_obj.scale[1]
+                #obj.scale[2] /= domain_obj.scale[2]
+            #scale reference down
+            domain_obj.scale[0] /= old_scale[0]
+            #domain_obj.location[0] -= domain_obj.location[0] 
+            #domain_obj.location[0] /= domain_obj.scale[0]
+            domain_obj.scale[1] /= old_scale[1]
+            #domain_obj.location[1] -= domain_obj.location[1] 
+            #domain_obj.location[1] /= domain_obj.scale[1]
+            domain_obj.scale[2] /= old_scale[2]
+            return old_scale
+            #domain_obj.location[2] -= domain_obj.location[2] 
+            #domain_obj.location[2] /= domain_obj.scale[2]
+            #for axis in range(3):
+            #    obj.rotation_euler[axis] = rot_euler[axis]
+            #obj.rotation_euler[0] = rot_euler[2]
+            #obj.rotation_euler[1] = rot_euler[1]
+            #obj.rotation_euler[2] = rot_euler[0]
+            #for axis in range(3):
+            #    obj.rotation_euler[axis] = rot_euler[axis]
+            
         def transform(obj, domain_obj):
             scale_factor = domain_obj.modifiers['Smoke'].domain_settings.domain_resolution
             max_factor = max(domain_obj.scale[0],domain_obj.scale[1],domain_obj.scale[2])
             rot_euler = deepcopy(obj.rotation_euler)
-            
+            for axis in range(3):
+                obj.rotation_euler[axis] = 0
             obj.scale[0] /= domain_obj.scale[0]
             obj.location[0] -= domain_obj.location[0] 
             obj.location[0] /= domain_obj.scale[0]
@@ -363,14 +404,41 @@ class OBJECT_OT_RunMantaButton(bpy.types.Operator):
             obj.scale[2] /= domain_obj.scale[2]
             obj.location[2] -= domain_obj.location[2] 
             obj.location[2] /= domain_obj.scale[2]
+            for axis in range(3):
+                obj.rotation_euler[axis] = rot_euler[axis]
+            #obj.rotation_euler[0] = rot_euler[2]
+            #obj.rotation_euler[1] = rot_euler[1]
+            #obj.rotation_euler[2] = rot_euler[0]
+            #for axis in range(3):
+            #    obj.rotation_euler[axis] = rot_euler[axis]
             
+        def transform_objgroup_back(obj_list, domain_obj, old_data):
+            #scale_factor = domain_obj.modifiers['Smoke'].domain_settings.domain_resolution
+            #max_factor = max(domain_obj.scale[0],domain_obj.scale[1],domain_obj.scale[2])
+            #rot_euler = deepcopy(obj.rotation_euler)
+            #scale domain to prev values
+            domain_obj.scale[0] =  old_data[0]
+            #obj.location[0] *=  domain_obj.scale[0]
+            #obj.location[0] += domain_obj.location[0]
+            domain_obj.scale[1] =  old_data[1]
+            #obj.location[1] *=  domain_obj.scale[1]
+            #obj.location[1] += domain_obj.location[1]
+            domain_obj.scale[2] =  old_data[2]
+            #obj.location[2] *=  domain_obj.scale[2]
+            #obj.location[2] += domain_obj.location[2] 
+            
+            #remove used constraint and deselect objects
+            for obj in obj_list:
+                obj.select = False
+                obj.constraints.remove(obj.constraints.active)
+            #for axis in range(3):
+            #    obj.rotation_euler[axis] = -rot_euler[axis]
             #obj.rotation_euler[0] = rot_euler[2]
             #obj.rotation_euler[1] = rot_euler[1]
             #obj.rotation_euler[2] = rot_euler[0]
             #for axis in range(3):
             #    obj.rotation_euler[axis] = rot_euler[axis]
             
-    
         def transform_back(obj, domain_obj):
             scale_factor = domain_obj.modifiers['Smoke'].domain_settings.domain_resolution
             max_factor = max(domain_obj.scale[0],domain_obj.scale[1],domain_obj.scale[2])
@@ -416,21 +484,25 @@ class OBJECT_OT_RunMantaButton(bpy.types.Operator):
         silent_remove("./manta_coll.obj")
         silent_remove("./manta_flow.obj")
         if coll_objs: 
-            for ob in coll_objs:
-                ob.select = True
-                transform(ob,domain)
+            old_data = transform_objgroup(coll_objs, domain)
+            #for ob in coll_objs:
+            #    ob.select = True
+            #    transform(ob,domain)
             bpy.ops.export_scene.obj(filepath = "./manta_coll.obj", axis_forward='Y', axis_up='Z', use_selection = True, use_normals = True, use_materials = False, use_triangles = True, group_by_object = True, use_nurbs=True, check_existing= False)
-            for ob in coll_objs:
-                ob.select = False
-                transform_back(ob,domain)
+            transform_objgroup_back(coll_objs,domain,old_data)
+            #for ob in coll_objs:
+            #    ob.select = False
+            #    transform_back(ob,domain)
         if flow_objs:
-            for ob in flow_objs:
-                ob.select = True
-                transform(ob,domain)
+            old_data = transform_objgroup(flow_objs, domain)
+            #for ob in flow_objs:
+            #    ob.select = True
+            #    transform(ob,domain)
             bpy.ops.export_scene.obj(filepath = "./manta_flow.obj", axis_forward='Y', axis_up='Z', use_selection = True, use_normals = True, use_materials = False, use_triangles = True, group_by_object = True, use_nurbs=True, check_existing= False)
-            for ob in flow_objs:
-                ob.select = False
-                transform_back(ob,domain)
+            transform_objgroup_back(flow_objs,domain,old_data)
+            #for ob in flow_objs:
+            #    ob.select = False
+            #    transform_back(ob,domain)
         for ob 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list