blender/scripts/startup/bl_ui/node_add_menu_texture.py
Pablo Vazquez 5fac8f822b Texture Nodes: Refactor Add menu
Refactor the Add menu in Texture Nodes, with manually created menus,
inspired by Geometry Nodes and more recently Shader and Compositor.

Minor sorting adjustments by splitting categories in groups, with
separators in between groups, and sorted alphabetically.

Unlike other node editors, this menu will not feature assets for the time
being. Doing so would add (more) burden of maintenance to a system
that is deemed end-of-life, and likely to be rewritten before long.

Part of #111746

Pull Request: https://projects.blender.org/blender/blender/pulls/111838
2023-09-05 21:52:31 +02:00

145 lines
5.0 KiB
Python

# 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)