From 4465148b22e82c859f7fe296bd8e10bf914083e3 Mon Sep 17 00:00:00 2001 From: "christophe.seux" Date: Thu, 4 Jul 2024 11:53:58 +0200 Subject: [PATCH] start refacto update --- __init__.py | 31 +- constants.py | 21 +- core/asset_library_utils.py | 54 --- core/bl_utils.py | 101 ++++- core/catalog.py | 8 + core/file_utils.py | 41 +- core/lib_utils.py | 319 ++++++++++++++++ data_type/__init__.py | 26 ++ data_type/action/__init__.py | 19 +- data_type/action/_render_preview.py | 4 +- data_type/action/operators.py | 25 +- data_type/collection/__init__.py | 2 +- data_type/file/__init__.py | 2 +- data_type/material/__init__.py | 0 data_type/material/operator.py | 107 ++++++ data_type/material/ui.py | 31 ++ data_type/node/__init__.py | 0 data_type/node/operator.py | 138 +++++++ data_type/node/ui.py | 31 ++ data_type/pose/operators.py | 2 +- operators.py | 568 +++++++++++++++++++++++++++- plugins/__init__.py | 17 - plugins/conform.py | 6 +- plugins/copy_folder.py | 4 +- plugins/kitsu.py | 6 +- plugins/library_plugin.py | 10 +- plugins/poly_haven.py | 6 +- plugins/scan_folder.py | 6 +- preferences.py | 6 +- properties.py | 84 +++- resources/asset_preview.blend | Bin 0 -> 104095 bytes resources/asset_preview.blend1 | Bin 0 -> 107777 bytes scripts/publish_asset.py | 42 ++ scripts/publish_library_assets.py | 96 +++++ ui.py | 75 +++- 35 files changed, 1700 insertions(+), 188 deletions(-) delete mode 100644 core/asset_library_utils.py create mode 100644 core/lib_utils.py create mode 100644 data_type/material/__init__.py create mode 100644 data_type/material/operator.py create mode 100644 data_type/material/ui.py create mode 100644 data_type/node/__init__.py create mode 100644 data_type/node/operator.py create mode 100644 data_type/node/ui.py create mode 100644 resources/asset_preview.blend create mode 100644 resources/asset_preview.blend1 create mode 100644 scripts/publish_asset.py create mode 100644 scripts/publish_library_assets.py diff --git a/__init__.py b/__init__.py index 505dc95..993149b 100644 --- a/__init__.py +++ b/__init__.py @@ -16,14 +16,18 @@ bl_info = { "category": "Import-Export", } +import sys -from . import operators, properties, ui, preferences +from . import operators, properties, ui, preferences, data_type +from .core.lib_utils import load_libraries, update_library_path -modules = ( + +bl_modules = ( operators, properties, ui, - preferences + preferences, + data_type ) # Reload Modules from inside Blender @@ -33,16 +37,33 @@ if "bpy" in locals(): for mod in modules: importlib.reload(mod) +import bpy + + +def load_handler(): + print('load_handler') + load_libraries() + update_library_path() + #set_env_libraries() + #bpy.ops.assetlib.set_paths(all=True) + + #if not bpy.app.background: + # bpy.ops.assetlib.bundle(blocking=False, mode='AUTO_BUNDLE') + + def register(): """Register the addon Asset Library for Blender""" - for mod in modules: + for mod in bl_modules: mod.register() + + + bpy.app.timers.register(load_handler, first_interval=1) def unregister(): """Unregister the addon Asset Library for Blender""" - for mod in reversed(modules): + for mod in reversed(bl_modules): mod.unregister() \ No newline at end of file diff --git a/constants.py b/constants.py index b5db4bb..3103b8c 100644 --- a/constants.py +++ b/constants.py @@ -3,10 +3,18 @@ import bpy DATA_TYPE_ITEMS = [ - ("ACTION", "Action", "", "ACTION", 0), - ("COLLECTION", "Collection", "", "OUTLINER_OB_GROUP_INSTANCE", 1), - ("FILE", "File", "", "FILE", 2) + ("NodeTree", "Node Group", "", "NODETREE", 0), + ("Material", "Material", "", "MATERIAL", 1), + ("Object", "Object", "", "OBJECT_DATA", 2), + ("Action", "Action", "", "ACTION", 3), + ("Collection", "Collection", "", "OUTLINER_OB_GROUP_INSTANCE", 4), + ("File", "File", "", "FILE", 5) ] + +DATA_TYPE_GEO_ITEMS = [DATA_TYPE_ITEMS[0], DATA_TYPE_ITEMS[2]] +DATA_TYPE_SHADING_ITEMS = [DATA_TYPE_ITEMS[0], DATA_TYPE_ITEMS[1]] + +CATALOG_ITEMS = {} DATA_TYPES = [i[0] for i in DATA_TYPE_ITEMS] ICONS = {identifier: icon for identifier, name, description, icon, number in DATA_TYPE_ITEMS} @@ -15,9 +23,14 @@ MODULE_DIR = Path(__file__).parent RESOURCES_DIR = MODULE_DIR / 'resources' PLUGINS_DIR = MODULE_DIR / 'plugins' -PLUGINS = set() +PLUGINS = {} PLUGINS_ITEMS = [('NONE', 'None', '', 0)] +LIB_DIR = MODULE_DIR / 'libs' +LIB_ITEMS = [] + +SCRIPTS_DIR = MODULE_DIR / 'scripts' + PREVIEW_ASSETS_SCRIPT = MODULE_DIR / 'common' / 'preview_assets.py' #ADD_ASSET_DICT = {} diff --git a/core/asset_library_utils.py b/core/asset_library_utils.py deleted file mode 100644 index c1c7560..0000000 --- a/core/asset_library_utils.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Util function for this addon -""" - -import bpy -from . bl_utils import get_addon_prefs - - -def thumbnail_blend_file(input_blend, output_img): - input_blend = Path(input_blend).resolve() - output_img = Path(output_img).resolve() - - print(f'Thumbnailing {input_blend} to {output_img}') - blender_thumbnailer = Path(bpy.app.binary_path).parent / 'blender-thumbnailer' - - output_img.parent.mkdir(exist_ok=True, parents=True) - - subprocess.call([blender_thumbnailer, str(input_blend), str(output_img)]) - - success = output_img.exists() - - if not success: - empty_preview = RESOURCES_DIR / 'empty_preview.png' - shutil.copy(str(empty_preview), str(output_img)) - - return success - - -def get_active_library(): - '''Get the pref library properties from the active library of the asset browser''' - prefs = get_addon_prefs() - lib_ref = bpy.context.space_data.params.asset_library_reference - - #Check for merged library - for l in prefs.libraries: - if l.name == lib_ref: - return l - - -def update_library_path(self, context): - """Removing all asset libraries and recreate them""" - - addon_prefs = get_addon_prefs() - libs = context.preferences.filepaths.asset_libraries - - for i, lib in reversed(list(enumerate(libs))): - if (addon_lib := addon_prefs.libraries.get(lib.name)) and addon_lib.path == lib.path: - bpy.ops.preferences.asset_library_remove(index=i) - - for addon_lib in addon_prefs.libraries: - if not addon_lib.use: - continue - bpy.ops.preferences.asset_library_add(directory=str(addon_lib.path)) - libs[-1].name = addon_lib.name \ No newline at end of file diff --git a/core/bl_utils.py b/core/bl_utils.py index 5e8358c..074dce2 100644 --- a/core/bl_utils.py +++ b/core/bl_utils.py @@ -2,7 +2,7 @@ """ Generic Blender functions """ - +import json from pathlib import Path from fnmatch import fnmatch from typing import Any, List, Iterable, Optional, Tuple @@ -15,6 +15,8 @@ from bpy_extras import asset_utils from os.path import abspath import subprocess +from .file_utils import norm_str + class attr_set(): '''Receive a list of tuple [(data_path, "attribute" [, wanted value)] ] @@ -82,6 +84,9 @@ def get_viewport(): screen = bpy.context.screen areas = [a for a in screen.areas if a.type == 'VIEW_3D'] + if not areas: + return + areas.sort(key=lambda x : x.width*x.height) return areas[-1] @@ -216,7 +221,7 @@ def norm_arg(arg_name, format=str.lower, prefix='--', separator='-'): return prefix + arg_name -def get_bl_cmd(blender=None, background=False, focus=True, blendfile=None, script=None, **kargs): +def get_bl_cmd(blender=None, background=False, factory_startup=False, focus=True, blendfile=None, script=None, **kargs): cmd = [str(blender)] if blender else [bpy.app.binary_path] if background: @@ -228,6 +233,9 @@ def get_bl_cmd(blender=None, background=False, focus=True, blendfile=None, scrip cmd += ['--python-use-system-env'] + if factory_startup: + cmd += ['--factory-startup'] + if blendfile: cmd += [str(blendfile)] @@ -347,7 +355,10 @@ def split_path(path) : return bone_name, prop_name - +def get_asset_type(asset_type): + data_types = { p.fixed_type.identifier: p.identifier for p in + bpy.types.BlendData.bl_rna.properties if hasattr(p, 'fixed_type')} + return data_types[asset_type] def load_datablocks(src, names=None, type='objects', link=True, expr=None, assets_only=False) -> list: @@ -482,4 +493,86 @@ def get_object_libraries(ob): filepaths.append(absolute_filepath) - return filepaths \ No newline at end of file + return filepaths + + +def clean_name(name): + if re.match(r'(.*)\.\d{3}$', name): + return name[:-4] + return name + + +def is_node_groups_duplicate(node_groups): + node_group_types = sorted([n.type for n in node_groups[0].nodes]) + return all( sorted([n.type for n in ng.nodes]) == + node_group_types for ng in node_groups[1:]) + + +def is_images_duplicate(images): + return all( img.filepath == images[0].filepath for image in images) + + +def is_materials_duplicate(materials): + node_group_types = sorted([n.type for n in materials[0].node_tree.nodes]) + return all( sorted([n.type for n in mat.node_tree.nodes]) == + node_group_types for mat in materials[1:]) + + +def merge_datablock_duplicates(datablocks, blend_data, force=False): + """Merging materials, node_groups or images based on name .001, .002""" + + failed = [] + merged = [] + + datablocks = list(datablocks) + + #blend_data = get_asset_type(datablocks[0].bl_rna.identifier) + if blend_data == 'materials': + is_datablock_duplicate = is_materials_duplicate + elif blend_data == 'node_groups': + is_datablock_duplicate = is_node_groups_duplicate + elif blend_data == 'images': + is_datablock_duplicate = is_images_duplicate + else: + raise Exception(f'Type, {blend_data} not supported') + + # Group by name + groups = {} + for datablock in images: + groups.setdefault(clean_name(datablock.name), []).append(datablock) + + for datablock in blend_data: + name = clean_name(datablock.name) + if name in groups and datablock not in groups[name]: + groups[name].append(datablock) + + print("\nMerge Duplicate Datablocks...") + + for group in groups.values(): + if len(group) == 1: + continue + + if not force: + datablocks.sort(key=lambda x : x.name, reverse=True) + + for datablock in datablocks[1:]: + is_duplicate = is_datablock_duplicate((datablock, datablocks[0])) + + if not is_duplicate and not force: + failed.append((datablock.name, datablocks[0].name)) + print(f'Cannot merge Datablock {datablocks.name} with {datablocks[0].name} they are different') + continue + + merged.append((datablock.name, datablocks[0].name)) + print(f'Merge Datablock {datablock.name} into {datablocks[0].name}') + + datablock.user_remap(datablocks[0]) + datablocks.remove(datablock) + blend_data.remove(datablock) + + # Rename groups if it has no duplicate left + for datablocks in groups.values(): + if len(datablocks) == 1 and not datablocks[0].library: + datablocks[0].name = clean_name(datablocks[0].name) + + return merged, failed \ No newline at end of file diff --git a/core/catalog.py b/core/catalog.py index 3bdcd68..0701dfe 100644 --- a/core/catalog.py +++ b/core/catalog.py @@ -2,6 +2,14 @@ from pathlib import Path import uuid import bpy +from .file_utils import cache + +@cache(1) +def read_catalog(library_path): + catalog = Catalog(library_path) + catalog.read() + + return catalog class CatalogItem: diff --git a/core/file_utils.py b/core/file_utils.py index 3286202..56d8a7c 100644 --- a/core/file_utils.py +++ b/core/file_utils.py @@ -12,9 +12,12 @@ from pathlib import Path import importlib import sys import shutil +from functools import wraps +from time import perf_counter import contextlib + @contextlib.contextmanager def cd(path): """Changes working directory and returns to previous on exit.""" @@ -25,6 +28,7 @@ def cd(path): finally: os.chdir(prev_cwd) + def install_module(module_name, package_name=None): '''Install a python module with pip or return it if already installed''' try: @@ -39,6 +43,7 @@ def install_module(module_name, package_name=None): return module + def import_module_from_path(path): from importlib import util @@ -54,6 +59,7 @@ def import_module_from_path(path): print(f'Cannot import file {path}') print(e) + def norm_str(string, separator='_', format=str.lower, padding=0): string = str(string) string = string.replace('_', ' ') @@ -73,6 +79,7 @@ def norm_str(string, separator='_', format=str.lower, padding=0): return string + def remove_version(filepath): pattern = '_v[0-9]+\.' search = re.search(pattern, filepath) @@ -82,12 +89,14 @@ def remove_version(filepath): return Path(filepath).name + def is_exclude(name, patterns) -> bool: # from fnmatch import fnmatch if not isinstance(patterns, (list,tuple)) : patterns = [patterns] return any([fnmatch(name, p) for p in patterns]) + def get_last_files(root, pattern=r'_v\d{3}\.\w+', only_matching=False, ex_file=None, ex_dir=None, keep=1, verbose=False) -> list: '''Recursively get last(s) file(s) (when there is multiple versions) in passed directory root -> str: Filepath of the folder to scan. @@ -139,6 +148,7 @@ def get_last_files(root, pattern=r'_v\d{3}\.\w+', only_matching=False, ex_file=N return sorted(files) + def copy_file(src, dst, only_new=False, only_recent=False): if dst.exists(): if only_new: @@ -153,6 +163,7 @@ def copy_file(src, dst, only_new=False, only_recent=False): else: subprocess.call(['cp', str(src), str(dst)]) + def copy_dir(src, dst, only_new=False, only_recent=False, excludes=['.*'], includes=[]): src, dst = Path(src), Path(dst) @@ -203,6 +214,7 @@ def open_file(filepath, select=False): cmd += [str(filepath)] subprocess.Popen(cmd) + def open_blender_file(filepath=None): filepath = filepath or bpy.data.filepath @@ -217,6 +229,32 @@ def open_blender_file(filepath=None): subprocess.Popen(cmd) + +def cache(timeout): + _cache = {} + + def decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + current_time = perf_counter() + cache_key = (*args, *kwargs.items()) # Assuming the first argument is the file path + + # Check if the cache is valid + if cache_key in _cache: + cached_content, cache_time = _cache[cache_key] + if (current_time - cache_time) < timeout: + + return cached_content + + # Execute the function and update the cache + result = func(*args, **kwargs) + _cache[cache_key] = (result, current_time) + return result + + return wrapper + return decorator + + def read_file(path): '''Read a file with an extension in (json, yaml, yml, txt)''' @@ -255,6 +293,7 @@ def read_file(path): return data + def write_file(path, data, indent=4): '''Read a file with an extension in (json, yaml, yml, text)''' @@ -315,4 +354,4 @@ def synchronize(src, dst, only_new=False, only_recent=False, clear=False): except Exception as e: print(e) - \ No newline at end of file + diff --git a/core/lib_utils.py b/core/lib_utils.py new file mode 100644 index 0000000..636f524 --- /dev/null +++ b/core/lib_utils.py @@ -0,0 +1,319 @@ +""" +Util function for this addon +""" + +import os +from pathlib import Path +import inspect +from datetime import datetime +from time import perf_counter +import platform + +import bpy +from .catalog import Catalog, read_catalog +from .bl_utils import get_addon_prefs, get_asset_type +from .file_utils import read_file, write_file, cache, import_module_from_path + + +def thumbnail_blend_file(input_blend, output_img): + input_blend = Path(input_blend).resolve() + output_img = Path(output_img).resolve() + + print(f'Thumbnailing {input_blend} to {output_img}') + blender_thumbnailer = Path(bpy.app.binary_path).parent / 'blender-thumbnailer' + + output_img.parent.mkdir(exist_ok=True, parents=True) + + subprocess.call([blender_thumbnailer, str(input_blend), str(output_img)]) + + success = output_img.exists() + + if not success: + empty_preview = RESOURCES_DIR / 'empty_preview.png' + shutil.copy(str(empty_preview), str(output_img)) + + return success + + +def get_active_library(): + '''Get the pref library properties from the active library of the asset browser''' + prefs = get_addon_prefs() + lib_ref = bpy.context.space_data.params.asset_library_reference + + #Check for merged library + for l in prefs.libraries: + if l.name == lib_ref: + return l + + +def update_library_path(): + """Removing all asset libraries and recreate them""" + + print("update_library_path") + + addon_prefs = get_addon_prefs() + libs = bpy.context.preferences.filepaths.asset_libraries + + for i, lib in reversed(list(enumerate(libs))): + if (addon_lib := addon_prefs.libraries.get(lib.name)): # and addon_lib.path == lib.path + bpy.ops.preferences.asset_library_remove(index=i) + + for addon_lib in addon_prefs.libraries: + if not addon_lib.use: + continue + bpy.ops.preferences.asset_library_add(directory=str(addon_lib.path)) + libs[-1].name = addon_lib.name + + +def load_library_config(config_path): + """"Load library prefs from config path""" + if not config_path: + return [] + + config_path = Path(config_path) + + if not config_path.exists(): + print(f'Config {config_path} not exist') + return [] + + prefs = get_addon_prefs() + + libs = [] + for lib_dict in read_file(config_path): + lib = prefs.libraries.add() + lib.is_user = False + lib.set_dict(lib_dict) + libs.append(lib) + + return libs + + +def load_libraries(): + """"Load library prefs from config pref and env""" + prefs = get_addon_prefs() + + bl_libs = bpy.context.preferences.filepaths.asset_libraries + for i, bl_lib in reversed(list(enumerate(bl_libs))): + addon_lib = prefs.libraries.get(bl_lib.name) + if not addon_lib or addon_lib.is_user: + continue + + bpy.ops.preferences.asset_library_remove(index=i) + + # Remove lib from addons preferences + for i, addon_lib in reversed(list(enumerate(prefs.libraries))): + if not addon_lib.is_user: + prefs.libraries.remove(i) + + env_config = os.getenv('ASSET_LIBRARY_CONFIG') + libs = load_library_config(env_config) + load_library_config(prefs.config_path) + + return libs + + +def clear_time_tag(asset): + # Created time tag + for tag in list(asset.asset_data.tags): + try: + datetime.strptime(tag.name, "%Y-%m-%d %H:%M") + asset.asset_data.tags.remove(tag) + except ValueError: + continue + + +def create_time_tag(asset): + asset.asset_data.tags.new(datetime.now().strftime("%Y-%m-%d %H:%M")) + + +def version_file(path, save_versions=3): + if path.exists(): + for i in range(save_versions): + version = save_versions - i + version_path = path.with_suffix(f'.blend{version}') + if not version_path.exists(): + continue + if i == 0: + version_path.unlink() + else: + version_path.rename(path.with_suffix(f'.blend{version+1}')) + + path.rename(path.with_suffix(f'.blend1')) + + +def list_datablocks(blend_file, asset_types={"objects", "materials", "node_groups"}): + blend_data = {} + with bpy.data.temp_data(filepath=str(blend_file)) as temp_data: + with temp_data.libraries.load(str(blend_file), link=True) as (data_from, data_to): + for asset_type in asset_types: + blend_data[asset_type] = getattr(data_from, asset_type) + + return blend_data + + +def get_asset_data(blend_file, asset_type, name, preview=False): + with bpy.data.temp_data(filepath=str(blend_file)) as temp_data: + with temp_data.libraries.load(str(blend_file), link=True) as (data_from, data_to): + if name not in getattr(data_from, asset_type): + return + setattr(data_to, asset_type, [name]) + + if assets := getattr(data_to, asset_type): + asset = assets[0] + asset_data = asset.asset_data + + data = { + "description": asset_data.description, + "catalog_id": asset_data.catalog_id, + "catalog_simple_name": asset_data.catalog_simple_name, + "path": blend_file, + "tags": list(asset_data.tags.keys()) + } + + if asset.preview and preview: + image_size = asset.preview.image_size + preview_pixels = [0] * image_size[0] * image_size[1] * 4 + asset.preview.image_pixels_float.foreach_get(preview_pixels) + + data["preview_pixels"] = preview_pixels + data["preview_size"] = list(image_size) + + return data + + +def find_asset_data(name, asset_type, preview=False): + """Find info about an asset found in library""" + + bl_libs = bpy.context.preferences.filepaths.asset_libraries + + # First search for a blend with the same name + for bl_lib in bl_libs: + for blend_file in Path(bl_lib.path).glob(f"**/{name}.blend"): + if asset_data := get_asset_data(blend_file, asset_type, name, preview=preview): + asset_data['library'] = bl_lib + return asset_data + + # for bl_lib in bl_libs: + # for blend_file in Path(bl_lib.path).glob("**/*.blend"): + # if asset_data := get_asset_data(blend_file, asset_type, name): + # return bl_lib, asset_data + + +def get_filepath_library(filepath): + for lib in bpy.context.preferences.filepaths.asset_libraries: + if bpy.path.is_subdir(filepath, lib.path): + return lib + + +def get_asset_catalog_path(asset, fallback=''): + if asset.local_id: + path = Path(bpy.data.filepath).parent + + elif (lib := get_filepath_library(asset.full_library_path)): + if lib: + path = lib.path + else: + return fallback + + if not (catalog := read_catalog(path)): + return fallback + + if not (catalog_item := catalog.get(id=asset.metadata.catalog_id, fallback=fallback)): + return fallback + + return catalog_item.path + + +def get_asset_full_path(asset): + """Get a path that represent all informations about an asset path/type/catalog/name""" + + asset_path = asset.full_library_path + if asset.local_id: + asset_path = f'{bpy.data.filepath}/{asset_path}' + + asset_type, asset_name = Path(asset.full_path).parts[-2:] + asset_type = get_asset_type(asset_type) + + return Path(asset_path, asset_type, asset_name).as_posix() + + +def get_asset_source(datablock): + weak_reference = datablock.library_weak_reference + if isinstance(datablock, bpy.types.Object) and datablock.data: + weak_reference = datablock.data.library_weak_reference + + if weak_reference and (source_path := Path(weak_reference.filepath)).exists(): + return source_path + + asset_libraries = context.preferences.filepaths.asset_libraries + for asset_library in asset_libraries: + library_path = Path(asset_library.path) + if blend_files := list(library_path.glob(f"**/{datablock.name}.blend")): + return + + return datablock.library_weak_reference + + +def get_blender_cache_dir(): + if platform.system() == 'Linux': + cache_folder = os.path.expandvars('$HOME/.cache/blender') + elif platform.system() == 'Windows': + cache_folder = os.path.expanduser('%USERPROFILE%/AppData/Local/Blender Foundation/Blender') + elif platform.system() == 'Darwin': + cache_folder = '/Library/Caches/Blender' + + return Path(cache_folder) + + +def find_asset_source(library_map, asset_type, name): + return next( (l for l, blend_data in sorted(library_map.items(), key=lambda x: x[1]['st_mtime'], reverse=True) + if name in blend_data['node_groups']), None) + + +def asset_library_map(): + """"Get a mapping of all datablocks of the blend files from the libraries""" + asset_libraries = bpy.context.preferences.filepaths.asset_libraries + + cache_file = get_blender_cache_dir() / 'asset-library.json' + cache = None + if cache_file.exists(): + cache = read_file(cache_file) + + if cache is None: + cache = {} + + file_keys = [] + + for asset_library in asset_libraries: + library_path = Path(asset_library.path) + + for bl_file in library_path.glob("**/*.blend"): + file_keys.append(file_key := bl_file.as_posix()) + + st_mtime = bl_file.stat().st_mtime + if (bl_cache := cache.get(file_key)) and bl_cache.get('st_mtime') >= st_mtime: + continue + + datablocks = list_datablocks(bl_file) + cache[file_key] = dict(st_mtime=st_mtime, **datablocks) + + # Remove map when the blend not exists anymore + for file_key in list(cache.keys()): + if file_key not in file_keys: + del cache[file_key] + + write_file(cache_file, cache) + + return cache + +# print(perf_counter() - t0) + + # t0 = perf_counter() + # for asset_library in asset_libraries: + # library_path = Path(asset_library.path) + + # for blend_file in library_path.glob("**/*.blend"): + # with bpy.data.libraries.load(str(blend_file), link=True) as (data_from, data_to): + # node_groups = data_from.node_groups + # print(node_groups) + + # print(perf_counter() - t0) \ No newline at end of file diff --git a/data_type/__init__.py b/data_type/__init__.py index e69de29..b5d58d4 100644 --- a/data_type/__init__.py +++ b/data_type/__init__.py @@ -0,0 +1,26 @@ + +from . node import ui as node_ui +from . node import operator as node_operator +from . material import ui as material_ui +from . material import operator as material_operator + +bl_modules = ( + node_ui, + node_operator, + material_ui, + material_operator +) + + +def register(): + """Register the addon Asset Library for Blender""" + + for mod in bl_modules: + mod.register() + + +def unregister(): + """Unregister the addon Asset Library for Blender""" + + for mod in reversed(bl_modules): + mod.unregister() \ No newline at end of file diff --git a/data_type/action/__init__.py b/data_type/action/__init__.py index b55d078..48f83ee 100644 --- a/data_type/action/__init__.py +++ b/data_type/action/__init__.py @@ -1,26 +1,9 @@ -from asset_library.action import ( - gui, +from asset_library.data_type.action import ( keymaps, - clear_asset, - concat_preview, operators, - properties, - rename_pose, - #render_preview ) -if 'bpy' in locals(): - import importlib - - importlib.reload(gui) - importlib.reload(keymaps) - importlib.reload(clear_asset) - importlib.reload(concat_preview) - importlib.reload(operators) - importlib.reload(properties) - importlib.reload(rename_pose) - #importlib.reload(render_preview) import bpy diff --git a/data_type/action/_render_preview.py b/data_type/action/_render_preview.py index c5436d7..2ca9e1f 100644 --- a/data_type/action/_render_preview.py +++ b/data_type/action/_render_preview.py @@ -4,9 +4,9 @@ import sys from pathlib import Path #sys.path.append(str(Path(__file__).parents[3])) -from asset_library.action.concat_preview import mosaic_export +from asset_library.data_type.action.concat_preview import mosaic_export from asset_library.common.file_utils import open_file -from asset_library.action.functions import reset_bone, get_keyframes +from asset_library.data_type.action.functions import reset_bone, get_keyframes from asset_library.common.functions import read_catalog import bpy diff --git a/data_type/action/operators.py b/data_type/action/operators.py index 0e2ed30..56bb85b 100644 --- a/data_type/action/operators.py +++ b/data_type/action/operators.py @@ -34,7 +34,7 @@ from asset_library.pose.pose_usage import( flip_side_name ) -from asset_library.action.functions import( +from asset_library.data_type.action.functions import( apply_anim, append_action, clean_action, @@ -43,29 +43,16 @@ from asset_library.action.functions import( conform_action ) -from bpy.props import ( - BoolProperty, - CollectionProperty, - EnumProperty, - PointerProperty, - StringProperty, - IntProperty -) +from bpy.props import (BoolProperty, CollectionProperty, EnumProperty, + PointerProperty, StringProperty, IntProperty) -from bpy.types import ( - Action, - Context, - Event, - FileSelectEntry, - Object, - Operator, - PropertyGroup, -) +from bpy.types import (Action, Context, Event, FileSelectEntry, Object, + Operator, PropertyGroup) from bpy_extras import asset_utils from bpy_extras.io_utils import ExportHelper, ImportHelper -from asset_library.action.functions import ( +from asset_library.data_type.action.functions import ( is_pose, get_marker, get_keyframes, diff --git a/data_type/collection/__init__.py b/data_type/collection/__init__.py index 9154052..11d9580 100644 --- a/data_type/collection/__init__.py +++ b/data_type/collection/__init__.py @@ -1,5 +1,5 @@ -from asset_library.collection import ( +from asset_library.data_type.collection import ( gui, operators, keymaps, diff --git a/data_type/file/__init__.py b/data_type/file/__init__.py index 1eed34c..b479ff9 100644 --- a/data_type/file/__init__.py +++ b/data_type/file/__init__.py @@ -1,5 +1,5 @@ -from asset_library.file import ( +from asset_library.data_type.file import ( operators, gui, keymaps) if 'bpy' in locals(): diff --git a/data_type/material/__init__.py b/data_type/material/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data_type/material/operator.py b/data_type/material/operator.py new file mode 100644 index 0000000..d87fcd1 --- /dev/null +++ b/data_type/material/operator.py @@ -0,0 +1,107 @@ + +from pathlib import Path +from datetime import datetime +import subprocess + +from ...core.bl_utils import get_bl_cmd +from ...core.lib_utils import get_asset_data +from ...core.catalog import read_catalog +from ... import constants + +import bpy +from bpy.types import Operator +from bpy.props import StringProperty, EnumProperty + + +class ASSETLIB_OT_update_materials(Operator): + bl_idname = 'assetlibrary.update_materials' + bl_label = 'Update node' + bl_options = {"REGISTER", "UNDO"} + + selection : EnumProperty(items=[(s, s.title(), '') for s in ('ALL', 'OBJECT', 'CURRENT')], default="CURRENT") + + @classmethod + def poll(cls, context): + return context.object and context.object.active_material + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def execute(self, context): + asset_libraries = context.preferences.filepaths.asset_libraries + + ob = bpy.context.object + ntree = context.space_data.edit_tree + ntree_name = ntree.name + new_ntree = None + + if self.selection == 'OBJECT': + materials = [s.material for s in ob.material_slots if s.material] + elif self.selection == 'CURRENT': + materials = [ob.active_material] + else: + materials = list(bpy.data.materials) + + mat_names = set(m.name for m in materials) + + for asset_library in asset_libraries: + library_path = Path(asset_library.path) + blend_files = [fp for fp in library_path.glob("**/*.blend") if fp.is_file()] + + images = list(bpy.data.images) + materials = list(bpy.data.materials)# Storing original materials to compare with imported ones + + link = (asset_library.import_method == 'LINK') + for blend_file in blend_files: + print(blend_file) + with bpy.data.libraries.load(str(blend_file), assets_only=True, link=link) as (data_from, data_to): + + import_materials = [n for n in data_from.materials if n in mat_names] + print("import_materials", import_materials) + data_to.materials = import_materials + + mat_names -= set(import_materials) # Store already updated nodes + + new_materials = set(m for m in bpy.data.materials if m not in materials) + new_images = set(i for i in bpy.data.images if i not in images) + # + + for new_mat in new_materials: + new_mat_name = new_mat.library_weak_reference.id_name[2:] + local_mat = next((m for m in bpy.data.materials if m.name == new_mat_name and m != new_mat), None) + + if not local_mat: + print(f'No local material {new_mat_name}') + continue + + print(f'Merge material {local_mat.name} into {new_mat.name}') + + local_mat.user_remap(new_mat) + bpy.data.materials.remove(local_mat) + + if not new_mat.library: + new_mat.name = new_mat_name + new_mat.asset_clear() + + + return {'FINISHED'} + + + def draw(self, context): + layout = self.layout + layout.prop(self, "selection", expand=True) + + +bl_classes = ( + ASSETLIB_OT_update_materials, +) + + +def register(): + for bl_class in bl_classes: + bpy.utils.register_class(bl_class) + + +def unregister(): + for bl_class in reversed(bl_classes): + bpy.utils.unregister_class(bl_class) diff --git a/data_type/material/ui.py b/data_type/material/ui.py new file mode 100644 index 0000000..cd87ec2 --- /dev/null +++ b/data_type/material/ui.py @@ -0,0 +1,31 @@ +""" +This module contains blender UI elements in the node editor + +:author: Autour de Minuit +:maintainers: Christophe Seux +:date: 2024 +""" + +import bpy + + + +def draw_menu(self, context): + layout = self.layout + + row = layout.row(align=False) + layout.operator('assetlibrary.update_materials', text='Update Materials', icon='MATERIAL') + + +def register(): + # for c in classes: + # bpy.utils.register_class(c) + + bpy.types.ASSETLIB_MT_node_editor.append(draw_menu) + + +def unregister(): + # for c in reversed(classes): + # bpy.utils.unregister_class(c) + + bpy.types.ASSETLIB_MT_node_editor.remove(draw_menu) diff --git a/data_type/node/__init__.py b/data_type/node/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data_type/node/operator.py b/data_type/node/operator.py new file mode 100644 index 0000000..c4866c4 --- /dev/null +++ b/data_type/node/operator.py @@ -0,0 +1,138 @@ + +from pathlib import Path +from datetime import datetime +import subprocess + +from ...core.bl_utils import get_bl_cmd +from ...core.lib_utils import get_asset_data, asset_library_map +from ...core.catalog import read_catalog +from ... import constants + +import bpy +from bpy.types import Operator +from bpy.props import StringProperty, EnumProperty + + +class ASSETLIB_OT_update_nodes(Operator): + bl_idname = 'assetlibrary.update_nodes' + bl_label = 'Update node' + bl_options = {"REGISTER", "UNDO"} + + selection : EnumProperty(items=[(s, s.title(), '') for s in ('ALL', 'SELECTED', 'CURRENT')], default="CURRENT", name='All Nodes') + + @classmethod + def poll(cls, context): + return context.space_data.edit_tree + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def execute(self, context): + asset_libraries = context.preferences.filepaths.asset_libraries + + ntree = context.space_data.edit_tree + ntree_name = ntree.name + new_ntree = None + + if self.selection == 'SELECTED': + nodes = [ n.node_tree for n in context.space_data.edit_tree.nodes + if n.type == "GROUP" and n.select] + elif self.selection == 'CURRENT': + active_node = context.space_data.edit_tree + nodes = [active_node] + else: + nodes = list(bpy.data.node_groups) + + library_map = asset_library_map() + + #node_groups = list(bpy.data.node_groups) + #images = list(bpy.data.images) + #materials = list(bpy.data.materials) + + with remap_datablock_duplicates(): + + for node in nodes: + blend_file = find_asset_source(library_map, 'node_groups', node.name) + link = bool(node.library) + + with bpy.data.libraries.load(str(blend_file), link=link) as (data_from, data_to): + data_to.node_groups = [node.name] + + for new_node_group in new_node_groups: + new_node_group_name = new_node_group.library_weak_reference.id_name[2:] + local_node_group = next((n for n in bpy.data.node_groups if n.name == new_node_group_name and n != new_node_group), None) + + if not local_node_group: + print(f'No local node_group {new_node_group_name}') + continue + + print(f'Merge node {local_node_group.name} into {new_node_group.name}') + + local_node_group.user_remap(new_node_group) + new_node_group.interface_update(context) + bpy.data.node_groups.remove(local_node_group) + + new_node_group.name = new_node_group_name + new_node_group.asset_clear() + + + node_names = set(n.name for n in nodes) + + for asset_library in asset_libraries: + library_path = Path(asset_library.path) + blend_files = [fp for fp in library_path.glob("**/*.blend") if fp.is_file()] + + node_groups = list(bpy.data.node_groups)# Storing original node_geoup to compare with imported + + link = (asset_library.import_method == 'LINK') + for blend_file in blend_files: + print(blend_file) + with bpy.data.libraries.load(str(blend_file), assets_only=True, link=link) as (data_from, data_to): + + import_node_groups = [n for n in data_from.node_groups if n in node_names] + print("import_node_groups", import_node_groups) + data_to.node_groups = import_node_groups + + node_names -= set(import_node_groups) # Store already updated nodes + + new_node_groups = set(n for n in bpy.data.node_groups if n not in node_groups) + + for new_node_group in new_node_groups: + new_node_group_name = new_node_group.library_weak_reference.id_name[2:] + local_node_group = next((n for n in bpy.data.node_groups if n.name == new_node_group_name and n != new_node_group), None) + + if not local_node_group: + print(f'No local node_group {new_node_group_name}') + continue + + print(f'Merge node {local_node_group.name} into {new_node_group.name}') + + local_node_group.user_remap(new_node_group) + new_node_group.interface_update(context) + bpy.data.node_groups.remove(local_node_group) + + new_node_group.name = new_node_group_name + new_node_group.asset_clear() + + + return {'FINISHED'} + + + def draw(self, context): + layout = self.layout + layout.prop(self, "selection", expand=True) + + +bl_classes = ( + ASSETLIB_OT_update_nodes, +) + + +def register(): + for bl_class in bl_classes: + bpy.utils.register_class(bl_class) + + +def unregister(): + for bl_class in reversed(bl_classes): + bpy.utils.unregister_class(bl_class) diff --git a/data_type/node/ui.py b/data_type/node/ui.py new file mode 100644 index 0000000..60ae1f2 --- /dev/null +++ b/data_type/node/ui.py @@ -0,0 +1,31 @@ +""" +This module contains blender UI elements in the node editor + +:author: Autour de Minuit +:maintainers: Christophe Seux +:date: 2024 +""" + +import bpy + + + +def draw_menu(self, context): + layout = self.layout + + row = layout.row(align=False) + layout.operator('assetlibrary.update_nodes', text='Update Node Group', icon='IMPORT') + + +def register(): + # for c in classes: + # bpy.utils.register_class(c) + + bpy.types.ASSETLIB_MT_node_editor.append(draw_menu) + + +def unregister(): + # for c in reversed(classes): + # bpy.utils.unregister_class(c) + + bpy.types.ASSETLIB_MT_node_editor.remove(draw_menu) diff --git a/data_type/pose/operators.py b/data_type/pose/operators.py index b5dbfd4..a11062f 100644 --- a/data_type/pose/operators.py +++ b/data_type/pose/operators.py @@ -35,7 +35,7 @@ from bpy.types import ( from bpy_extras import asset_utils from bpy_extras.io_utils import ExportHelper, ImportHelper -from asset_library.action.functions import ( +from asset_library.data_type.action.functions import ( get_marker, get_keyframes, ) diff --git a/operators.py b/operators.py index c133d60..2aa16c3 100644 --- a/operators.py +++ b/operators.py @@ -1,10 +1,20 @@ import importlib +from pathlib import Path import bpy +import subprocess +import gpu +from gpu_extras.batch import batch_for_shader +from mathutils import Vector +from math import sqrt -from bpy.types import Operator -from bpy.props import (BoolProperty, EnumProperty, StringProperty, IntProperty) -from .core.bl_utils import get_addon_prefs, unique_name +from bpy_extras.io_utils import ExportHelper +from bpy.types import Operator, PropertyGroup +from bpy.props import (BoolProperty, EnumProperty, StringProperty, IntProperty, CollectionProperty) +from .core.catalog import read_catalog +from .core.bl_utils import get_addon_prefs, unique_name, get_asset_type, get_bl_cmd, get_viewport +from .core.lib_utils import get_asset_full_path, get_asset_catalog_path, find_asset_data, clear_time_tag +from . import constants class ASSETLIB_OT_reload_addon(Operator): @@ -131,13 +141,559 @@ class ASSETLIB_OT_synchronize(Operator): subprocess.Popen(cmd) return {'FINISHED'} + +class ASSETLIB_OT_save_asset_preview(Operator): + bl_idname = "assetlibrary.save_asset_preview" + bl_options = {"REGISTER", "UNDO"} + bl_label = 'Save Asset Preview' + bl_description = 'Save Asset Preview' + + filepath: StringProperty( + name="File Path", + description="Filepath used for exporting the image", + subtype='FILE_PATH', + ) + check_existing: BoolProperty( + name="Check Existing", + description="Check and warn on overwriting existing files", + default=True, + options={'HIDDEN'}, + ) + + quality: IntProperty(subtype='PERCENTAGE', min=0, max=100, default=90, name='Quality') + + def execute(self, context): + prefs = get_addon_prefs() + + preview = None + + if context.asset.local_id: + preview = context.asset.local_id.preview + width, height = preview.image_size + pixels = [0] * width * height * 4 + preview.image_pixels_float.foreach_get(pixels) + + else: + asset_path = context.asset.full_library_path + asset_type, asset_name = Path(context.asset.full_path).parts[-2:] + asset_type = get_asset_type(asset_type) + + with bpy.data.temp_data(filepath=asset_path) as temp_data: + with temp_data.libraries.load(asset_path, assets_only=True, link=True) as (data_from, data_to): + setattr(data_to, asset_type, [asset_name]) + if assets := getattr(data_to, asset_type): + preview = assets[0].preview + width, height = preview.image_size + # Has to read pixel in the with statement for it to work + pixels = [0] * width * height * 4 + preview.image_pixels_float.foreach_get(pixels) + + if not preview: + self.report({'ERROR'}, 'Cannot retrieve preview') + return {"CANCELLED"} + + image = bpy.data.images.new('Asset Preview', width=width, height=height, alpha=True) + image.pixels.foreach_set(pixels) + try: + image.save(filepath=self.filepath, quality=self.quality) + except Exception as e: + print(e) + self.report({'ERROR'}, 'Cannot write preview') + return {"CANCELLED"} + + return {'FINISHED'} + + def invoke(self, context, event): + path = Path(context.asset.name) + if bpy.data.filepath: + path = Path(bpy.data.filepath, context.asset.name) + + self.filepath = str(path.with_suffix('.webp')) + + context.window_manager.fileselect_add(self) + return {'RUNNING_MODAL'} + + + + +class ASSETLIB_OT_make_custom_preview(Operator): + bl_idname = "assetlibrary.make_custom_preview" + bl_label = "Custom Preview" + bl_description = "Make a preview" + + #data_type : EnumProperty(name="Type", items=lambda s, c: constants.DATA_TYPE_ITEMS) + + def draw_border(self, context): + if not self.is_down: + return + + # 50% alpha, 2 pixel width line + shader = gpu.shader.from_builtin('UNIFORM_COLOR') + #gpu.state.line_width_set(1.0) + batch = batch_for_shader(shader, 'LINE_LOOP', {"pos": self.border}) + shader.uniform_float("color", (1.0, 0.0, 0.0, 1)) + batch.draw(shader) + + # restore opengl defaults + #gpu.state.line_width_set(1.0) + #gpu.state.blend_set('NONE') + + def grab_view3d(self, context): + width = int(self.release_window_pos.x - self.press_window_pos.x) + height = width#int(self.press_window_pos.y - self.release_window_pos.y) + x = int(self.press_window_pos.x) + y = int(self.press_window_pos.y - width) + + print(x, y, width, height) + + scene = context.scene + + fb = gpu.state.active_framebuffer_get() + buffer = fb.read_color(x, y, width, height, 4, 0, 'FLOAT') + + buffer.dimensions = width * height * 4 + + img = bpy.data.images.get('.Asset Preview') + if img: + bpy.data.images.remove(img) + img = bpy.data.images.new('.Asset Preview', width, height) + #img.scale(width, height) + img.pixels.foreach_set(buffer) + img.scale(256, 256) + + pixels = [0] * 256 * 256 * 4 + img.pixels.foreach_get(pixels) + + bpy.data.images.remove(img) + return pixels + + def modal(self, context, event): + context.area.tag_redraw() + + self.mouse_pos = Vector((event.mouse_region_x, event.mouse_region_y)) + + if event.type == 'LEFTMOUSE' and event.value == 'PRESS': + self.press_window_pos = Vector((event.mouse_x, event.mouse_y)) + self.press_pos = Vector((event.mouse_region_x, event.mouse_region_y)) + print('Start Border') + + self.is_down = True + + elif event.type == 'MOUSEMOVE' and self.is_down: + + + width = int(self.mouse_pos.x - self.press_pos.x) + X = (self.press_pos.x-1, self.mouse_pos.x +2) + Y = (self.press_pos.y+1, self.press_pos.y-width-2) + #print(self.mouse_pos, self.press_pos ) + + #X = sorted((self.press_pos.x, self.mouse_pos.x)) + #Y = sorted((self.press_pos.y, self.mouse_pos.y)) + #Constraint to square + #Y[0] = Y[1] - (X[1] - X[0]) + + self.border = [(X[0], Y[0]), (X[1], Y[0]), (X[1], Y[1]), (X[0], Y[1])] + + elif event.type == 'LEFTMOUSE' and event.value == 'RELEASE': + self.release_window_pos = Vector((event.mouse_x, event.mouse_y)) + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + context.area.tag_redraw() + self.store_preview(context) + + return {'FINISHED'} + + elif event.type in {'RIGHTMOUSE', 'ESC'}: + bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW') + return {'CANCELLED'} + + return {'RUNNING_MODAL'} + + def store_preview(self, context): + asset = context.window_manager.asset_library.asset + pixels = self.grab_view3d(context) + asset.preview.image_size = 256, 256 + asset.preview.image_pixels_float.foreach_set(pixels) + + def invoke(self, context, event): + self.press_window_pos = Vector((0, 0)) + self.release_window_pos = Vector((0, 0)) + + self.press_pos = Vector((0, 0)) + + self.is_down = False + self.border = [] + + # Add the region OpenGL drawing callback + # draw in view space with 'POST_VIEW' and 'PRE_VIEW' + self._handle = bpy.types.SpaceView3D.draw_handler_add(self.draw_border, (context,), 'WINDOW', 'POST_PIXEL') + + area = get_viewport() + region = next(r for r in area.regions if r.type =="WINDOW") + with context.temp_override(area=area, space_data=area.spaces.active, region=region): + context.window_manager.modal_handler_add(self) + + return {'RUNNING_MODAL'} + #else: + # self.report({'WARNING'}, "View3D not found, cannot run operator") + # return {'CANCELLED'} + + +class ASSETLIB_OT_add_tag(Operator): + bl_idname = "assetlibrary.tag_add" + bl_options = {"REGISTER", "UNDO"} + bl_label = 'Add Tag' + bl_description = 'Add Tag' + + #data_type : EnumProperty(name="Type", items=lambda s, c: constants.DATA_TYPE_ITEMS) + + def execute(self, context): + asset = context.window_manager.asset_library.asset + + new_tag = asset.asset_data.tags.new(name='Tag') + index = list(asset.asset_data.tags).index(new_tag) + asset.asset_data.active_tag = index + + return {"FINISHED"} + + +class ASSETLIB_OT_remove_tag(Operator): + bl_idname = "assetlibrary.tag_remove" + bl_options = {"REGISTER", "UNDO"} + bl_label = 'Remove Tag' + bl_description = 'Remove Tag' + + #data_type : EnumProperty(name="Type", items=lambda s, c: constants.DATA_TYPE_ITEMS) + + def execute(self, context): + asset = context.window_manager.asset_library.asset + + if asset.asset_data.active_tag == -1: + return {"CANCELLED"} + + active_tag = asset.asset_data.tags[asset.asset_data.active_tag] + asset.asset_data.tags.remove(active_tag) + asset.asset_data.active_tag -=1 + + return {"FINISHED"} + + + +class ASSETLIB_OT_publish_asset(Operator): + bl_idname = "assetlibrary.publish_asset" + bl_options = {"REGISTER", "UNDO"} + bl_label = 'Publish Asset' + bl_description = 'Publish Asset' + + name : StringProperty(name='Name') + library : EnumProperty(name="Library", items=lambda s, c: constants.LIB_ITEMS) + #description : StringProperty(name='Description') + catalog : StringProperty(name='Catalog') + data_type : EnumProperty(name="Type", items=lambda s, c: constants.DATA_TYPE_ITEMS) + catalog_items : CollectionProperty(type=PropertyGroup) + + new_asset = False + is_asset = False + viewport = None + use_overlay = False + + # @classmethod + # def poll(self, context): + # return context.space_data.type == 'NODE_EDITOR' and context.space_data.edit_tree + + def invoke(self, context, event): + if self.data_type == 'NodeTree': + asset = context.space_data.edit_tree + elif self.data_type == 'Material': + asset = context.object.active_material + elif self.data_type == 'Object': + asset = context.object + + if asset.asset_data: + self.is_asset = True + else: + asset.asset_mark() + asset.preview_ensure() + asset.preview.image_size = 256, 256 + + self.viewport = get_viewport() + if self.viewport: + self.use_overlay = self.viewport.spaces.active.overlay.show_overlays + self.viewport.spaces.active.overlay.show_overlays = False + + bl_libs = context.preferences.filepaths.asset_libraries + constants.LIB_ITEMS[:] = [(lib.name, lib.name, "") for lib in bl_libs if lib.name] + + asset_type = get_asset_type(self.data_type) + asset_data = find_asset_data(asset.name, asset_type=asset_type, preview=True) + + for lib in bl_libs: + for catalog_item in read_catalog(lib.path): + c = self.catalog_items.add() + c.name = catalog_item.path + + self.name = asset.name + self.new_asset = True + if asset_data: + catalog = read_catalog(asset_data['library'].path) + if catalog_item := catalog.get(id=asset_data["catalog_id"]): + self.catalog = catalog_item.path + + self.new_asset = False + self.library = asset_data['library'].name + + if not self.is_asset: + if asset_data.get('preview_size'): + asset.preview.image_size = asset_data['preview_size'] + asset.preview.image_pixels_float.foreach_set(asset_data['preview_pixels']) + + asset.asset_data.description = asset_data['description'] + + for tag in asset_data['tags']: + asset.asset_data.tags.new(name=tag, skip_if_exists=True) + clear_time_tag(asset) + + #asset.preview_ensure() + context.window_manager.asset_library.asset = asset + + return context.window_manager.invoke_props_dialog(self) + + def check(self, context): + return True + + def cancel(self, context): + asset = context.window_manager.asset_library.asset + if self.viewport: + self.viewport.spaces.active.overlay.show_overlays = self.use_overlay + if not self.is_asset: + asset.asset_clear() + + def split_row(self, layout, name): + split = layout.split(factor=0.225) + split.alignment = 'RIGHT' + split.label(text=name) + return split + + def draw(self, context): + asset = context.window_manager.asset_library.asset + layout = self.layout + + col = layout.column() + col.use_property_split = True + col.use_property_decorate = False + + split = self.split_row(layout, "Name") + split.prop(self, "name", text='') + + split = self.split_row(layout, "Library") + split.prop(self, "library", text='') + + split = self.split_row(layout, "Catalog") + split.prop_search(self, "catalog", self, "catalog_items", results_are_suggestions=True, text='') + + split = self.split_row(layout, "Description") + split.prop(asset.asset_data, "description", text='') + + split = self.split_row(layout, "Tags") + row = split.row() + row.template_list("ASSETBROWSER_UL_metadata_tags", "asset_tags", asset.asset_data, "tags", + asset.asset_data, "active_tag", rows=3) + + col = row.column(align=True) + col.operator("assetlibrary.tag_add", icon='ADD', text="") + col.operator("assetlibrary.tag_remove", icon='REMOVE', text="") + + split = self.split_row(layout, "Preview") + row = split.row() + box = row.box() + box.template_icon(icon_value=asset.preview.icon_id, scale=5.0) + + col = row.column(align=False) + if self.viewport: + col.prop(self.viewport.spaces.active.overlay, 'show_overlays', icon="OVERLAY", text="") + col.operator("assetlibrary.make_custom_preview", icon='SCENE', text="") + #op.data_type = self.data_type + + def execute(self, context): + bl_libs = context.preferences.filepaths.asset_libraries + asset = context.window_manager.asset_library.asset + + publish_library = bl_libs[self.library] + asset_temp_blend = Path(bpy.app.tempdir, self.name).with_suffix('.blend') + + bpy.data.libraries.write(str(asset_temp_blend), {asset}, path_remap="ABSOLUTE") + + self.cancel(context) # To clear the asset mark and restore overlay + + asset_type = get_asset_type(self.data_type) + asset_full_path = Path(asset_temp_blend, asset_type, self.name) + + cmd = get_bl_cmd( + background=True, + factory_startup=True, + blendfile=constants.RESOURCES_DIR / 'asset_preview.blend', + script=constants.SCRIPTS_DIR / 'publish_library_assets.py', + library=publish_library.path, + assets=[asset_full_path.as_posix()], + catalogs=[self.catalog] + ) + + print(cmd) + subprocess.call(cmd) + + return {'FINISHED'} + + +class ASSETLIB_OT_publish_assets(Operator): + bl_idname = "assetlibrary.publish_assets" + bl_options = {"REGISTER", "UNDO"} + bl_label = 'Publish Assets' + bl_description = 'Publish Assets' + + library : EnumProperty(name="Library", items=lambda s, c: constants.LIB_ITEMS) + override : BoolProperty(default=True) + + # @classmethod + # def poll(self, context): + # return context.space_data.edit_tree + + def invoke(self, context, event): + bl_libs = context.preferences.filepaths.asset_libraries + constants.LIB_ITEMS[:] = [(lib.name, lib.name, "") for lib in bl_libs] + + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + layout = self.layout + col = layout.column() + col.use_property_split = True + col.use_property_decorate = False + + layout.prop(self, "library") + layout.prop(self, "override") + + def execute(self, context): + bl_libs = context.preferences.filepaths.asset_libraries + publish_library = bl_libs[self.library] + preview_blend = constants.RESOURCES_DIR / 'asset_preview.blend' + + cmd = get_bl_cmd( + background=True, + factory_startup=True, + blendfile=preview_blend, + script=constants.SCRIPTS_DIR / 'publish_library_assets.py', + library=publish_library.path, + assets=[get_asset_full_path(a) for a in context.selected_assets], + catalogs=[get_asset_catalog_path(a) for a in context.selected_assets] + ) + + print(cmd) + subprocess.call(cmd) + + return {'FINISHED'} + + +class ASSETLIB_OT_update_assets(Operator): + bl_idname = 'assetlibrary.update_assets' + bl_label = 'Update node' + bl_options = {"REGISTER", "UNDO"} + + data_type : EnumProperty(name="Type", items=lambda s, c: constants.DATA_TYPE_ITEMS) + selection : EnumProperty( items=[(s, s.title(), '') for s in ('ALL', 'SELECTED', 'CURRENT')], + default="CURRENT", name='All Nodes') + + @classmethod + def poll(cls, context): + return context.space_data.edit_tree + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def execute(self, context): + asset_libraries = context.preferences.filepaths.asset_libraries + + if self.data_type == 'NodeTree': + assets = [context.space_data.edit_tree] + blend_data = bpy.data.node_groups + + if self.selection == 'SELECTED': + assets = [ n.node_tree for n in context.space_data.edit_tree.nodes + if n.type == "GROUP" and n.select] + elif self.selection == 'ALL': + assets = list(bpy.data.node_groups) + + elif self.data_type == 'Material': + asset = context.object.active_material + blend_data = bpy.data.materials + if self.selection == 'ALL': + assets = list(bpy.data.materials) + + elif self.data_type == 'Object': + return {"CANCELLED"} + + elif self.selection == 'CURRENT': + active_node = context.space_data.edit_tree + assets = [active_node] + else: + assets = list(bpy.data.node_groups) + + node_names = set(n.name for n in nodes) + + for asset_library in asset_libraries: + library_path = Path(asset_library.path) + blend_files = [fp for fp in library_path.glob("**/*.blend") if fp.is_file()] + + node_groups = list(bpy.data.node_groups)# Storing original node_geoup to compare with imported + + link = (asset_library.import_method == 'LINK') + for blend_file in blend_files: + print(blend_file) + with bpy.data.libraries.load(str(blend_file), assets_only=True, link=link) as (data_from, data_to): + + import_node_groups = [n for n in data_from.node_groups if n in node_names] + print("import_node_groups", import_node_groups) + data_to.node_groups = import_node_groups + + node_names -= set(import_node_groups) # Store already updated nodes + + new_node_groups = set(n for n in bpy.data.node_groups if n not in node_groups) + + for new_node_group in new_node_groups: + new_node_group_name = new_node_group.library_weak_reference.id_name[2:] + local_node_group = next((n for n in bpy.data.node_groups if n.name == new_node_group_name and n != new_node_group), None) + + if not local_node_group: + print(f'No local node_group {new_node_group_name}') + continue + + print(f'Merge node {local_node_group.name} into {new_node_group.name}') + + local_node_group.user_remap(new_node_group) + new_node_group.interface_update(context) + bpy.data.node_groups.remove(local_node_group) + + new_node_group.name = new_node_group_name + new_node_group.asset_clear() + + + return {'FINISHED'} + + + def draw(self, context): + layout = self.layout + layout.prop(self, "selection", expand=True) classes = ( ASSETLIB_OT_reload_addon, - ASSETLIB_OT_add_library, - ASSETLIB_OT_remove_library, - ASSETLIB_OT_synchronize + #ASSETLIB_OT_add_library, + #ASSETLIB_OT_remove_library, + #ASSETLIB_OT_synchronize, + ASSETLIB_OT_save_asset_preview, + ASSETLIB_OT_make_custom_preview, + ASSETLIB_OT_publish_asset, + ASSETLIB_OT_publish_assets, + ASSETLIB_OT_add_tag, + ASSETLIB_OT_remove_tag ) diff --git a/plugins/__init__.py b/plugins/__init__.py index a9a7056..e69de29 100644 --- a/plugins/__init__.py +++ b/plugins/__init__.py @@ -1,17 +0,0 @@ - -from asset_library.plugins import plugin -from asset_library.plugins import copy_folder -from asset_library.plugins import scan_folder - -if 'bpy' in locals(): - import importlib - - importlib.reload(plugin) - importlib.reload(copy_folder) - importlib.reload(scan_folder) - -import bpy - -LibraryPlugin = plugin.LibraryPlugin -CopyFolder = copy_folder.CopyFolder -ScanFolder = scan_folder.ScanFolder diff --git a/plugins/conform.py b/plugins/conform.py index 1669d55..73d1f32 100644 --- a/plugins/conform.py +++ b/plugins/conform.py @@ -4,9 +4,9 @@ Plugin for making an asset library of all blender file found in a folder """ -from .scan_folder import ScanFolder -from ..core.bl_utils import load_datablocks -from ..core.template import Template +from asset_library.plugins.scan_folder import ScanFolder +from asset_library.core.bl_utils import load_datablocks +from asset_library.core.template import Template import bpy from bpy.props import (StringProperty, IntProperty, BoolProperty) diff --git a/plugins/copy_folder.py b/plugins/copy_folder.py index 3562f35..cd016e6 100644 --- a/plugins/copy_folder.py +++ b/plugins/copy_folder.py @@ -8,8 +8,8 @@ from os.path import expandvars import bpy from bpy.props import StringProperty -from .library_plugin import LibraryPlugin -from ..core.file_utils import copy_dir +from asset_library.plugins.library_plugin import LibraryPlugin +from asset_library.core.file_utils import copy_dir diff --git a/plugins/kitsu.py b/plugins/kitsu.py index 94111a1..b9ca14c 100644 --- a/plugins/kitsu.py +++ b/plugins/kitsu.py @@ -17,9 +17,9 @@ import time import bpy from bpy.props import (StringProperty, IntProperty, BoolProperty) -from .library_plugin import LibraryPlugin -from ..core.template import Template -from ..core.file_utils import install_module +from asset_library.plugins.library_plugin import LibraryPlugin +from asset_library.core.template import Template +from asset_library.core.file_utils import install_module class Kitsu(LibraryPlugin): diff --git a/plugins/library_plugin.py b/plugins/library_plugin.py index 0e10c5e..89ea514 100644 --- a/plugins/library_plugin.py +++ b/plugins/library_plugin.py @@ -17,12 +17,12 @@ from bpy.types import PropertyGroup from bpy.props import StringProperty #from asset_library.common.functions import (norm_asset_datas,) -from ..core.bl_utils import get_addon_prefs, load_datablocks -from ..core.file_utils import read_file, write_file -from ..core.template import Template -from ..constants import (MODULE_DIR, RESOURCES_DIR) +from asset_library.core.bl_utils import get_addon_prefs, load_datablocks +from asset_library.core.file_utils import read_file, write_file +from asset_library.core.template import Template +from asset_library.constants import (MODULE_DIR, RESOURCES_DIR) -from ..data_type import (action, collection, file) +#from asset_library.data_type import (action, collection, file) #from asset_library.common.library_cache import LibraryCacheDiff diff --git a/plugins/poly_haven.py b/plugins/poly_haven.py index 908740d..e18e884 100644 --- a/plugins/poly_haven.py +++ b/plugins/poly_haven.py @@ -19,9 +19,9 @@ from pprint import pprint as pp import bpy from bpy.props import (StringProperty, IntProperty, BoolProperty, EnumProperty) -from .library_plugin import LibraryPlugin -from ..core.template import Template -from ..core.file_utils import install_module +from asset_library.plugins.library_plugin import LibraryPlugin +from asset_library.core.template import Template +from asset_library.core.file_utils import install_module REQ_HEADERS = requests.utils.default_headers() diff --git a/plugins/scan_folder.py b/plugins/scan_folder.py index babb60e..4549880 100644 --- a/plugins/scan_folder.py +++ b/plugins/scan_folder.py @@ -15,9 +15,9 @@ from itertools import groupby import bpy from bpy.props import (StringProperty, IntProperty, BoolProperty) -from .library_plugin import LibraryPlugin -from ..core.bl_utils import load_datablocks -from ..core.template import Template +from asset_library.plugins.library_plugin import LibraryPlugin +from asset_library.core.bl_utils import load_datablocks +from asset_library.core.template import Template diff --git a/preferences.py b/preferences.py index 0e55d5b..963bd3b 100644 --- a/preferences.py +++ b/preferences.py @@ -6,18 +6,19 @@ from bpy.props import (CollectionProperty, StringProperty) from . properties import AssetLibrary from . core.bl_utils import get_addon_prefs -from . core.asset_library_utils import update_library_path +from . core.lib_utils import update_library_path class AssetLibraryPrefs(AddonPreferences): bl_idname = __package__ + config_path : StringProperty(subtype="FILE_PATH") libraries : CollectionProperty(type=AssetLibrary) bundle_directory : StringProperty( name="Path", subtype='DIR_PATH', default='', - update=update_library_path + update=lambda s, c: update_library_path() ) def draw(self, context): @@ -26,6 +27,7 @@ class AssetLibraryPrefs(AddonPreferences): layout = self.layout col = layout.column(align=False) + col.prop(self, "config_path", text='Config') col.prop(self, "bundle_directory", text='Bundle Directory') col.separator() diff --git a/properties.py b/properties.py index fe50dc8..8d9bae7 100644 --- a/properties.py +++ b/properties.py @@ -1,18 +1,21 @@ import inspect +import os import bpy from bpy.types import (AddonPreferences, PropertyGroup) from bpy.props import (BoolProperty, StringProperty, CollectionProperty, EnumProperty, IntProperty, PointerProperty) -from .core.bl_utils import get_addon_prefs -from .core.file_utils import import_module_from_path, norm_str -from .core.asset_library_utils import update_library_path from .constants import PLUGINS, PLUGINS_DIR, PLUGINS_ITEMS +from .core.file_utils import import_module_from_path, norm_str + +from .core.bl_utils import get_addon_prefs +from .core.lib_utils import update_library_path def load_plugins(): + from .plugins.library_plugin import LibraryPlugin print('Asset Library: Load Library Plugins') plugin_files = list(PLUGINS_DIR.glob('*.py')) @@ -28,29 +31,31 @@ def load_plugins(): mod = import_module_from_path(plugin_file) for name, obj in inspect.getmembers(mod): - if not inspect.isclass(obj): + if not inspect.isclass(obj) or (obj is LibraryPlugin): continue - - if AssetLibrary not in obj.__mro__ or obj is AssetLibrary: + + if (LibraryPlugin not in obj.__mro__) or (obj in PLUGINS): continue try: print(f'Register Plugin {name}') bpy.utils.register_class(obj) setattr(Plugins, norm_str(obj.name), PointerProperty(type=obj)) - PLUGINS.append(obj) + PLUGINS[obj.name] = obj except Exception as e: print(f'Could not register plugin {name}') print(e) - plugin_items = [('NONE', 'None', '', 0)] - plugin_items += [(norm_str(p.name, format=str.upper), p.name, "", i+1) for i, a in enumerate(PLUGINS)] + plugins = sorted(PLUGINS.keys()) + plugin_items = [('none', 'None', '', 0)] + plugin_items += [(norm_str(p), p, "") for p in plugins] PLUGINS_ITEMS[:] = plugin_items return PLUGINS + class Plugins(PropertyGroup): """Container holding the registed library plugins""" def __iter__(self): @@ -60,15 +65,19 @@ class Plugins(PropertyGroup): class AssetLibrary(PropertyGroup): """Library item defining one library with his plugin and settings""" - name : StringProperty(name='Name', default='', update=update_library_path) + name : StringProperty(name='Name', default='', update=lambda s, c : update_library_path()) expand : BoolProperty(name='Expand', default=False) - use : BoolProperty(name='Use', default=True, update=update_library_path) - is_env : BoolProperty(default=False) - #path : StringProperty(subtype='DIR_PATH') + use : BoolProperty(name='Use', default=True, update=lambda s, c : update_library_path()) + is_user : BoolProperty(default=True) + path : StringProperty(subtype='DIR_PATH', update=lambda s, c : update_library_path()) plugins : PointerProperty(type=Plugins) plugin_name : EnumProperty(items=lambda s, c : PLUGINS_ITEMS) + @property + def plugin(self): + return getattr(self.plugins, self.plugin_name, None) + @property def index(self): prefs = get_addon_prefs() @@ -89,6 +98,30 @@ class AssetLibrary(PropertyGroup): layout.separator(factor=3) """ + def set_dict(self, data, obj=None): + """"Recursive method to set all attribute from a dict to this instance""" + + if obj is None: + obj = self + + # Make shure the input dict is not modidied + data = data.copy() + + for key, value in data.items(): + if isinstance(value, dict): + self.set_dict(value, obj=getattr(obj, key)) + + elif key in obj.bl_rna.properties.keys(): + + if isinstance(value, str): + value = os.path.expandvars(value) + value = os.path.expanduser(value) + + setattr(obj, key, value) + else: + print(f'Prop {key} of {obj} not exist') + + def draw(self, layout): prefs = get_addon_prefs() #col = layout.column(align=True) @@ -102,6 +135,10 @@ class AssetLibrary(PropertyGroup): #row.label(icon="ASSET_MANAGER") row.prop(self, 'name', text='') row.separator(factor=0.5) + sub = row.row() + sub.alignment = 'RIGHT' + sub.prop(self, 'plugin_name', text='') + row.separator(factor=0.5) op = row.operator("assetlibrary.synchronize", icon='UV_SYNC_SELECT', text='') op.name = self.name @@ -112,14 +149,26 @@ class AssetLibrary(PropertyGroup): #self.draw_operators(row) if self.expand: col = box.column(align=False) + col.use_property_split = True - - col.prop(self, "path") + col.prop(self, 'path', text='Path') + + if self.plugin: + col.separator() + self.plugin.draw_prefs(col) + + +class WindowManagerProperties(PropertyGroup): + """Library item defining one library with his plugin and settings""" + + asset : PointerProperty(type=bpy.types.ID) + classes = ( Plugins, AssetLibrary, + WindowManagerProperties ) @@ -127,8 +176,11 @@ def register(): for cls in classes: bpy.utils.register_class(cls) + bpy.types.WindowManager.asset_library = PointerProperty(type=WindowManagerProperties) load_plugins() def unregister(): for cls in reversed(classes): - bpy.utils.unregister_class(cls) \ No newline at end of file + bpy.utils.unregister_class(cls) + + del bpy.types.WindowManager.asset_library \ No newline at end of file diff --git a/resources/asset_preview.blend b/resources/asset_preview.blend new file mode 100644 index 0000000000000000000000000000000000000000..cea51ab33bdf34fd2225819a6ad1a94f07bf230a GIT binary patch literal 104095 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�*{txnbqn*ueR3PVu0RRooEc5?02qFk9 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 z001x>004gg000;Q005T)007Vw000OA0058+006H5008I#007Pc000mV006B5005X2 u005Q%006K80052v001}w0027y007_`002_u004;M0RRyI00027>XMIz@-A`! literal 0 HcmV?d00001 diff --git a/resources/asset_preview.blend1 b/resources/asset_preview.blend1 new file mode 100644 index 0000000000000000000000000000000000000000..a6cfa19952b6a92d5dea05c593be43a0b134af46 GIT binary patch literal 107777 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

2Nh?a_Z3vuT;${yuv(nS;xP%G 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≪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

(lp4n6MQX`dBf6piOXH?R}UzaAsjN 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 literal 0 HcmV?d00001 diff --git a/scripts/publish_asset.py b/scripts/publish_asset.py new file mode 100644 index 0000000..1e2e55f --- /dev/null +++ b/scripts/publish_asset.py @@ -0,0 +1,42 @@ + +import argparse +import sys +import json +from pathlib import Path +import bpy + +from asset_library import constants +from asset_library.core.bl_utils import load_datablocks + + +def publish_asset(data_type, name): + bpy.app.use_userpref_skip_save_on_exit = True + + blend_file = bpy.data.filepath + preview_blend = constants.RESOURCES_DIR / 'asset_preview.blend' + col = load_datablocks(preview_blend, names='Preview', type='collections', link=False) + bpy.context.scene.collection.children.link(col) + + if data_type == 'node_groups': + ntree = bpy.data.node_groups[name] + mod = bpy.data.objects['Cube'].modifiers.new(ntree_name, 'NODES') + mod.node_group = ntree + + bpy.context.preferences.filepaths.save_version = 0 + bpy.ops.wm.save_mainfile(compress=True, exit=True) + #bpy.ops.wm.quit_blender() + + +if __name__ == '__main__' : + parser = argparse.ArgumentParser(description='build_collection_blends', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument('--data-type') + parser.add_argument('--datablock') + + if '--' in sys.argv : + index = sys.argv.index('--') + sys.argv = [sys.argv[index-1], *sys.argv[index+1:]] + + args = parser.parse_args() + publish_asset(**vars(args)) \ No newline at end of file diff --git a/scripts/publish_library_assets.py b/scripts/publish_library_assets.py new file mode 100644 index 0000000..4782267 --- /dev/null +++ b/scripts/publish_library_assets.py @@ -0,0 +1,96 @@ + +import argparse +import sys +import json +from pathlib import Path +import bpy +from datetime import datetime + +from asset_library import constants +from asset_library.core.bl_utils import load_datablocks +from asset_library.core.lib_utils import clear_time_tag, create_time_tag, version_file +from asset_library.core.catalog import Catalog + + +def get_all_datablocks(): + blend_datas = [ + bpy.data.collections, bpy.data.objects, + bpy.data.materials, bpy.data.node_groups, bpy.data.worlds] + + return [o for blend_data in blend_datas for o in blend_data] + + +def publish_library_assets(library, assets, catalogs): + bpy.app.use_userpref_skip_save_on_exit = True + bpy.context.preferences.filepaths.save_version = 0 + + for asset, catalog_path in zip(assets, catalogs): + asset_path, asset_type, asset_name = asset.rsplit('/', 2) + + #print(asset_path, asset_type, asset_name) + + asset = load_datablocks(asset_path, names=asset_name, type=asset_type, link=False) + + if not asset.asset_data: + asset.asset_mark() + + # clear asset_mark of all other assets + for datablock in get_all_datablocks(): + if datablock != asset and datablock.asset_data: + datablock.asset_clear() + + if asset_type == 'node_groups': + mod = bpy.data.objects['Cube'].modifiers.new(asset.name, 'NODES') + mod.node_group = asset + + elif asset_type == 'objects': + bpy.data.objects.remove(bpy.data.objects['Cube']) + bpy.data.collections['Preview'].objects.link(asset) + + elif asset_type == 'materials': + bpy.data.objects['Cube'].data.materials.append(asset) + + #catalog_path = asset.asset_data.catalog_simple_name.replace('-', '/') + asset_publish_path = Path(library, catalog_path, asset.name).with_suffix('.blend') + asset_publish_path.parent.mkdir(parents=True, exist_ok=True) + + # Assign or Create catalog + catalog = Catalog(library) + catalog.read() + + if catalog_item := catalog.get(path=catalog_path): + catalog_id = catalog_item.id + else: + catalog_id = catalog.add(catalog_path).id + catalog.write() + + asset.asset_data.catalog_id = catalog_id + + # Created time tag + clear_time_tag(asset) + create_time_tag(asset) + + version_file(asset_publish_path) + + bpy.ops.object.make_local(type='ALL') + bpy.ops.file.make_paths_relative() + bpy.ops.wm.save_as_mainfile(filepath=str(asset_publish_path), compress=True, copy=True, relative_remap=True) + bpy.ops.wm.revert_mainfile() + + bpy.ops.wm.quit_blender() + + +if __name__ == '__main__' : + parser = argparse.ArgumentParser(description='build_collection_blends', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument('--library') + parser.add_argument('--assets', nargs='+') + parser.add_argument('--catalogs', nargs='+') + + if '--' in sys.argv : + index = sys.argv.index('--') + sys.argv = [sys.argv[index-1], *sys.argv[index+1:]] + + args = parser.parse_args() + publish_library_assets(**vars(args)) \ No newline at end of file diff --git a/ui.py b/ui.py index 859dbdf..67eeccd 100644 --- a/ui.py +++ b/ui.py @@ -1,6 +1,25 @@ -from bpy.types import FILEBROWSER_HT_header, ASSETBROWSER_MT_editor_menus -from .core.asset_library_utils import get_active_library +import bpy +from bpy.types import Menu + +from .core.lib_utils import get_active_library + + +class ASSETLIB_MT_node_editor(Menu): + bl_label = "Asset" + + def draw(self, context): + layout = self.layout + op = layout.operator("assetlibrary.publish_asset", text='Publish Node Group', icon='NODETREE') + op.data_type = 'NodeTree' + + if context.space_data.tree_type == 'GeometryNodeTree': + op = layout.operator("assetlibrary.publish_asset", text='Publish Object', icon='OBJECT_DATA') + op.data_type = 'Object' + + elif context.space_data.tree_type == 'ShaderNodeTree': + op = layout.operator("assetlibrary.publish_asset", text='Publish Material', icon='MATERIAL') + op.data_type = 'Material' def draw_assetbrowser_header(self, context): @@ -51,16 +70,19 @@ def draw_assetbrowser_header(self, context): ).region_type = 'TOOL_PROPS' -def draw_assetbrowser_header(self, context): - if not get_active_library(): - return +def draw_assetbrowser_asset_menu(self, context): + layout = self.layout + layout.operator("assetlibrary.publish_assets", text='Publish Assets', icon='ASSET_MANAGER') - self.layout.separator() - box = self.layout.box() - row = box.row() - row.separator(factor=0.5) - row.label(text='Asset Library') - row.separator(factor=0.5) + # if not get_active_library(): + # return + + # self.layout.separator() + # box = self.layout.box() + # row = box.row() + # row.separator(factor=0.5) + # row.label(text='Asset Library') + # row.separator(factor=0.5) # classes = (, # # ASSETLIB_PT_pose_library_editing, @@ -69,18 +91,35 @@ def draw_assetbrowser_header(self, context): # # ASSETLIB_PT_libraries # ) -classes = [] +def draw_asset_preview_menu(self, context): + layout = self.layout + layout.operator("assetlibrary.save_asset_preview") + + +def draw_node_tree_menu(self, context): + layout = self.layout + row = layout.row(align=False) + row.menu('ASSETLIB_MT_node_editor') + + +bl_classes = ( + ASSETLIB_MT_node_editor,) def register() -> None: - for cls in classes: - bpy.utils.register_class(cls) + for bl_class in bl_classes: + bpy.utils.register_class(bl_class) - ASSETBROWSER_MT_editor_menus.append(draw_assetbrowser_header) + #bpy.types.ASSETBROWSER_MT_editor_menus.append(draw_assetbrowser_header) + bpy.types.ASSETBROWSER_MT_metadata_preview_menu.append(draw_asset_preview_menu) + bpy.types.NODE_MT_editor_menus.append(draw_node_tree_menu) + bpy.types.ASSETBROWSER_MT_asset.append(draw_assetbrowser_asset_menu) def unregister() -> None: - for cls in reversed(classes): - bpy.utils.unregister_class(cls) + for bl_class in reversed(bl_classes): + bpy.utils.unregister_class(bl_class) - ASSETBROWSER_MT_editor_menus.remove(draw_assetbrowser_header) + bpy.types.ASSETBROWSER_MT_editor_menus.remove(draw_assetbrowser_header) + bpy.types.NODE_MT_editor_menus.remove(draw_node_tree_menu) + bpy.types.ASSETBROWSER_MT_asset.remove(draw_assetbrowser_asset_menu) \ No newline at end of file