Exemple #1
0
    def test_write_array_curvemap(self):
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        light_name = "Light"
        light = D.lights["Light"]
        points = [(0.111, 0.222), (0.333, 0.444)]
        curve0 = light.falloff_curve.curves[0]
        for i, point in enumerate(points):
            curve0.points[i].location = point

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)

        light.name = "light_bak"
        light_bak = D.lights["light_bak"]
        light = None

        light_proxy = self.proxy.data("lights").data(light_name)
        light_proxy.save(D.lights, light_name, self.proxy.visit_state())
        light = D.lights[light_name]
        curve = light.falloff_curve.curves[0]
        for i, point in enumerate(points):
            for clone, expected in zip(curve.points[i].location, point):
                self.assertAlmostEqual(clone, expected)

        self.assertEqual(D.lights[light_name], light_bak)
Exemple #2
0
    def test_array_curvemap_extend(self):
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        light_name = "Light"
        light = D.lights["Light"]
        light_type = light.type
        # extend the source curvemap to 3 points
        src_points = [(0.111, 0.222), (0.333, 0.444), (0.555, 0.666)]
        curve0 = light.falloff_curve.curves[0]
        curve0.points.new(*src_points[2])
        for i, point in enumerate(src_points):
            curve0.points[i].location = point

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)

        light.name = "light_bak"

        light = D.lights.new(light_name, light_type)

        # the dst curvemap has 2 points by default
        # save() needs to extend
        light_proxy = self.proxy.data("lights").data(light_name)
        light_proxy.save(D.lights, light_name, self.proxy.visit_state())
        dst_curve = light.falloff_curve.curves[0]
        self.assertEqual(len(src_points), len(dst_curve.points))
        for i, point in enumerate(src_points):
            for dst, expected in zip(dst_curve.points[i].location, point):
                self.assertAlmostEqual(dst, expected)
Exemple #3
0
    def test_all_soa_grease_pencil(self):
        import array

        bpy.ops.object.gpencil_add(type="STROKE")
        proxy = BpyBlendProxy()
        proxy.load(test_context)
        gp_layers = proxy.data("grease_pencils").data("Stroke").data("layers")
        gp_points = gp_layers.data("Lines").data("frames").data(0).data(
            "strokes").data(0).data("points")._data
        expected = (
            ("co", array.array, "f"),
            ("pressure", array.array, "f"),
            ("strength", array.array, "f"),
            ("uv_factor", array.array, "f"),
            ("uv_rotation", array.array, "f"),
            ("select", list, bool),
        )
        for name, type_, element_type in expected:
            self.assertIn("co", gp_points)
            item = gp_points[name]
            self.assertIsInstance(item, SoaElement)
            self.assertIsInstance(item._data, type_)
            if type_ is array.array:
                self.assertEqual(item._data.typecode, element_type)
            else:
                self.assertIsInstance(item._data[0], element_type)

        self.assertEqual(len(gp_points["pressure"]._data),
                         len(gp_points["strength"]._data))
        self.assertEqual(3 * len(gp_points["pressure"]._data),
                         len(gp_points["co"]._data))
Exemple #4
0
    def test_extend_array_curvemap(self):
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        src_light_name = "Light"
        src_light = D.lights["Light"]
        # extend the source curvemap to 3 points
        src_points = [(0.111, 0.222), (0.333, 0.444), (0.555, 0.666)]
        curve0 = src_light.falloff_curve.curves[0]
        curve0.points.new(*src_points[2])
        for i, point in enumerate(src_points):
            curve0.points[i].location = point

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)
        light_proxy = self.proxy.data("lights").data(src_light_name)
        light_type = light_proxy.data("type")

        # Create a light then restore src_light into it
        dst_light_name = "Dst Light"
        dst_light = D.lights.new(dst_light_name, light_type)
        # patch the light name to restore the proxy into dst_light
        light_proxy.rename(dst_light_name)
        # the dst curvemap has 2 points by default
        # save() needs to extend
        light_proxy.save(D.lights, dst_light_name)
        dst_curve = dst_light.falloff_curve.curves[0]
        self.assertEqual(len(src_points), len(dst_curve.points))
        for i, point in enumerate(src_points):
            for dst, expected in zip(dst_curve.points[i].location, point):
                self.assertAlmostEqual(dst, expected)
Exemple #5
0
 def set_experimental_sync(self, experimental_sync: bool):
     if experimental_sync:
         logger.warning("Experimental sync in ON")
         self.proxy = BpyBlendProxy()
     else:
         if self.proxy:
             logger.warning("Experimental sync in OFF")
             self.proxy = None
