forked from bartvdbraak/blender
Fix collections names no longer unique when moved around
We were not checking for uniqueness after moving. And in some cases the new siblings of our collection may have conflicting names.
This commit is contained in:
parent
4dfccf8b7f
commit
e969ac6413
@ -314,6 +314,15 @@ void BKE_collection_rename(const Scene *scene, SceneCollection *sc, const char *
|
||||
collection_rename(&scene->id, sc, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure the collection name is still unique within its siblings.
|
||||
*/
|
||||
static void collection_name_check(const ID *owner_id, SceneCollection *sc)
|
||||
{
|
||||
/* It's a bit of a hack, we simply try to make sure the collection name is valid. */
|
||||
collection_rename(owner_id, sc, sc->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Free (or release) any data used by the master collection (does not free the master collection itself).
|
||||
* Used only to clear the entire scene or group data since it's not doing re-syncing of the LayerCollection tree
|
||||
@ -589,6 +598,9 @@ bool BKE_collection_move_above(const ID *owner_id, SceneCollection *sc_dst, Scen
|
||||
BKE_layer_collection_resync(owner_id, sc_src_parent);
|
||||
BKE_layer_collection_resync(owner_id, sc_dst_parent);
|
||||
|
||||
/* Keep names unique. */
|
||||
collection_name_check(owner_id, sc_src);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -628,6 +640,9 @@ bool BKE_collection_move_below(const ID *owner_id, SceneCollection *sc_dst, Scen
|
||||
BKE_layer_collection_resync(owner_id, sc_src_parent);
|
||||
BKE_layer_collection_resync(owner_id, sc_dst_parent);
|
||||
|
||||
/* Keep names unique. */
|
||||
collection_name_check(owner_id, sc_src);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -663,6 +678,9 @@ bool BKE_collection_move_into(const ID *owner_id, SceneCollection *sc_dst, Scene
|
||||
BKE_layer_collection_resync(owner_id, sc_src_parent);
|
||||
BKE_layer_collection_resync(owner_id, sc_dst);
|
||||
|
||||
/* Keep names unique. */
|
||||
collection_name_check(owner_id, sc_src);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,8 @@ endmacro()
|
||||
|
||||
VIEW_LAYER_TEST(active_collection)
|
||||
VIEW_LAYER_TEST(background_set)
|
||||
VIEW_LAYER_TEST(collection_rename)
|
||||
VIEW_LAYER_TEST(collection_rename_a)
|
||||
VIEW_LAYER_TEST(collection_rename_b)
|
||||
VIEW_LAYER_TEST(evaluation_render_settings_a)
|
||||
VIEW_LAYER_TEST(evaluation_render_settings_b)
|
||||
VIEW_LAYER_TEST(evaluation_render_settings_c)
|
||||
|
58
tests/python/view_layer/test_collection_rename_b.py
Normal file
58
tests/python/view_layer/test_collection_rename_b.py
Normal file
@ -0,0 +1,58 @@
|
||||
# ############################################################
|
||||
# Importing - Same For All Render Layer Tests
|
||||
# ############################################################
|
||||
|
||||
import unittest
|
||||
import os
|
||||
import sys
|
||||
|
||||
from view_layer_common import *
|
||||
|
||||
|
||||
# ############################################################
|
||||
# Testing
|
||||
# ############################################################
|
||||
|
||||
class UnitTesting(ViewLayerTesting):
|
||||
def setup_collections(self):
|
||||
import bpy
|
||||
scene = bpy.context.scene
|
||||
|
||||
master = scene.master_collection
|
||||
one = master.collections[0]
|
||||
two = master.collections.new()
|
||||
sub = two.collections.new(one.name)
|
||||
|
||||
self.assertEqual(one.name, sub.name)
|
||||
|
||||
lookup = {
|
||||
'master': master,
|
||||
'one': one,
|
||||
'two': two,
|
||||
'sub': sub,
|
||||
}
|
||||
return lookup
|
||||
|
||||
def test_move_above(self):
|
||||
collections = self.setup_collections()
|
||||
collections['sub'].move_above(collections['one'])
|
||||
self.assertNotEqual(collections['one'].name, collections['sub'].name)
|
||||
|
||||
def test_move_below(self):
|
||||
collections = self.setup_collections()
|
||||
collections['sub'].move_below(collections['one'])
|
||||
self.assertNotEqual(collections['one'].name, collections['sub'].name)
|
||||
|
||||
def test_move_into(self):
|
||||
collections = self.setup_collections()
|
||||
collections['sub'].move_into(collections['master'])
|
||||
self.assertNotEqual(collections['one'].name, collections['sub'].name)
|
||||
|
||||
|
||||
# ############################################################
|
||||
# Main - Same For All Render Layer Tests
|
||||
# ############################################################
|
||||
|
||||
if __name__ == '__main__':
|
||||
UnitTesting._extra_arguments = setup_extra_arguments(__file__)
|
||||
unittest.main()
|
Loading…
Reference in New Issue
Block a user