Merge branch 'blender-v4.1-release'

This commit is contained in:
Bastien Montagne
2024-03-06 11:02:42 +01:00

View File

@@ -42,6 +42,48 @@ class TestBlendLibLinkHelper(TestHelper):
return output_lib_path
def init_lib_data_animated(self):
self.reset_blender()
me = bpy.data.meshes.new("LibMesh")
ob = bpy.data.objects.new("LibMesh", me)
ob_ctrl = bpy.data.objects.new("LibController", None)
coll = bpy.data.collections.new("LibMesh")
coll.objects.link(ob)
coll.objects.link(ob_ctrl)
bpy.context.scene.collection.children.link(coll)
# Add some action & driver animation to `LibMesh`.
# Animate Y location.
ob.location[1] = 0.0
ob.keyframe_insert("location", index=1, frame=1)
ob.location[1] = -5.0
ob.keyframe_insert("location", index=1, frame=10)
# Drive X location.
ob_drv = ob.driver_add("location", 0)
ob_drv.driver.type = 'AVERAGE'
ob_drv_var = ob_drv.driver.variables.new()
ob_drv_var.type = 'TRANSFORMS'
ob_drv_var.targets[0].id = ob_ctrl
ob_drv_var.targets[0].transform_type = 'LOC_X'
# Add some action & driver animation to `LibController`.
# Animate X location.
ob_ctrl.location[0] = 0.0
ob_ctrl.keyframe_insert("location", index=0, frame=1)
ob_ctrl.location[0] = 5.0
ob_ctrl.keyframe_insert("location", index=0, frame=10)
output_dir = self.args.output_dir
self.ensure_path(output_dir)
# Take care to keep the name unique so multiple test jobs can run at once.
output_lib_path = os.path.join(output_dir, self.unique_blendfile_name("blendlib_animated"))
bpy.ops.wm.save_as_mainfile(filepath=output_lib_path, check_existing=False, compress=False)
return output_lib_path
def init_lib_data_indirect_lib(self):
output_dir = self.args.output_dir
self.ensure_path(output_dir)
@@ -273,6 +315,54 @@ class TestBlendLibLinkIndirect(TestBlendLibLinkHelper):
assert mesh.is_library_indirect is False
class TestBlendLibLinkAnimation(TestBlendLibLinkHelper):
def __init__(self, args):
self.args = args
def test_link(self):
output_dir = self.args.output_dir
output_lib_path = self.init_lib_data_animated()
# Simple link of a the collection, and check animation values.
self.reset_blender()
link_dir = os.path.join(output_lib_path, "Collection")
bpy.ops.wm.link(directory=link_dir, filename="LibMesh", instance_collections=False, instance_object_data=False)
assert bpy.data.meshes[0].library
assert bpy.data.meshes[0].users == 1
assert len(bpy.data.objects) == 2
assert bpy.data.objects[0].library
assert bpy.data.objects[0].users == 1
assert bpy.data.objects[1].library
assert bpy.data.objects[1].users == 1
assert len(bpy.data.collections) == 1 # Scene's master collection is not listed here
assert bpy.data.collections[0].library
assert bpy.data.collections[0].users == 1
assert len(bpy.data.actions) == 2
assert bpy.data.actions[0].library
assert bpy.data.actions[0].users == 1
assert bpy.data.actions[1].library
assert bpy.data.actions[1].users == 1
# Validate animation evaluation.
bpy.context.scene.frame_set(10)
print(bpy.data.objects["LibController"].location)
print(bpy.data.objects["LibMesh"].location)
bpy.context.scene.frame_set(1)
print(bpy.data.objects["LibController"].location)
print(bpy.data.objects["LibMesh"].location)
assert bpy.data.objects["LibController"].location[0] == 0.0
assert bpy.data.objects["LibMesh"].location[0] == bpy.data.objects["LibController"].location[0]
assert bpy.data.objects["LibMesh"].location[1] == 0.0
bpy.context.scene.frame_set(10)
assert bpy.data.objects["LibController"].location[0] == 5.0
assert bpy.data.objects["LibMesh"].location[0] == bpy.data.objects["LibController"].location[0]
assert bpy.data.objects["LibMesh"].location[1] == -5.0
class TestBlendLibAppendBasic(TestBlendLibLinkHelper):
def __init__(self, args):
@@ -706,6 +796,7 @@ class TestBlendLibDataLibrariesLoadLibOverride(TestBlendLibDataLibrariesLoad):
TESTS = (
TestBlendLibLinkSaveLoadBasic,
TestBlendLibLinkAnimation,
TestBlendLibLinkIndirect,
TestBlendLibAppendBasic,