Exemple #6
0
 def test_camera_focus_object_none(self):
     # test_misc.TestLoadProxy.test_camera_focus_object_none
     self.proxy = BpyBlendProxy()
     self.proxy.load(test_context)
     # load into proxy
     cam_proxy = self.proxy.data("cameras").data("Camera_0")
     focus_object_proxy = cam_proxy.data("dof").data("focus_object")
     self.assertIs(focus_object_proxy, None)
Exemple #7
0
    def setUp(self):
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        # otherwise the loaded scene  way have curves despite use_curve_mapping==False and
        # the new one will not have curves and will not receive them as they are not send
        # use_curve_mapping == False
        D.scenes["Scene_0"].view_settings.use_curve_mapping = True

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)
        register_bl_equals(self, context)
Exemple #8
0
    def test_blenddata_filtered(self):
        blend_data = self.proxy._data
        scene = blend_data["scenes"]._data["Scene_0"]._data
        self.assertTrue("eevee" in scene)

        filter_stack = copy.copy(test_filter)
        filter_stack.append({T.Scene: TypeFilterOut(T.SceneEEVEE)})
        proxy = BpyBlendProxy()
        proxy.load(Context(filter_stack))
        blend_data_ = proxy._data
        scene_ = blend_data_["scenes"]._data["Scene_0"]._data
        self.assertFalse("eevee" in scene_)
Exemple #9
0
 def test_camera_focus_object_idref(self):
     # test_misc.TestLoadProxy.test_camera_focus_object_idref
     cam = D.cameras["Camera_0"]
     cam.dof.focus_object = D.objects["Cube"]
     self.proxy = BpyBlendProxy()
     self.proxy.load(test_context)
     # load into proxy
     cam_proxy = self.proxy.data("cameras").data("Camera_0")
     focus_object_proxy = cam_proxy.data("dof").data("focus_object")
     self.assertIsInstance(focus_object_proxy, BpyIDRefProxy)
     self.assertEqual(focus_object_proxy.collection, "objects")
     self.assertEqual(focus_object_proxy.key, "Cube")
Exemple #10
0
    def test_write_datablock_with_reference_camera_dof_target(self):
        # Write the whole camera datablock, including its reference to dof target

        camera_name = "Camera_0"
        camera = D.cameras[camera_name]

        # setup the scene and reload
        focus_object = D.objects["Cube"]
        camera.dof.focus_object = focus_object
        self.proxy = BpyBlendProxy()
        self.proxy.load(context)

        camera.name = "camera_bak"

        camera_proxy = self.proxy.data("cameras").data(camera_name)
        camera_proxy.save(D.cameras, camera_name, self.proxy.visit_state())
        self.assertEqual(D.cameras[camera_name].dof.focus_object, focus_object)
Exemple #11
0
    def test_array_curvemap_shrink(self):
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        light_name = "Light"
        light = D.lights["Light"]
        src_points = [(0.666, 0.777), (0.888, 0.999)]
        curve0 = light.falloff_curve.curves[0]
        for i, point in enumerate(src_points):
            curve0.points[i].location = point

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)

        light.name = "light_bak"
        light = None

        light_proxy = self.proxy.data("lights").data(light_name)

        light_proxy.save(D.lights, light_name, self.proxy.visit_state())
        light = D.lights[light_name]

        dst_curve = light.falloff_curve.curves[0]
        self.assertEqual(len(src_points), len(dst_curve.points))

        # extend the dst curvemap to 3 points
        dst_points = [(0.111, 0.222), (0.333, 0.444), (0.555, 0.666)]
        curve0 = light.falloff_curve.curves[0]
        curve0.points.new(*dst_points[2])
        for i, point in enumerate(dst_points):
            curve0.points[i].location = point
        self.assertEqual(len(dst_points), len(dst_curve.points))

        # restore again, save needs to shrink
        light_proxy.save(D.lights, light_name, self.proxy.visit_state())
        light = D.lights[light_name]

        dst_curve = light.falloff_curve.curves[0]
        self.assertEqual(len(src_points), len(dst_curve.points))
        for i, point in enumerate(src_points):
            for dst, expected in zip(dst_curve.points[i].location, point):
                self.assertAlmostEqual(dst, expected)
