Texture Nodes: Refactor Add menu #111838

Merged
Pablo Vazquez merged 2 commits from pablovazquez/blender:ui-texture-nodes-add-menu-refactor into main 2023-09-05 21:52:38 +02:00
4 changed files with 151 additions and 66 deletions

View File

@ -16,6 +16,7 @@ _modules = [
"node_add_menu_compositor",
"node_add_menu_geometry",
"node_add_menu_shader",
"node_add_menu_texture",
"properties_animviz",
"properties_constraint",
"properties_data_armature",

View File

@ -0,0 +1,144 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
import bpy
from bpy.types import Menu
from bl_ui import node_add_menu
class NODE_MT_category_texture_input(Menu):
bl_idname = "NODE_MT_category_texture_input"
bl_label = "Input"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeCoordinates")
node_add_menu.add_node_type(layout, "TextureNodeCurveTime")
node_add_menu.add_node_type(layout, "TextureNodeImage")
node_add_menu.add_node_type(layout, "TextureNodeTexture")
class NODE_MT_category_texture_output(Menu):
bl_idname = "NODE_MT_category_texture_output"
bl_label = "Output"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeOutput")
node_add_menu.add_node_type(layout, "TextureNodeViewer")
class NODE_MT_category_texture_color(Menu):
bl_idname = "NODE_MT_category_texture_color"
bl_label = "Color"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeHueSaturation")
node_add_menu.add_node_type(layout, "TextureNodeInvert")
node_add_menu.add_node_type(layout, "TextureNodeMixRGB")
node_add_menu.add_node_type(layout, "TextureNodeCurveRGB")
layout.separator()
node_add_menu.add_node_type(layout, "TextureNodeCombineColor")
node_add_menu.add_node_type(layout, "TextureNodeSeparateColor")
class NODE_MT_category_texture_converter(Menu):
bl_idname = "NODE_MT_category_texture_converter"
bl_label = "Converter"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeValToRGB")
node_add_menu.add_node_type(layout, "TextureNodeDistance")
node_add_menu.add_node_type(layout, "TextureNodeMath")
node_add_menu.add_node_type(layout, "TextureNodeRGBToBW")
node_add_menu.add_node_type(layout, "TextureNodeValToNor")
class NODE_MT_category_texture_distort(Menu):
bl_idname = "NODE_MT_category_texture_distort"
bl_label = "Distort"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeAt")
node_add_menu.add_node_type(layout, "TextureNodeRotate")
node_add_menu.add_node_type(layout, "TextureNodeScale")
node_add_menu.add_node_type(layout, "TextureNodeTranslate")
class NODE_MT_category_texture_pattern(Menu):
bl_idname = "NODE_MT_category_texture_pattern"
bl_label = "Pattern"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeBricks")
node_add_menu.add_node_type(layout, "TextureNodeChecker")
class NODE_MT_category_texture_texture(Menu):
bl_idname = "NODE_MT_category_texture_texture"
bl_label = "Texture"
def draw(self, _context):
layout = self.layout
node_add_menu.add_node_type(layout, "TextureNodeTexBlend")
node_add_menu.add_node_type(layout, "TextureNodeTexClouds")
node_add_menu.add_node_type(layout, "TextureNodeTexDistNoise")
node_add_menu.add_node_type(layout, "TextureNodeTexMagic")
node_add_menu.add_node_type(layout, "TextureNodeTexMarble")
node_add_menu.add_node_type(layout, "TextureNodeTexMusgrave")
node_add_menu.add_node_type(layout, "TextureNodeTexNoise")
node_add_menu.add_node_type(layout, "TextureNodeTexStucci")
node_add_menu.add_node_type(layout, "TextureNodeTexVoronoi")
node_add_menu.add_node_type(layout, "TextureNodeTexWood")
class NODE_MT_category_texture_group(Menu):
bl_idname = "NODE_MT_category_texture_group"
bl_label = "Group"
def draw(self, context):
layout = self.layout
node_add_menu.draw_node_group_add_menu(context, layout)
class NODE_MT_texture_node_add_all(Menu):
bl_idname = "NODE_MT_texture_node_add_all"
bl_label = "Add"
def draw(self, _context):
layout = self.layout
layout.menu("NODE_MT_category_texture_input")
layout.menu("NODE_MT_category_texture_output")
layout.separator()
layout.menu("NODE_MT_category_texture_color")
layout.menu("NODE_MT_category_texture_converter")
layout.menu("NODE_MT_category_texture_distort")
layout.menu("NODE_MT_category_texture_pattern")
layout.menu("NODE_MT_category_texture_texture")
layout.separator()
layout.menu("NODE_MT_category_texture_group")
layout.menu("NODE_MT_category_layout")
classes = (
NODE_MT_texture_node_add_all,
NODE_MT_category_texture_input,
NODE_MT_category_texture_output,
NODE_MT_category_texture_color,
NODE_MT_category_texture_converter,
NODE_MT_category_texture_distort,
NODE_MT_category_texture_pattern,
NODE_MT_category_texture_texture,
NODE_MT_category_texture_group,
)
if __name__ == "__main__": # only for live edit.
from bpy.utils import register_class
for cls in classes:
register_class(cls)

View File

@ -243,6 +243,10 @@ class NODE_MT_add(bpy.types.Menu):
props = layout.operator("node.add_search", text="Search...", icon='VIEWZOOM')
layout.separator()
layout.menu_contents("NODE_MT_shader_node_add_all")
elif snode.tree_type == 'TextureNodeTree':
props = layout.operator("node.add_search", text="Search...", icon='VIEWZOOM')
layout.separator()
layout.menu_contents("NODE_MT_texture_node_add_all")
elif nodeitems_utils.has_node_categories(context):
props = layout.operator("node.add_search", text="Search...", icon='VIEWZOOM')
props.use_transform = True

View File

@ -36,13 +36,6 @@ class ShaderNodeCategory(SortedNodeCategory):
context.space_data.tree_type == 'ShaderNodeTree')
class TextureNodeCategory(SortedNodeCategory):
@classmethod
def poll(cls, context):
return (context.space_data.type == 'NODE_EDITOR' and
context.space_data.tree_type == 'TextureNodeTree')
# Menu entry for node group tools.
def group_tools_draw(_self, layout, _context):
layout.operator("node.group_make")
@ -101,69 +94,12 @@ def group_input_output_item_poll(context):
return False
texture_node_categories = [
# Texture Nodes
TextureNodeCategory("TEX_INPUT", "Input", items=[
NodeItem("TextureNodeCurveTime"),
NodeItem("TextureNodeCoordinates"),
NodeItem("TextureNodeTexture"),
NodeItem("TextureNodeImage"),
]),
TextureNodeCategory("TEX_OUTPUT", "Output", items=[
NodeItem("TextureNodeOutput"),
NodeItem("TextureNodeViewer"),
]),
TextureNodeCategory("TEX_OP_COLOR", "Color", items=[
NodeItem("TextureNodeMixRGB"),
NodeItem("TextureNodeCurveRGB"),
NodeItem("TextureNodeInvert"),
NodeItem("TextureNodeHueSaturation"),
NodeItem("TextureNodeCombineColor"),
NodeItem("TextureNodeSeparateColor"),
]),
TextureNodeCategory("TEX_PATTERN", "Pattern", items=[
NodeItem("TextureNodeChecker"),
NodeItem("TextureNodeBricks"),
]),
TextureNodeCategory("TEX_TEXTURE", "Textures", items=[
NodeItem("TextureNodeTexNoise"),
NodeItem("TextureNodeTexDistNoise"),
NodeItem("TextureNodeTexClouds"),
NodeItem("TextureNodeTexBlend"),
NodeItem("TextureNodeTexVoronoi"),
NodeItem("TextureNodeTexMagic"),
NodeItem("TextureNodeTexMarble"),
NodeItem("TextureNodeTexWood"),
NodeItem("TextureNodeTexMusgrave"),
NodeItem("TextureNodeTexStucci"),
]),
TextureNodeCategory("TEX_CONVERTOR", "Converter", items=[
NodeItem("TextureNodeMath"),
NodeItem("TextureNodeValToRGB"),
NodeItem("TextureNodeRGBToBW"),
NodeItem("TextureNodeValToNor"),
NodeItem("TextureNodeDistance"),
]),
TextureNodeCategory("TEX_DISTORT", "Distort", items=[
NodeItem("TextureNodeScale"),
NodeItem("TextureNodeTranslate"),
NodeItem("TextureNodeRotate"),
NodeItem("TextureNodeAt"),
]),
TextureNodeCategory("TEX_GROUP", "Group", items=node_group_items),
TextureNodeCategory("TEX_LAYOUT", "Layout", items=[
NodeItem("NodeFrame"),
NodeItem("NodeReroute"),
]),
]
def register():
nodeitems_utils.register_node_categories('TEXTURE', texture_node_categories)
pass
def unregister():
nodeitems_utils.unregister_node_categories('TEXTURE')
pass
if __name__ == "__main__":