# ---------------------------------------------------------- # File __init__.py # ---------------------------------------------------------- # Imports # Check if this add-on is being reloaded if "bpy" in locals(): # reloading .py files import bpy import importlib # from . import zs_renderscene as zsrs # importlib.reload(zsrs) # or if this is the first load of this add-on else: import bpy import json from pathlib import Path # from . import zs_renderscene as zsrs # noqa # Addon info bl_info = { "name": "ZS Stable Diffusion Connection V0.0.1", "author": "Sergiu ", "Version": (0, 0, 1), "blender": (4, 00, 0), "category": "Scene", "description": "Stable Diffusion Connection", } # ------------------------------------------------------------------- # Functions # ------------------------------------------------------------------- def load_scene(): print("Loading Scene") # load scene data # create parent collections create_parent_collections("01_Products") create_parent_collections("02_Elements") create_parent_collections("03_Shapes") # append products # append elements # append shapes # set lighting # set camera def append_objects(): print("Appending Objects") # append objects # set transforms def create_parent_collections(group_name: str): if collection_exists(group_name): remove_collection_and_objects(group_name) else: create_collection(group_name) def remove_collection_and_objects(collection_name): oldObjects = list(bpy.data.collections[collection_name].all_objects) for obj in oldObjects: bpy.data.objects.remove(obj, do_unlink=True) old_collection = bpy.data.collections[collection_name] if old_collection is not None: old_collection_names = get_subcollection_names(old_collection) else: print("Collection not found.") # print line break print("-----------------------------------------------------------------") print(old_collection_names) print("-----------------------------------------------------------------") for old_collection_name in old_collection_names: for collection in bpy.data.collections: if collection.name == old_collection_name: bpy.data.collections.remove(collection) bpy.ops.outliner.orphans_purge( do_local_ids=True, do_linked_ids=True, do_recursive=True ) def get_subcollection_names(collection): subcollection_names = [] for child in collection.children: subcollection_names.append(child.name) subcollection_names.extend(get_subcollection_names(child)) return subcollection_names # function that checks if a collection exists def collection_exists(collection_name): return collection_name in bpy.data.collections # function that creates a new collection and adds it to the scene def create_collection(collection_name): new_collection = bpy.data.collections.new(collection_name) bpy.context.scene.collection.children.link(new_collection) # ------------------------------------------------------------------- # Operators # ------------------------------------------------------------------- # load scene operator class ZSSD_OT_LoadScene(bpy.types.Operator): bl_idname = "zs_sd_loader.load_scene" bl_label = "Load Scene" bl_description = "Load Scene" def execute(self, context): load_scene() return {"FINISHED"} # parent class for panels class ZSSDPanel: bl_space_type = "VIEW_3D" bl_region_type = "UI" bl_category = "ZS SD Loader" # ------------------------------------------------------------------- # Draw # ------------------------------------------------------------------- # Panels class ZSSD_PT_Main(ZSSDPanel, bpy.types.Panel): bl_label = "SD Loader" def draw(self, context): layout = self.layout scene = context.scene col = layout.column() self.is_connected = False col.label(text="Stable Diffusion Connection") # load scene button col.operator("zs_sd_loader.load_scene", text="Load Scene") # modify after making products blender_classes = [ ZSSD_PT_Main, ZSSD_OT_LoadScene, ] def register(): # register classes for blender_class in blender_classes: bpy.utils.register_class(blender_class) # Has to be afqter class registering to correctly register property # register global properties # register list # list data # bpy.types.Scene.zs_product_list = bpy.props.CollectionProperty( # type=ZS_Product_ListItem) # current item in list def unregister(): # unregister classes for blender_class in blender_classes: bpy.utils.unregister_class(blender_class) # unregister global properties # unregister list items # del bpy.types.Scene.my_list # del bpy.types.Scene.product_product_list_index