[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