[Bf-blender-cvs] [34cb963] fluid-mantaflow: added gravity field and clean up UI a bit

Sebastián Barschkis noreply at git.blender.org
Fri Aug 19 18:56:14 CEST 2016


Commit: 34cb963bf3f9d62fbc5fc5c1ad4d9ffa5ec2d62d
Author: Sebastián Barschkis
Date:   Fri Aug 19 14:06:50 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB34cb963bf3f9d62fbc5fc5c1ad4d9ffa5ec2d62d

added gravity field and clean up UI a bit

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

M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 75fa457..5ac88cf 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -49,6 +49,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
 
         md = context.smoke
         ob = context.object
+        scene = context.scene
 
         layout.prop(md, "smoke_type", expand=True)
 
@@ -66,9 +67,18 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
             col.label(text="Time:")
             col.prop(domain, "time_scale", text="Scale")
 
-            col = split.column()
             col.label(text="Border Collisions:")
             col.prop(domain, "collision_extents", text="")
+            
+            col = split.column()
+            if scene.use_gravity:
+                col.label(text="Use Scene Gravity", icon='SCENE_DATA')
+                sub = col.column()
+                sub.enabled = False
+                sub.prop(domain, "gravity", text="")
+            else:
+                col.label(text="Gravity:")
+                col.prop(domain, "gravity", text="")
 
             if domain.smoke_domain_type in {'GAS'}:
                 split = layout.split()
@@ -79,26 +89,17 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
                 col.prop(domain, "alpha")
                 col.prop(domain, "beta", text="Temp. Diff.")
                 col.prop(domain, "vorticity")
-
-                col = split.column(align=True)
-                col.label()
                 col.prop(domain, "use_dissolve_smoke", text="Dissolve")
                 sub = col.column()
                 sub.active = domain.use_dissolve_smoke
                 sub.prop(domain, "dissolve_speed", text="Time")
                 sub.prop(domain, "use_dissolve_smoke_log", text="Slow")
 
-                split = layout.split()
-                split.enabled = not domain.point_cache.is_baked
-
                 col = split.column(align=True)
                 col.label(text="Fire:")
                 col.prop(domain, "burning_rate")
                 col.prop(domain, "flame_smoke")
                 col.prop(domain, "flame_vorticity")
-
-                col = split.column(align=True)
-                col.label()
                 col.prop(domain, "flame_ignition")
                 col.prop(domain, "flame_max_temp")
                 col.prop(domain, "flame_smoke_color")
@@ -119,27 +120,40 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
             flow = md.flow_settings
 
             layout.prop(flow, "smoke_flow_type", expand=False)
-            layout.prop(flow, "smoke_flow_behavior", expand=False)
 
             split = layout.split()
-
-            col = split.column()
-            if flow.smoke_flow_type in {'SMOKE', 'BOTH', 'FIRE'}:
-                col.label(text="Initial Values:")
-                col.prop(flow, "use_absolute")
-            if flow.smoke_flow_type in {'SMOKE', 'BOTH'}:
-                col.prop(flow, "density")
-                col.prop(flow, "temperature")
-                col.prop(flow, "smoke_color")
-            if flow.smoke_flow_type in {'FIRE', 'BOTH'}:
-                col.prop(flow, "fuel_amount")
-
             col = split.column()
+                
             col.label(text="Sampling:")
-            if flow.smoke_flow_behavior == 'INFLOW':
-                col.prop(flow, "use_inflow")
             col.prop(flow, "subframes")
 
+            col = split.column()
+            
+            col.label(text="Flow behavior:")
+            col.prop(flow, "smoke_flow_behavior", expand=False, text="")
+
+            if not flow.smoke_flow_behavior == 'OUTFLOW':
+
+                split = layout.split()
+                col = split.column()
+				
+                if flow.smoke_flow_type in {'SMOKE', 'BOTH', 'FIRE'}:
+                    col.label(text="Initial Values:")
+                if flow.smoke_flow_type in {'SMOKE', 'BOTH'}:
+                    col.prop(flow, "density")
+                    col.prop(flow, "temperature")
+                if flow.smoke_flow_type in {'FIRE', 'BOTH'}:
+                    col.prop(flow, "fuel_amount")
+
+                col = split.column()
+
+                if flow.smoke_flow_behavior in {'INFLOW', 'GEOMETRY'}:
+                    col.prop(flow, "use_inflow")
+                if flow.smoke_flow_type in {'SMOKE', 'BOTH', 'FIRE'}:
+                    col.prop(flow, "use_absolute")
+                if flow.smoke_flow_type in {'SMOKE', 'BOTH'}:
+                    col.prop(flow, "smoke_color")
+
         elif md.smoke_type == 'COLLISION':
             coll = md.coll_settings
 
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 516afe3..a90e5a4 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -302,17 +302,17 @@ static void smoke_set_domain_gravity(Scene *scene, SmokeDomainSettings *sds)
 		copy_v3_v3(gravity, scene->physics_settings.gravity);
 		/* map default value to 1.0 */
 		mul_v3_fl(gravity, 1.0f / 9.810f);
