Files
test2/scripts/startup/bl_ui/node_add_menu_texture.py

168 lines
5.7 KiB
Python

# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
from bpy.types import Menu
from bpy.app.translations import (
contexts as i18n_contexts,
)
from bl_ui import node_add_menu
class NODE_MT_texture_node_input_base(Menu):
bl_label = "Input"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeCoordinates")
self.node_operator(layout, "TextureNodeCurveTime")
self.node_operator(layout, "TextureNodeImage")
self.node_operator(layout, "TextureNodeTexture")
class NODE_MT_texture_node_output_base(Menu):
bl_label = "Output"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeOutput")
self.node_operator(layout, "TextureNodeViewer")
class NODE_MT_texture_node_color_base(Menu):
bl_label = "Color"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeHueSaturation")
self.node_operator(layout, "TextureNodeInvert")
self.node_operator(layout, "TextureNodeMixRGB")
self.node_operator(layout, "TextureNodeCurveRGB")
layout.separator()
self.node_operator(layout, "TextureNodeCombineColor")
self.node_operator(layout, "TextureNodeSeparateColor")
class NODE_MT_texture_node_converter_base(Menu):
bl_label = "Converter"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeValToRGB")
self.node_operator(layout, "TextureNodeDistance")
self.node_operator(layout, "TextureNodeMath")
self.node_operator(layout, "TextureNodeRGBToBW")
self.node_operator(layout, "TextureNodeValToNor")
class NODE_MT_texture_node_distort_base(Menu):
bl_label = "Distort"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeAt")
self.node_operator(layout, "TextureNodeRotate")
self.node_operator(layout, "TextureNodeScale")
self.node_operator(layout, "TextureNodeTranslate")
class NODE_MT_texture_node_pattern_base(Menu):
bl_label = "Pattern"
bl_translation_context = i18n_contexts.id_texture
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeBricks")
self.node_operator(layout, "TextureNodeChecker")
class NODE_MT_texture_node_texture_base(Menu):
bl_label = "Texture"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "TextureNodeTexBlend")
self.node_operator(layout, "TextureNodeTexClouds")
self.node_operator(layout, "TextureNodeTexDistNoise")
self.node_operator(layout, "TextureNodeTexMagic")
self.node_operator(layout, "TextureNodeTexMarble")
self.node_operator(layout, "TextureNodeTexMusgrave")
self.node_operator(layout, "TextureNodeTexNoise")
self.node_operator(layout, "TextureNodeTexStucci")
self.node_operator(layout, "TextureNodeTexVoronoi")
self.node_operator(layout, "TextureNodeTexWood")
class NODE_MT_texture_node_all_base(node_add_menu.NodeMenu):
bl_label = ""
menu_path = "Root"
bl_translation_context = i18n_contexts.operator_default
# NOTE: Menus are looked up via their label, this is so that both the Add
# & Swap menus can share the same layout while each using their
# corresponding menus
def draw(self, context):
del context
layout = self.layout
self.draw_menu(layout, "Input")
self.draw_menu(layout, "Output")
layout.separator()
self.draw_menu(layout, "Color")
self.draw_menu(layout, "Converter")
self.draw_menu(layout, "Distort")
self.draw_menu(layout, "Pattern")
self.draw_menu(layout, "Texture")
layout.separator()
self.draw_menu(layout, "Group")
self.draw_menu(layout, "Layout")
self.draw_root_assets(layout)
add_menus = {
# menu bl_idname: baseclass
"NODE_MT_category_texture_input": NODE_MT_texture_node_input_base,
"NODE_MT_category_texture_output": NODE_MT_texture_node_output_base,
"NODE_MT_category_texture_color": NODE_MT_texture_node_color_base,
"NODE_MT_category_texture_converter": NODE_MT_texture_node_converter_base,
"NODE_MT_category_texture_distort": NODE_MT_texture_node_distort_base,
"NODE_MT_category_texture_pattern": NODE_MT_texture_node_pattern_base,
"NODE_MT_category_texture_texture": NODE_MT_texture_node_texture_base,
"NODE_MT_texture_node_add_all": NODE_MT_texture_node_all_base,
}
add_menus = node_add_menu.generate_menus(
add_menus,
template=node_add_menu.AddNodeMenu,
base_dict=node_add_menu.add_base_pathing_dict
)
swap_menus = {
# menu bl_idname: baseclass
"NODE_MT_texture_node_input_swap": NODE_MT_texture_node_input_base,
"NODE_MT_texture_node_output_swap": NODE_MT_texture_node_output_base,
"NODE_MT_texture_node_color_swap": NODE_MT_texture_node_color_base,
"NODE_MT_texture_node_converter_swap": NODE_MT_texture_node_converter_base,
"NODE_MT_texture_node_distort_swap": NODE_MT_texture_node_distort_base,
"NODE_MT_texture_node_pattern_swap": NODE_MT_texture_node_pattern_base,
"NODE_MT_texture_node_texture_swap": NODE_MT_texture_node_texture_base,
"NODE_MT_texture_node_swap_all": NODE_MT_texture_node_all_base,
}
swap_menus = node_add_menu.generate_menus(
swap_menus,
template=node_add_menu.SwapNodeMenu,
base_dict=node_add_menu.swap_base_pathing_dict
)
classes = (
*add_menus,
*swap_menus,
)
if __name__ == "__main__": # only for live edit.
from bpy.utils import register_class
for cls in classes:
register_class(cls)