Commit: 23614570b4ec5f51cc15d076620b9d3e4f515f04
Author: calra123
Date:   Fri Jul 31 13:52:03 2020 +0530
Branches: soc-2020-testing-frameworks
https://developer.blender.org/rB23614570b4ec5f51cc15d076620b9d3e4f515f04

Extended FluidSpec to contain DynamicPaint Spec

FluidSpec is now called FluidDynamicPaintSpec, added test file for
Dynamic Paint

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

M       tests/python/modules/mesh_test.py
A       tests/python/physics_dynamic_paint.py
M       tests/python/physics_fluid.py

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

diff --git a/tests/python/modules/mesh_test.py 
b/tests/python/modules/mesh_test.py
index 40a99ed5a96..4dc643ba6a3 100644
--- a/tests/python/modules/mesh_test.py
+++ b/tests/python/modules/mesh_test.py
@@ -96,27 +96,27 @@ class PhysicsSpec:
                " with parameters: " + str(self.modifier_parameters) + " with 
frame end: " + str(self.frame_end)
 
 
-class FluidSpec:
+class FluidDyanmicPaintSpec:
     """
-    Holds a Fluid modifier and its parameters.
+    Holds a Fluid modifier and a Dynamic Paint modifier and their parameters.
     """
 
-    def __init__(self, modifier_name: str, fluid_type: str, 
modifier_parameters: dict, frame_end: int):
+    def __init__(self, modifier_name: str, modifier_type: str, sub_type: str, 
modifier_parameters: dict, frame_end: int):
         """
-        Constructs a Fluid spec.
+        Constructs a Fluid/Dynamic Paint spec.
         :param modifier_name: str - name of object modifier, e.g. "FLUID"
-        :param fluid_type: str - type of fluid, e.g. "Domain"
+        :param sub_type: str - type of fluid, e.g. "Domain"
         :param modifier_parameters: dict - {name : val} dictionary giving 
modifier parameters, e.g. {"use_mesh" : True}
         :param frame_end:int - the frame at which the modifier is "applied"
         """
         self.modifier_name = modifier_name
-        self.fluid_type = fluid_type
+        self.sub_type = sub_type
         self.modifier_parameters = modifier_parameters
-        self.modifier_type = "FLUID"
+        self.modifier_type = modifier_type
         self.frame_end = frame_end
 
     def __str__(self):
-        return "Fluid Modifier: " + self.modifier_name + " of type " + 
self.modifier_type + \
+        return "Modifier: " + self.modifier_name + " of type " + 
self.modifier_type + \
                " with parameters: " + str(self.modifier_parameters) + " with 
frame end: " + str(self.frame_end)
 
 class ParticleSystemSpec:
@@ -231,10 +231,10 @@ class MeshTest:
         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)
-                    or isinstance(operation, FluidSpec) or 
isinstance(operation, ParticleSystemSpec)):
+                    or isinstance(operation, FluidDyanmicPaintSpec) or 
isinstance(operation, ParticleSystemSpec)):
                 raise ValueError("Expected operation of type {} or {} or {} or 
{} or {} or {}. Got {}".
                                  format(type(ModifierSpec), 
type(OperatorSpec), type(PhysicsSpec),
-                                        type(DeformModifierSpec), 
type(FluidSpec), type(ParticleSystemSpec),
+                                        type(DeformModifierSpec), 
type(FluidDyanmicPaintSpec), type(ParticleSystemSpec),
                                         type(operation)))
         self.operations_stack = operations_stack
         self.apply_modifier = apply_modifiers
@@ -398,48 +398,72 @@ class MeshTest:
         if self.apply_modifier:
             self._apply_modifier(test_object, physics_spec.modifier_name)
 
