[Bf-blender-cvs] [9236fb27259] soc-2020-testing-frameworks: WIP: FluidSpec for Fluid simulations

calra123 noreply at git.blender.org
Sun Jul 26 21:27:53 CEST 2020


Commit: 9236fb272597410c958ea48ed5e742ff970aa3e7
Author: calra123
Date:   Tue Jul 21 14:08:00 2020 +0530
Branches: soc-2020-testing-frameworks
https://developer.blender.org/rB9236fb272597410c958ea48ed5e742ff970aa3e7

WIP: FluidSpec for Fluid simulations

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

M	tests/python/modules/mesh_test.py

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

diff --git a/tests/python/modules/mesh_test.py b/tests/python/modules/mesh_test.py
index f06b40df8e2..c2d130776b6 100644
--- a/tests/python/modules/mesh_test.py
+++ b/tests/python/modules/mesh_test.py
@@ -96,6 +96,30 @@ class PhysicsSpec:
                " with parameters: " + str(self.modifier_parameters) + " with frame end: " + str(self.frame_end)
 
 
+class FluidSpec:
+    """
+    Holds one Physics modifier and its parameters.
+    """
+
+    def __init__(self, modifier_name: str, fluid_type: str, modifier_parameters: dict, frame_end: int):
+        """
+        Constructs a physics spec.
+        :param modifier_name: str - name of object modifier, e.g. "FLUID"
+        :param fluid_type: str - type of fluid, e.g. "Domain"
+        :param modifier_parameters: dict - {name : val} dictionary giving modifier parameters, e.g. {"quality" : 4}
+        :param frame_end:int - the last frame of the simulation at which it is baked
+        """
+        self.modifier_name = modifier_name
+        self.fluid_type = fluid_type
+        self.modifier_parameters = modifier_parameters
+        self.modifier_type = "FLUID"
+        self.frame_end = frame_end
+
+    def __str__(self):
+        return "Physics Modifier: " + self.modifier_name + " of type " + self.modifier_type + \
+               " with parameters: " + str(self.modifier_parameters) + " with frame end: " + str(self.frame_end)
+
+
 class OperatorSpec:
     """
     Holds one operator and its parameters.
@@ -183,10 +207,11 @@ class MeshTest:
             operations_stack = []
         for operation in operations_stack:
             if not (isinstance(operation, ModifierSpec) or isinstance(operation, OperatorSpec) or isinstance(operation, PhysicsSpec)
-                    or isinstance(operation, ObjectOperatorSpec) or isinstance(operation, DeformModifierSpec)):
-                raise ValueError("Expected operation of type {} or {}. Got {}".
+                    or isinstance(operation, ObjectOperatorSpec) or isinstance(operation, DeformModifierSpec)
+                    or isinstance(operation, FluidSpec)):
+                raise ValueError("Expected operation of type {} or {} or {} or {} or {}. Got {}".
                                  format(type(ModifierSpec), type(OperatorSpec), type(PhysicsSpec),
-                                        type(ObjectOperatorSpec), type(DeformModifierSpec),
+                                        type(DeformModifierSpec), type(FluidSpec),
                                         type(operation)))
         self.operations_stack = operations_stack
         self.apply_modifier = apply_modifiers
@@ -348,7 +373,46 @@ class MeshTest:
 
         self._bake_current_simulation(test_object, physics_spec.modifier_type, physics_spec.modifier_name, physics_spec.frame_end)
         if self.apply_modifier:
-            bpy.ops.object.modifier_apply(modifier=physics_spec.modifier_name)
+            self._apply_modifier(test_object, physics_spec.modifier_name)
+
+    def _apply_fluid_settings(self, test_object, fluid_spec: FluidSpec):
+        """
+        Apply Fluid settings to test objects.
+        """
+        scene = bpy.context.scene
+        scene.frame_set(1)
+        modifier = test_object.modifiers.new(fluid_spec.modifier_name,
+                                             fluid_spec.modifier_type)
+        # fluid_settings = str(fluid_spec.fluid_type).lower() + "_settings"
+        # physics_setting = modifier + str(".") + fluid_settings
+        modifier.fluid_type = fluid_spec.fluid_type
+
+        if str(fluid_spec.fluid_type).lower() == "domain":
+            physics_setting = modifier.domain_settings
+            # modifier.fluid_type = fluid_spec.fluid_type
+
+        if self.verbose:
+            print("Created modifier '{}' of type '{}'.".
+                  format(fluid_spec.modifier_name, fluid_spec.modifier_type))
+
+        for param_name in fluid_spec.modifier_parameters:
+            try:
+                setattr(physics_setting, param_name, fluid_spec.modifier_parameters[param_name])
+                if self.verbose:
+                    print("\t set parameter '{}' with value '{}'".
+                          format(param_name, fluid_spec.modifier_parameters[param_name]))
+            except AttributeError:
+                # Clean up first
+                bpy.ops.object.delete()
+                raise AttributeError("Modifier '{}' has no parameter named '{}'".
+                                     format(fluid_spec.modifier_type, param_name))
+
+        # bpy.ops.fluid.free_all()
+        bpy.ops.fluid.bake_all()
+        scene.frame_set(fluid_spec.frame_end)
+
+        if self.apply_modifier:
+            self._apply_modifier(test_object, fluid_spec.modifier_name)
 
     def _apply_operator(self, test_object, operator: OperatorSpec):
         """
@@ -471,10 +535,13 @@ class MeshTest:
             elif isinstance(operation, DeformModifierSpec):
                 self._apply_modifier_operator(evaluated_test_object, operation)
 
+            elif isinstance(operation, FluidSpec):
+                self._apply_fluid_settings(evaluated_test_object, operation)
+
             else:
-                raise ValueError("Expected operation of type {} or {} or {}. Got {}".
+                raise ValueError("Expected operation of type {} or {} or {} or {} or {}. Got {}".
                                  format(type(ModifierSpec), type(OperatorSpec), type(PhysicsSpec),
-                                        type(ObjectOperatorSpec), type(operation)))
+                                        type(ObjectOperatorSpec), type(FluidSpec), type(operation)))
 
         # Compare resulting mesh with expected one.
         if self.verbose:



More information about the Bf-blender-cvs mailing list