From 6130f23a1a1677927daea621665f672042e2c81c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 22 Dec 2023 16:40:48 +0500 Subject: [PATCH] Allow copying node graphs for external shaders on Blender 4.1+ #3876 --- src/blenderbim/blenderbim/tool/blender.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 245a8e8829..47ee145b76 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -203,13 +203,15 @@ class Blender(blenderbim.core.tool.Blender): @classmethod def copy_node_graph(cls, material_to, material_from): # https://projects.blender.org/blender/blender/issues/108763 - if bpy.app.version >= (4, 0): + if bpy.app.version[:2] == (4, 0): print( - "WARNING. Copying node graph is not yet supported on Blender 4.0+ due Blender bug, " + "WARNING. Copying node graph is not supported on Blender 4.0.x due Blender bug, " f"copying node graph from {material_from.name} to {material_to.name} will be skipped" ) return + use_temp_override = bpy.app.version >= (4, 0, 0) + temp_override = cls.get_shader_editor_context() shader_editor = temp_override["space"] @@ -225,11 +227,19 @@ class Blender(blenderbim.core.tool.Blender): # select all nodes and copy them to clipboard for node in material_from.node_tree.nodes: node.select = True - bpy.ops.node.clipboard_copy(temp_override) + if use_temp_override: + with bpy.context.temp_override(**temp_override): + bpy.ops.node.clipboard_copy() + else: + bpy.ops.node.clipboard_copy(temp_override) # back to original material shader_editor.node_tree = material_to.node_tree - bpy.ops.node.clipboard_paste(temp_override, offset=(0, 0)) + if use_temp_override: + with bpy.context.temp_override(**temp_override): + bpy.ops.node.clipboard_paste(offset=(0, 0)) + else: + bpy.ops.node.clipboard_paste(temp_override, offset=(0, 0)) # restore shader editor settings shader_editor.pin = previous_pin_setting