apply dev changes
This commit is contained in:
parent
d4ac1f03ab
commit
c3138af472
105
data_type/node/operator.py
Normal file
105
data_type/node/operator.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
|
||||||
|
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_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)
|
||||||
|
|
||||||
|
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)
|
||||||
Loading…
x
Reference in New Issue
Block a user