diff options
Diffstat (limited to 'object_collection_manager/internals.py')
-rw-r--r-- | object_collection_manager/internals.py | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/object_collection_manager/internals.py b/object_collection_manager/internals.py index 8e0c5b90..8a225443 100644 --- a/object_collection_manager/internals.py +++ b/object_collection_manager/internals.py @@ -210,46 +210,63 @@ class QCDSlots(): if self.length() > 20: break - def renumerate(self, *, depth_first=False, beginning=False): + def renumerate(self, *, beginning=False, depth_first=False, constrain=False): if beginning: self.clear_slots() self.overrides.clear() starting_laycol_name = self.get_name("1") - if starting_laycol_name: - laycol = layer_collections[starting_laycol_name]["parent"]["ptr"] - else: + if not starting_laycol_name: laycol = bpy.context.view_layer.layer_collection starting_laycol_name = laycol.children[0].name self.clear_slots() self.overrides.clear() - laycol_iter_list = [] - for laycol in laycol.children: - if laycol.name == starting_laycol_name or laycol_iter_list: - laycol_iter_list.append(laycol) + if depth_first: + parent = layer_collections[starting_laycol_name]["parent"] + x = 1 + + for laycol in layer_collections.values(): + if self.length() == 0 and starting_laycol_name != laycol["name"]: + continue + + if constrain: + if self.length(): + if laycol["parent"]["name"] == parent["name"]: + break - while laycol_iter_list: - layer_collection = laycol_iter_list.pop(0) + self.add_slot(f"{x}", laycol["name"]) - for x in range(20): - if self.contains(name=layer_collection.name): + x += 1 + + if self.length() > 20: break - if not self.contains(idx=f"{x+1}"): - self.add_slot(f"{x+1}", layer_collection.name) + else: + laycol = layer_collections[starting_laycol_name]["parent"]["ptr"] + laycol_iter_list = [] + for laycol in laycol.children: + if laycol.name == starting_laycol_name: + laycol_iter_list.append(laycol) - if depth_first: - laycol_iter_list[0:0] = list(layer_collection.children) + elif not constrain and laycol_iter_list: + laycol_iter_list.append(laycol) + + x = 1 + while laycol_iter_list: + layer_collection = laycol_iter_list.pop(0) + + self.add_slot(f"{x}", layer_collection.name) - else: laycol_iter_list.extend(list(layer_collection.children)) - if self.length() > 20: - break + x += 1 + + if self.length() > 20: + break for laycol in layer_collections.values(): |