mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-27 02:31:09 +00:00
Allow copying node graphs for external shaders on Blender 4.1+ #3876
This commit is contained in:
@@ -203,13 +203,15 @@ class Blender(blenderbim.core.tool.Blender):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def copy_node_graph(cls, material_to, material_from):
|
def copy_node_graph(cls, material_to, material_from):
|
||||||
# https://projects.blender.org/blender/blender/issues/108763
|
# https://projects.blender.org/blender/blender/issues/108763
|
||||||
if bpy.app.version >= (4, 0):
|
if bpy.app.version[:2] == (4, 0):
|
||||||
print(
|
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"
|
f"copying node graph from {material_from.name} to {material_to.name} will be skipped"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
use_temp_override = bpy.app.version >= (4, 0, 0)
|
||||||
|
|
||||||
temp_override = cls.get_shader_editor_context()
|
temp_override = cls.get_shader_editor_context()
|
||||||
shader_editor = temp_override["space"]
|
shader_editor = temp_override["space"]
|
||||||
|
|
||||||
@@ -225,11 +227,19 @@ class Blender(blenderbim.core.tool.Blender):
|
|||||||
# select all nodes and copy them to clipboard
|
# select all nodes and copy them to clipboard
|
||||||
for node in material_from.node_tree.nodes:
|
for node in material_from.node_tree.nodes:
|
||||||
node.select = True
|
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
|
# back to original material
|
||||||
shader_editor.node_tree = material_to.node_tree
|
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
|
# restore shader editor settings
|
||||||
shader_editor.pin = previous_pin_setting
|
shader_editor.pin = previous_pin_setting
|
||||||
|
|||||||
Reference in New Issue
Block a user