set blender scene

master
florentin.luce 2024-02-29 10:59:47 +01:00
parent d0cc3ac4a7
commit 9612122b5f
1 changed files with 28 additions and 1 deletions

View File

@ -18,6 +18,7 @@ class Node:
self.parameters = []
self._parent = None
self._scene = None
for prop in self.bl_node.bl_rna.properties:
if prop.is_readonly:
@ -82,6 +83,32 @@ class Node:
if self._parent:
self.bl_node.parent = self._parent.bl_node
@property
def scene(self):
"""Get the name of the scene used by the node.
Returns:
str: scene name.
"""
if self._scene:
return self._scene.name
@scene.setter
def scene(self, value):
"""Set the blender scene using the bpy Scene object or its name.
Args:
value (str|bpy.types.Scene): scene name or scene object to set th the node.
"""
if isinstance(value, str):
self._scene = bpy.data.scenes[value]
elif isinstance(value, bpy.types.Scene):
self._scene = value
if self._scene:
self.bl_node.scene = self._scene
@classmethod
def from_dict(cls, data, tree):
"""Create all nodes from their dict representation.
@ -102,7 +129,7 @@ class Node:
setattr(node, p, data[p])
# set attribute on the blender node only if correct type is retrieve
if p not in ('parent',):
if p not in ('parent', 'scene'):
setattr(node.bl_node, p, getattr(node, p))
node.inputs = [Input.from_dict(ipt_data, node) for ipt_data in data['inputs'].values()]