-	}
-	
-	/* convert gravity to domain space */
-	gravity_mag = len_v3(gravity);
-	mul_mat3_m4_v3(sds->imat, gravity);
-	normalize_v3(gravity);
-	mul_v3_fl(gravity, gravity_mag);
+		
+		/* convert gravity to domain space */
+		gravity_mag = len_v3(gravity);
+		mul_mat3_m4_v3(sds->imat, gravity);
+		normalize_v3(gravity);
+		mul_v3_fl(gravity, gravity_mag);
 	
-	sds->gravity[0] = gravity[0];
-	sds->gravity[1] = gravity[1];
-	sds->gravity[2] = gravity[2];
+		sds->gravity[0] = gravity[0];
+		sds->gravity[1] = gravity[1];
+		sds->gravity[2] = gravity[2];
+	}
 }
 
 static int smokeModifier_init(SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm)
@@ -323,6 +323,8 @@ static int smokeModifier_init(SmokeModifierData *smd, Object *ob, Scene *scene,
 		int res[3];
 		/* set domain dimensions from derivedmesh */
 		smoke_set_domain_from_derivedmesh(sds, ob, dm, true);
+		/* set domain gravity */
+		smoke_set_domain_gravity(scene, sds);
 		/* reset domain values */
 		zero_v3_int(sds->shift);
 		zero_v3(sds->shift_f);
@@ -560,10 +562,6 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			smd->domain->noise = MOD_SMOKE_NOISEWAVE;
 			smd->domain->diss_speed = 5;
 			smd->domain->active_fields = 0;
-			
-			smd->domain->gravity[0] = 0.0;
-			smd->domain->gravity[1] = 0.0;
-			smd->domain->gravity[2] = -9.81;;
 
 			smd->domain->adapt_margin = 4;
 			smd->domain->adapt_res = 0;
@@ -588,11 +586,15 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			smd->domain->render_display_mode = SM_VIEWPORT_FINAL;
 			smd->domain->type = MOD_SMOKE_DOMAIN_TYPE_GAS;
 			
+#ifdef WITH_MANTA
+			smd->domain->gravity[0] = 0.0f;
+			smd->domain->gravity[1] = 0.0f;
+			smd->domain->gravity[2] = -1.0f;
+
 			/* liquid */
 			smd->domain->particle_randomness = 0.1f;
 			smd->domain->particle_number = 2;
 
-#ifdef WITH_MANTA
 			/*mantaflow settings*/
 			smd->domain->manta_solver_res = 3;
 			smd->domain->noise_pos_scale = 2.0f;
@@ -695,6 +697,13 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData
 		tsmd->domain->flame_max_temp = smd->domain->flame_max_temp;
 		
 #ifdef WITH_MANTA
+		tsmd->domain->gravity[0] = smd->domain->gravity[0];
+		tsmd->domain->gravity[1] = smd->domain->gravity[1];
+		tsmd->domain->gravity[2] = smd->domain->gravity[2];
+
+		tsmd->domain->particle_randomness = smd->domain->particle_randomness;
+		tsmd->domain->particle_number = smd->domain->particle_number;
+
 		tsmd->domain->manta_solver_res = smd->domain->manta_solver_res;
 		tsmd->domain->noise_pos_scale = smd->domain->noise_pos_scale;
 		tsmd->domain->noise_time_anim = smd->domain->noise_time_anim;
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 733c23d..28c90b2 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -824,6 +824,13 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
 	RNA_def_property_ui_range(prop, 1, 3, 2, -1);
 	RNA_def_property_ui_text(prop, "Discretization", "Particle number factor (higher value results in more particles)");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache");
+	
+	prop = RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_ACCELERATION);
+	RNA_def_property_float_sdna(prop, NULL, "gravity");
+	RNA_def_property_array(prop, 3);
+	RNA_def_property_range(prop, -1000.1, 1000.1);
+	RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction");
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_resetCache");
 }
 
 static void rna_def_smoke_flow_settings(BlenderRNA *brna)
@@ -970,7 +977,7 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna)
 
 	prop = RNA_def_property(srna, "use_inflow", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_FLOW_USE_INFLOW);
-	RNA_def_property_ui_text(prop, "Use inflow", "Control when to apply inflow");
+	RNA_def_property_ui_text(prop, "Enabled", "Control when to apply inflow");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
 	
 	prop = RNA_def_property(srna, "subframes", PROP_INT, PROP_NONE);




More information about the Bf-blender-cvs mailing list