From 832f54a1aa582937d410b01f7f4b56751e0a30f6 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Wed, 1 Oct 2014 06:23:43 +0200 Subject: [PATCH] Cycles: Filter Shader and Output nodes to their respective object/world node tree. Some nodes only work in certain node trees, so don't show them in the Add Node menu when this is the case. This can probably be expanded to Input Nodes too, but need to double check some cases here still. --- release/scripts/startup/nodeitems_builtins.py | 50 ++++++++++++------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index 5dccda789e0..8c2476bd430 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -112,6 +112,20 @@ def line_style_shader_nodes_poll(context): snode.shader_type == 'LINESTYLE') +# only show nodes working in world node trees +def world_shader_nodes_poll(context): + snode = context.space_data + return (snode.tree_type == 'ShaderNodeTree' and + snode.shader_type == 'WORLD') + + +# only show nodes working in object node trees +def object_shader_nodes_poll(context): + snode = context.space_data + return (snode.tree_type == 'ShaderNodeTree' and + snode.shader_type == 'OBJECT') + + # All standard node categories currently used in nodes. shader_node_categories = [ @@ -180,30 +194,30 @@ shader_node_categories = [ NodeItem("NodeGroupInput", poll=group_input_output_item_poll), ]), ShaderNewNodeCategory("SH_NEW_OUTPUT", "Output", items=[ - NodeItem("ShaderNodeOutputMaterial"), - NodeItem("ShaderNodeOutputLamp"), - NodeItem("ShaderNodeOutputWorld"), + NodeItem("ShaderNodeOutputMaterial", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeOutputLamp", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeOutputWorld", poll=world_shader_nodes_poll), NodeItem("ShaderNodeOutputLineStyle", poll=line_style_shader_nodes_poll), NodeItem("NodeGroupOutput", poll=group_input_output_item_poll), ]), ShaderNewNodeCategory("SH_NEW_SHADER", "Shader", items=[ NodeItem("ShaderNodeMixShader"), NodeItem("ShaderNodeAddShader"), - NodeItem("ShaderNodeBsdfDiffuse"), - NodeItem("ShaderNodeBsdfGlossy"), - NodeItem("ShaderNodeBsdfTransparent"), - NodeItem("ShaderNodeBsdfRefraction"), - NodeItem("ShaderNodeBsdfGlass"), - NodeItem("ShaderNodeBsdfTranslucent"), - NodeItem("ShaderNodeBsdfAnisotropic"), - NodeItem("ShaderNodeBsdfVelvet"), - NodeItem("ShaderNodeBsdfToon"), - NodeItem("ShaderNodeSubsurfaceScattering"), - NodeItem("ShaderNodeEmission"), - NodeItem("ShaderNodeBsdfHair"), - NodeItem("ShaderNodeBackground"), - NodeItem("ShaderNodeAmbientOcclusion"), - NodeItem("ShaderNodeHoldout"), + NodeItem("ShaderNodeBsdfDiffuse", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfGlossy", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfTransparent", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfRefraction", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfGlass", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfTranslucent", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfAnisotropic", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfVelvet", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfToon", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeSubsurfaceScattering", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeEmission", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBsdfHair", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeBackground", poll=world_shader_nodes_poll), + NodeItem("ShaderNodeAmbientOcclusion", poll=object_shader_nodes_poll), + NodeItem("ShaderNodeHoldout", poll=object_shader_nodes_poll), NodeItem("ShaderNodeVolumeAbsorption"), NodeItem("ShaderNodeVolumeScatter"), ]),