Exemple #12
0
    def test_write_array_curvemap(self):
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        light_name = "Light"
        light = D.lights["Light"]
        points = [(0.111, 0.222), (0.333, 0.444)]
        curve0 = light.falloff_curve.curves[0]
        for i, point in enumerate(points):
            curve0.points[i].location = point

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)
        clone_name = f"Clone of {light_name}"
        light_proxy = self.proxy._data["lights"]._data[light_name]
        light_type = light_proxy._data["type"]
        light_proxy.rename(clone_name)
        clone_light = D.lights.new(clone_name, light_type)
        light_proxy.save()
        clone_curve = clone_light.falloff_curve.curves[0]
        for i, point in enumerate(points):
            for clone, expected in zip(clone_curve.points[i].location, point):
                self.assertAlmostEqual(clone, expected)
Exemple #13
0
    def execute(self, context):
        # Cannot import at module level, since it requires access to bpy.data which is not
        # accessible during module load
        from mixer.blender_data.proxy import BpyBlendProxy
        from mixer.blender_data.filter import test_context
        import cProfile
        import io
        import pstats
        from pstats import SortKey

        profile_cumulative = get_props().profile_cumulative
        profile_callers = get_props().profile_callers
        profile = profile_callers or profile_cumulative
        proxy = BpyBlendProxy()
        if profile:
            pr = cProfile.Profile()
            pr.enable()
        t1 = time.time()
        proxy.load(test_context)
        t2 = time.time()
        if profile:
            pr.disable()
            s = io.StringIO()
            sortby = SortKey.CUMULATIVE
            ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
            if profile_cumulative:
                ps.print_stats()
            if profile_callers:
                ps.print_callers()
            print(s.getvalue())

        logger.warning(f"Elapse: {t2 - t1} s.")
        non_empty = proxy.get_non_empty_collections()
        logger.info(
            f"Number of non empty collections in proxy: {len(non_empty)}")

        # Put breakpoint here and examinate non_empty dictionnary
        return {"FINISHED"}
Exemple #14
0
    def test_write_camera_dof_target(self):
        # test_write.TestWriteAttribute.test_write_camera_dof_target
        # write an ID ref
        bpy.ops.wm.open_mainfile(filepath=test_blend_file)

        src_camera_name = "Camera_0"
        src_camera = D.cameras[src_camera_name]
        focus_object = D.objects["Cube"]
        src_camera.dof.focus_object = focus_object

        self.proxy = BpyBlendProxy()
        self.proxy.load(context)
        camera_proxy = self.proxy.data("cameras").data(src_camera_name)

        # Create a light then restore src_light into it
        dst_camera_name = "Dst Camera"
        dst_camera = D.cameras.new(dst_camera_name)

        # patch the light name to restore the proxy into dst_light
        camera_proxy.rename(dst_camera_name)
        # save() needs to shrink the dst curvemap
        camera_proxy.save(D.cameras)
        self.assertEqual(dst_camera.dof.focus_object, focus_object)
Exemple #15
0
 def test_load_as(self):
     proxy = BpyBlendProxy()
     proxy.load(test_context)
     root_ids = proxy.root_ids
     self.assertEqual(
         LoadElementAs.STRUCT,
         load_as_what(T.Scene.bl_rna.properties["display"],
                      bpy.data.scenes[0].display, root_ids),
     )
     self.assertEqual(
         LoadElementAs.ID_REF,
         load_as_what(T.Scene.bl_rna.properties["objects"],
                      bpy.data.scenes[0].objects, root_ids),
     )
     self.assertEqual(
         LoadElementAs.ID_REF,
         load_as_what(T.Scene.bl_rna.properties["world"],
                      bpy.data.scenes[0].world, root_ids),
     )
     self.assertEqual(
         LoadElementAs.ID_DEF,
         load_as_what(T.Scene.bl_rna.properties["collection"],
                      bpy.data.scenes[0].collection, root_ids),
     )
Exemple #16
0
 def setUp(self):
     file = test_blend_file
     # file = r"D:\work\data\test_files\BlenderSS 2_82.blend"
     bpy.ops.wm.open_mainfile(filepath=file)
     self.proxy = BpyBlendProxy()
     self.proxy.load(test_context)
Exemple #17
0
 def setUp(self):
     bpy.ops.wm.open_mainfile(filepath=test_blend_file)
     self.proxy = BpyBlendProxy()
     register_bl_equals(self, test_context)
Exemple #18
0
 def setUp(self):
     self.bpy_data_proxy = BpyBlendProxy()
     self.diff = BpyBlendDiff()
     bpy.data.worlds[0].name = "World"
     register_bl_equals(self, safe_context)
Exemple #19
0
 def setUp(self):
     for w in D.worlds:
         D.worlds.remove(w)
     self.proxy = BpyBlendProxy()