Skip to content
Snippets Groups Projects
internals.py 2.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • from bpy.types import PropertyGroup
    from bpy.props import StringProperty
    
    layer_collections = {}
    
    collection_tree = []
    
    expanded = []
    
    max_lvl = 0
    row_index = 0
    
    def get_max_lvl():
        return max_lvl
    
    def update_col_name(self, context):
        if self.name != self.last_name:
            if self.name == '':
                self.name = self.last_name
                return
    
            if self.last_name != '':
                layer_collections[self.last_name]["ptr"].collection.name = self.name
    
                update_property_group(context)
    
            self.last_name = self.name
    
    class CMListCollection(PropertyGroup):
        name: StringProperty(update=update_col_name)
        last_name: StringProperty()
    
    
    def update_collection_tree(context):
        global max_lvl
        global row_index
        collection_tree.clear()
        layer_collections.clear()
        max_lvl = 0
        row_index = 0
    
        init_laycol_list = context.view_layer.layer_collection.children
    
        master_laycol = {"id": 0,
                         "name": context.view_layer.layer_collection.name,
                         "lvl": -1,
                         "row_index": -1,
                         "visible": True,
                         "has_children": True,
                         "expanded": True,
                         "parent": None,
                         "children": [],
                         "ptr": context.view_layer.layer_collection
                         }
    
        get_all_collections(context, init_laycol_list, master_laycol, collection_tree, visible=True)
    
    
    def get_all_collections(context, collections, parent, tree, level=0, visible=False):
        global row_index
    
        for item in collections:
            laycol = {"id": len(layer_collections) +1,
                      "name": item.name,
                      "lvl": level,
                      "row_index": row_index,
                      "visible":  visible,
                      "has_children": False,
                      "expanded": False,
                      "parent": parent,
                      "children": [],
                      "ptr": item
                      }
    
            layer_collections[item.name] = laycol
            tree.append(laycol)
    
            if len(item.children) > 0:
                global max_lvl
                max_lvl += 1
                laycol["has_children"] = True
    
                if item.name in expanded and laycol["visible"]:
                    laycol["expanded"] = True
                    get_all_collections(context, item.children, laycol, laycol["children"], level+1,  visible=True)
    
                else:
                    get_all_collections(context, item.children, laycol, laycol["children"], level+1)
    
    
    def update_property_group(context):
        update_collection_tree(context)
        context.scene.CMListCollection.clear()
        create_property_group(context, collection_tree)
    
    
    def create_property_group(context, tree):
        global in_filter
    
        for laycol in tree:
            new_cm_listitem = context.scene.CMListCollection.add()
            new_cm_listitem.name = laycol["name"]
    
            if laycol["has_children"]:
                create_property_group(context, laycol["children"])