-    def _apply_fluid_settings(self, test_object, fluid_spec: FluidSpec):
+    def _apply_fluid_settings(self, test_object, fluid_paint_spec: 
FluidDyanmicPaintSpec):
         """
         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)
-
-        modifier.fluid_type = fluid_spec.fluid_type
-
-        if str(fluid_spec.fluid_type) == "DOMAIN":
-            physics_setting = modifier.domain_settings
-        elif str(fluid_spec.fluid_type) == "FLOW":
-            physics_setting = modifier.flow_settings
-        elif str(fluid_spec.fluid_type) == "EFFECTOR":
-            physics_setting = modifier.effector_settings
-
+        modifier = test_object.modifiers.new(fluid_paint_spec.modifier_name,
+                                             fluid_paint_spec.modifier_type)
+
+        physics_setting = None
+        physics_canvas_surface_settings = None
+
+        if fluid_paint_spec.modifier_type == "FLUID":
+            modifier.fluid_type = fluid_paint_spec.sub_type
+            if fluid_paint_spec.sub_type == "DOMAIN":
+                physics_setting = modifier.domain_settings
+            elif fluid_paint_spec.sub_type == "FLOW":
+                physics_setting = modifier.flow_settings
+            elif fluid_paint_spec.sub_type == "EFFECTOR":
+                physics_setting = modifier.effector_settings
+
+        elif fluid_paint_spec.modifier_type == "DYNAMIC_PAINT":
+            modifier.ui_type = fluid_paint_spec.sub_type
+
+            if fluid_paint_spec.sub_type == "CANVAS":
+                bpy.ops.dpaint.type_toggle(type='CANVAS')
+                physics_setting = modifier.canvas_settings
+            elif fluid_paint_spec.sub_type == "BRUSH":
+                bpy.ops.dpaint.type_toggle(type='BRUSH')
+                physics_setting = modifier.brush_settings
 
         if self.verbose:
             print("Created modifier '{}' of type '{}'.".
-                  format(fluid_spec.modifier_name, fluid_spec.modifier_type))
+                  format(fluid_paint_spec.modifier_name, 
fluid_paint_spec.modifier_type))
 
-        for param_name in fluid_spec.modifier_parameters:
+        for param_name in fluid_paint_spec.modifier_parameters:
             try:
-                setattr(physics_setting, param_name, 
fluid_spec.modifier_parameters[param_name])
+                setattr(physics_setting, param_name, 
fluid_paint_spec.modifier_parameters[param_name])
                 if self.verbose:
                     print("\t set parameter '{}' with value '{}'".
-                          format(param_name, 
fluid_spec.modifier_parameters[param_name]))
+                          format(param_name, 
fluid_paint_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))
+                try:
+                    physics_canvas_surface_settings = 
physics_setting.canvas_surfaces.active
+                    setattr(physics_canvas_surface_settings, param_name, 
fluid_paint_spec.modifier_parameters[param_name])
+                    if self.verbose:
+                        print("\t set parameter '{}' with value '{}'".
+                              format(param_name, 
fluid_paint_spec.modifier_parameters[param_name]))
+                except AttributeError:
+                    # Clean up first
+                    bpy.ops.object.delete()
+                    raise AttributeError("Modifier '{}' has no parameter named 
'{}'".
+                                         
format(fluid_paint_spec.modifier_type, param_name))
+
+        if fluid_paint_spec.modifier_type == "FLUID":
+            bpy.ops.fluid.bake_all()
+        elif fluid_paint_spec.modifier_type == "DYNAMIC_PAINT":
+            override = {'scene': scene, 'active_object': test_object, 
'point_cache': physics_canvas_surface_settings.point_cache}
+            bpy.ops.ptcache.bake(override, bake=True)
 
-        bpy.ops.fluid.bake_all()
 
         # Jump to the frame specified by user to apply the modifier.
-        scene.frame_set(fluid_spec.frame_end)
+        scene.frame_set(fluid_paint_spec.frame_end)
 
         if self.apply_modifier:
-            self._apply_modifier(test_object, fluid_spec.modifier_name)
+            self._apply_modifier(test_object, fluid_paint_spec.modifier_name)
 
     def _apply_particle_system(self, test_object, particle_sys_spec: 
ParticleSystemSpec):
         """
@@ -602,7 +626,7 @@ class MeshTest:
             elif isinstance(operation, DeformModifierSpec):
                 self._apply_modifier_operator(evaluated_test_object, operation)
 
-            elif isinstance(operation, FluidSpec):
+            elif isinstance(operation, FluidDyanmicPaintSpec):
                 self._apply_fluid_settings(evaluated_test_object, operation)
 
             elif isinstance(operation, ParticleSystemSpec):
@@ -611,7 +635,7 @@ class MeshTest:
             else:
                 raise ValueError("Expected operation of type {} or {} or {} or 
{} or {} or {}. Got {}".
                                  format(type(ModifierSpec), 
type(OperatorSpec), type(PhysicsSpec),
-                                        type(ObjectOperatorSpec), 
type(FluidSpec), type(ParticleSystemSpec), type(operation)))
+                                        type(ObjectOperatorSpec), 
type(FluidDyanmicPaintSpec), type(ParticleSystemSpec), type(operation)))
 
         # Compare resulting mesh with expected one.
         if self.verbose:
diff --git a/tests/python/physics_fluid.py 
b/tests/python/physics_dynamic_paint.py
similarity index 74%
copy from tests/python/physics_fluid.py
copy to tests/python/physics_dynamic_paint.py
index 34809e7d801..566d6f530b0 100644
--- a/tests/python/physics_fluid.py
+++ b/tests/python/physics_dynamic_paint.py
@@ -30,22 +30,22 @@ from modules.mesh_test import ModifierTest, FluidSpec
 def main():
     test = [
 
-        ["FluidLiquid", "test", "exp",
-         [FluidSpec('fluid_liquid', 'DOMAIN', {'domain_type': 'LIQUID', 
'use_mesh': True, 'cache_type': 'ALL',
-                                               'cache_frame_end': 20}, 20)]],
+        ["DynamicPaint", "test", "exp",
+         [FluidSpec('dynamic_paint', 'DYNAMIC_PAINT', 'CANVAS', 
{'surface_type': 'WAVE', 'frame_end': 50}, 50)]],
+
     ]
-    fluid_test = ModifierTest(test)
+    dynamic_paint_test = ModifierTest(test)
 
     command = list(sys.argv)
     for i, cmd in enumerate(command):
         if cmd == "--run-all-tests":
-            fluid_test.apply_modifiers = True
-            fluid_test.run_all_tests()
+            dynamic_paint_test.apply_modifiers = True
+            dynamic_paint_test.run_all_tests()
       

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to