From c499adf3b85bb4a0eb3c1d91684b7af436f0e5b6 Mon Sep 17 00:00:00 2001 From: Habib Gahbiche Date: Thu, 31 Jul 2025 12:28:00 +0200 Subject: [PATCH] Compositor: Remove `scene.use_nodes` from Python API Use Nodes were removed in d88d4cc8 from the UI, but marked deprecated in Python API. Since we decided to remove `world.use_nodes` and `material.use_nodes` for the shader editor (instead of deprecating them), we also remove `scene.use_nodes`. This PR only replaces the deprecated `scene.node_tree` with `scene.compositing_node_group` where necessary. #143619 will fully remove `node_tree` Pull Request: https://projects.blender.org/blender/blender/pulls/143578 --- source/blender/makesrna/intern/rna_scene.cc | 31 --------------------- tests/python/bl_node_group_interface.py | 4 +-- tests/python/bl_pyapi_idprop_datablock.py | 6 ++-- 3 files changed, 6 insertions(+), 35 deletions(-) diff --git a/source/blender/makesrna/intern/rna_scene.cc b/source/blender/makesrna/intern/rna_scene.cc index b21a9864836..2cc74b90dcb 100644 --- a/source/blender/makesrna/intern/rna_scene.cc +++ b/source/blender/makesrna/intern/rna_scene.cc @@ -2074,29 +2074,6 @@ static std::optional rna_SceneRenderView_path(const PointerRNA *ptr return fmt::format("render.views[\"{}\"]", srv_name_esc); } -static bool rna_Scene_use_nodes_get(PointerRNA *ptr) -{ - Scene *scene = reinterpret_cast(ptr->data); - return scene->r.scemode & R_DOCOMP; -} - -static void rna_Scene_use_nodes_set(PointerRNA *ptr, const bool use_nodes) -{ - Scene *scene = reinterpret_cast(ptr->data); - SET_FLAG_FROM_TEST(scene->r.scemode, use_nodes, R_DOCOMP); -} - -/* Todo(#140111): Remove in 6.0. In Python API, this function is used to create a compositing node - * tree if none exists. scene.use_nodes will be replaced by the existing scene.use_compositing. */ -static void rna_Scene_use_nodes_update(bContext *C, PointerRNA *ptr) -{ - Scene *scene = (Scene *)ptr->data; - if (scene->r.scemode & R_DOCOMP && scene->compositing_node_group == nullptr) { - ED_node_composit_default(C, scene); - } - DEG_relations_tag_update(CTX_data_main(C)); -} - static void rna_Physics_relations_update(Main *bmain, Scene * /*scene*/, PointerRNA * /*ptr*/) { DEG_relations_tag_update(bmain); @@ -8941,14 +8918,6 @@ void RNA_def_scene(BlenderRNA *brna) nullptr, "rna_Scene_compositing_node_group_poll"); - prop = RNA_def_property(srna, "use_nodes", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, nullptr, "use_nodes", 1); - RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); - RNA_def_property_ui_text( - prop, "Use Nodes", "Enable the compositing node group. (Deprecated: use use_compositing)"); - RNA_def_property_boolean_funcs(prop, "rna_Scene_use_nodes_get", "rna_Scene_use_nodes_set"); - RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_use_nodes_update"); - /* Sequencer */ prop = RNA_def_property(srna, "sequence_editor", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, nullptr, "ed"); diff --git a/tests/python/bl_node_group_interface.py b/tests/python/bl_node_group_interface.py index cd8f45d7c56..f20f844e09f 100644 --- a/tests/python/bl_node_group_interface.py +++ b/tests/python/bl_node_group_interface.py @@ -430,8 +430,8 @@ class CompositorNodeGroupInterfaceTest(AbstractNodeGroupInterfaceTest, NodeGroup def setUp(self): super().setUp() self.scene = bpy.data.scenes.new("test") - self.scene.use_nodes = True - self.main_tree = self.scene.node_tree + self.main_tree = bpy.data.node_groups.new("test node tree", "CompositorNodeTree") + self.scene.compositing_node_group = self.main_tree def test_invalid_socket_type(self): self.do_test_invalid_socket_type("INVALID_SOCKET_TYPE_11!1") diff --git a/tests/python/bl_pyapi_idprop_datablock.py b/tests/python/bl_pyapi_idprop_datablock.py index f22ca0077c9..016984d23a1 100644 --- a/tests/python/bl_pyapi_idprop_datablock.py +++ b/tests/python/bl_pyapi_idprop_datablock.py @@ -131,8 +131,10 @@ def make_lib(): bpy.context.collection.objects.link(ob) # nodes - bpy.data.scenes["Scene"].use_nodes = True - sys_idprops = bpy.data.scenes["Scene"].node_tree.nodes['Render Layers'].bl_system_properties_get(do_create=True) + tree = bpy.data.node_groups.new("Compositor Nodes", "CompositorNodeTree") + bpy.data.scenes["Scene"].compositing_node_group = tree + rlayers = tree.nodes.new(type="CompositorNodeRLayers") + sys_idprops = rlayers.bl_system_properties_get(do_create=True) sys_idprops["prop"] = bpy.data.objects['Camera'] # rename scene and save