forked from bartvdbraak/blender
Alembic import: changing cache modifier path no longer discards object paths
This allows, for example, the path of an Alembic file to be changed from absolute to relative, without having to reconstruct all object paths.
This commit is contained in:
parent
9d819775b7
commit
9c02990ac1
@ -221,7 +221,6 @@ void BKE_cachefile_clean(Scene *scene, CacheFile *cache_file)
|
||||
}
|
||||
#endif
|
||||
mcmd->reader = NULL;
|
||||
mcmd->object_path[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
@ -239,7 +238,6 @@ void BKE_cachefile_clean(Scene *scene, CacheFile *cache_file)
|
||||
}
|
||||
#endif
|
||||
data->reader = NULL;
|
||||
data->object_path[0] = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -85,6 +85,43 @@ class SimpleImportTest(unittest.TestCase):
|
||||
for ob in bpy.data.objects:
|
||||
self.assertEqual('Cube' in ob.name, ob.select)
|
||||
|
||||
def test_change_path(self):
|
||||
import math
|
||||
|
||||
fname = 'cube-rotating1.abc'
|
||||
abc = self.testdir / fname
|
||||
relpath = bpy.path.relpath(str(abc))
|
||||
|
||||
res = bpy.ops.wm.alembic_import(filepath=str(abc), as_background_job=False)
|
||||
self.assertEqual({'FINISHED'}, res)
|
||||
cube = bpy.context.active_object
|
||||
|
||||
# Check that the file loaded ok.
|
||||
bpy.context.scene.frame_set(10)
|
||||
x, y, z = cube.matrix_world.to_euler('XYZ')
|
||||
self.assertAlmostEqual(x, 0)
|
||||
self.assertAlmostEqual(y, 0)
|
||||
self.assertAlmostEqual(z, math.pi / 2, places=5)
|
||||
|
||||
# Change path from absolute to relative. This should not break the animation.
|
||||
bpy.context.scene.frame_set(1)
|
||||
bpy.data.cache_files[fname].filepath = relpath
|
||||
bpy.context.scene.frame_set(10)
|
||||
|
||||
x, y, z = cube.matrix_world.to_euler('XYZ')
|
||||
self.assertAlmostEqual(x, 0)
|
||||
self.assertAlmostEqual(y, 0)
|
||||
self.assertAlmostEqual(z, math.pi / 2, places=5)
|
||||
|
||||
# Replace the Alembic file; this should apply new animation.
|
||||
bpy.data.cache_files[fname].filepath = relpath.replace('1.abc', '2.abc')
|
||||
bpy.context.scene.update()
|
||||
|
||||
x, y, z = cube.matrix_world.to_euler('XYZ')
|
||||
self.assertAlmostEqual(x, math.pi / 2, places=5)
|
||||
self.assertAlmostEqual(y, 0)
|
||||
self.assertAlmostEqual(z, 0)
|
||||
|
||||
|
||||
def main():
|
||||
global args
|
||||
|
Loading…
Reference in New Issue
Block a user