Nodes: Unify add menus

The general idea is to order all menus as:
```
Common categories
(e.g. Input/output)
---
Specific categories
---
Assets
--
Common categories
(e.g. Group/Layout)
```

## Changes:
### Compositor
- Removed Color/Mix submenu
- Moved Vector to Utilities
- New Category: "Creative". This is where most new assets will fit in.
- Moved to Creative:
	- Kuwahara
    - Pixelate
    - Posterize

### Geo Nodes
- Moved 'Vector' to 'Utilities'
- Moved 'Attribute' before 'Geometry'
- Moved 'Material' to 'Geometry'
- Moved 'Color' to top level, grouped with Utilities

### Shader
- Moved 'Vector' to 'Utilities'
- Deleted 'Converter'
- New 'Displacement' menu
- Grouped 'Color' with Utilities (remains top level)

Ref: https://devtalk.blender.org/t/2025-09-05-design-session-node-groups-different-editors/42244
Pull Request: https://projects.blender.org/blender/blender/pulls/146806
This commit is contained in:
Habib Gahbiche
2025-10-02 11:07:25 +02:00
parent 05a3072e7b
commit 5e0b244066
3 changed files with 146 additions and 84 deletions

View File

@@ -75,18 +75,24 @@ class NODE_MT_compositor_node_output_base(node_add_menu.NodeMenu):
class NODE_MT_compositor_node_color_base(node_add_menu.NodeMenu):
bl_label = "Color"
def draw(self, _context):
def draw(self, context):
layout = self.layout
self.draw_menu(layout, path="Color/Adjust")
layout.separator()
self.draw_menu(layout, path="Color/Mix")
layout.separator()
self.node_operator(layout, "CompositorNodePremulKey")
self.node_operator(layout, "CompositorNodeAlphaOver")
self.node_operator(layout, "CompositorNodeSetAlpha")
layout.separator()
self.node_operator(layout, "CompositorNodeCombineColor")
self.node_operator(layout, "CompositorNodeSeparateColor")
layout.separator()
self.node_operator(layout, "CompositorNodeZcombine")
self.color_mix_node(context, layout)
layout.separator()
self.node_operator(layout, "ShaderNodeBlackbody")
self.node_operator(layout, "ShaderNodeValToRGB")
self.node_operator(layout, "CompositorNodeConvertColorSpace")
self.node_operator(layout, "CompositorNodeConvertToDisplay")
self.node_operator(layout, "CompositorNodeSetAlpha")
layout.separator()
self.node_operator(layout, "CompositorNodeInvert")
self.node_operator(layout, "CompositorNodeRGBToBW")
@@ -119,13 +125,6 @@ class NODE_MT_compositor_node_color_mix_base(node_add_menu.NodeMenu):
def draw(self, context):
layout = self.layout
self.node_operator(layout, "CompositorNodeAlphaOver")
layout.separator()
self.node_operator(layout, "CompositorNodeCombineColor")
self.node_operator(layout, "CompositorNodeSeparateColor")
layout.separator()
self.node_operator(layout, "CompositorNodeZcombine")
self.color_mix_node(context, layout)
self.draw_assets_for_catalog(layout, self.menu_path)
@@ -151,9 +150,6 @@ class NODE_MT_compositor_node_filter_base(node_add_menu.NodeMenu):
self.node_operator_with_searchable_enum_socket(
context, layout, "CompositorNodeGlare", "Type", [
"Bloom", "Ghosts", "Streaks", "Fog Glow", "Simple Star", "Sun Beams", "Kernel"])
self.node_operator(layout, "CompositorNodeKuwahara")
self.node_operator(layout, "CompositorNodePixelate")
self.node_operator(layout, "CompositorNodePosterize")
self.draw_assets_for_catalog(layout, self.bl_label)
@@ -269,11 +265,8 @@ class NODE_MT_compositor_node_utilities_base(node_add_menu.NodeMenu):
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeMapRange")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeMath", "operation")
self.node_operator(layout, "ShaderNodeMix")
self.node_operator(layout, "ShaderNodeClamp")
self.node_operator(layout, "ShaderNodeFloatCurve")
self.draw_menu(layout, path="Utilities/Math")
self.draw_menu(layout, path="Utilities/Vector")
layout.separator()
self.node_operator(layout, "CompositorNodeLevels")
self.node_operator(layout, "CompositorNodeNormalize")
@@ -292,21 +285,54 @@ class NODE_MT_compositor_node_utilities_base(node_add_menu.NodeMenu):
class NODE_MT_compositor_node_vector_base(node_add_menu.NodeMenu):
bl_label = "Vector"
menu_path = "Utilities/Vector"
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeCombineXYZ")
self.node_operator(layout, "ShaderNodeSeparateXYZ")
layout.separator()
props = self.node_operator(layout, "ShaderNodeMapRange")
ops = props.settings.add()
ops.name = "data_type"
ops.value = "'FLOAT_VECTOR'"
props = self.node_operator(layout, "ShaderNodeMix", label="Mix Vector")
ops = props.settings.add()
ops.name = "data_type"
ops.value = "'VECTOR'"
self.node_operator(layout, "ShaderNodeSeparateXYZ")
layout.separator()
self.node_operator(layout, "ShaderNodeRadialTiling")
self.node_operator(layout, "ShaderNodeVectorCurve")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeVectorMath", "operation")
self.node_operator(layout, "ShaderNodeVectorRotate")
self.draw_assets_for_catalog(layout, self.menu_path)
class NODE_MT_compositor_node_math_base(node_add_menu.NodeMenu):
bl_label = "Math"
menu_path = "Utilities/Math"
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeClamp")
self.node_operator(layout, "ShaderNodeFloatCurve")
self.node_operator(layout, "ShaderNodeMapRange")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeMath", "operation")
self.node_operator(layout, "ShaderNodeMix")
self.draw_assets_for_catalog(layout, self.menu_path)
class NODE_MT_compositor_node_creative_base(node_add_menu.NodeMenu):
bl_label = "Creative"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "CompositorNodeKuwahara")
self.node_operator(layout, "CompositorNodePixelate")
self.node_operator(layout, "CompositorNodePosterize")
self.draw_assets_for_catalog(layout, self.bl_label)
@@ -325,6 +351,7 @@ class NODE_MT_compositor_node_all_base(node_add_menu.NodeMenu):
self.draw_menu(layout, "Output")
layout.separator()
self.draw_menu(layout, "Color")
self.draw_menu(layout, "Creative")
self.draw_menu(layout, "Filter")
layout.separator()
self.draw_menu(layout, "Keying")
@@ -335,13 +362,12 @@ class NODE_MT_compositor_node_all_base(node_add_menu.NodeMenu):
self.draw_menu(layout, "Texture")
self.draw_menu(layout, "Transform")
self.draw_menu(layout, "Utilities")
self.draw_menu(layout, "Vector")
layout.separator()
self.draw_root_assets(layout)
layout.separator()
self.draw_menu(layout, "Group")
self.draw_menu(layout, "Layout")
self.draw_root_assets(layout)
add_menus = {
# menu bl_idname: baseclass
@@ -351,9 +377,9 @@ add_menus = {
"NODE_MT_category_compositor_output": NODE_MT_compositor_node_output_base,
"NODE_MT_category_compositor_color": NODE_MT_compositor_node_color_base,
"NODE_MT_category_compositor_color_adjust": NODE_MT_compositor_node_color_adjust_base,
"NODE_MT_category_compositor_color_mix": NODE_MT_compositor_node_color_mix_base,
"NODE_MT_category_compositor_filter": NODE_MT_compositor_node_filter_base,
"NODE_MT_category_compositor_filter_blur": NODE_MT_compositor_node_filter_blur_base,
"NODE_MT_category_compositor_creative": NODE_MT_compositor_node_creative_base,
"NODE_MT_category_compositor_texture": NODE_MT_compositor_node_texture_base,
"NODE_MT_category_compositor_keying": NODE_MT_compositor_node_keying_base,
"NODE_MT_category_compositor_mask": NODE_MT_compositor_node_mask_base,
@@ -361,6 +387,7 @@ add_menus = {
"NODE_MT_category_compositor_transform": NODE_MT_compositor_node_transform_base,
"NODE_MT_category_compositor_utilities": NODE_MT_compositor_node_utilities_base,
"NODE_MT_category_compositor_vector": NODE_MT_compositor_node_vector_base,
"NODE_MT_category_compositor_math": NODE_MT_compositor_node_math_base,
"NODE_MT_compositor_node_add_all": NODE_MT_compositor_node_all_base,
}
add_menus = node_add_menu.generate_menus(
@@ -378,9 +405,9 @@ swap_menus = {
"NODE_MT_compositor_node_output_swap": NODE_MT_compositor_node_output_base,
"NODE_MT_compositor_node_color_swap": NODE_MT_compositor_node_color_base,
"NODE_MT_compositor_node_color_adjust_swap": NODE_MT_compositor_node_color_adjust_base,
"NODE_MT_compositor_node_color_mix_swap": NODE_MT_compositor_node_color_mix_base,
"NODE_MT_compositor_node_filter_swap": NODE_MT_compositor_node_filter_base,
"NODE_MT_compositor_node_filter_blur_swap": NODE_MT_compositor_node_filter_blur_base,
"NODE_MT_category_compositor_creative_swap": NODE_MT_compositor_node_creative_base,
"NODE_MT_compositor_node_texture_swap": NODE_MT_compositor_node_texture_base,
"NODE_MT_compositor_node_keying_swap": NODE_MT_compositor_node_keying_base,
"NODE_MT_compositor_node_mask_swap": NODE_MT_compositor_node_mask_base,
@@ -388,6 +415,7 @@ swap_menus = {
"NODE_MT_compositor_node_transform_swap": NODE_MT_compositor_node_transform_base,
"NODE_MT_compositor_node_utilities_swap": NODE_MT_compositor_node_utilities_base,
"NODE_MT_compositor_node_vector_swap": NODE_MT_compositor_node_vector_base,
"NODE_MT_compositor_node_math_swap": NODE_MT_compositor_node_math_base,
"NODE_MT_compositor_node_swap_all": NODE_MT_compositor_node_all_base,
}
swap_menus = node_add_menu.generate_menus(

View File

@@ -25,22 +25,22 @@ class NODE_MT_gn_attribute_base(node_add_menu.NodeMenu):
self.draw_assets_for_catalog(layout, self.bl_label)
class NODE_MT_gn_utilities_color_base(node_add_menu.NodeMenu):
class NODE_MT_gn_color_base(node_add_menu.NodeMenu):
bl_label = "Color"
menu_path = "Utilities/Color"
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeBlackbody")
self.node_operator(layout, "ShaderNodeGamma")
self.node_operator(layout, "ShaderNodeValToRGB")
self.node_operator(layout, "ShaderNodeRGBCurve")
self.color_mix_node(context, layout)
layout.separator()
self.node_operator(layout, "FunctionNodeCombineColor")
self.color_mix_node(context, layout)
self.node_operator(layout, "FunctionNodeSeparateColor")
self.draw_assets_for_catalog(layout, self.menu_path)
self.draw_assets_for_catalog(layout, self.bl_label)
class NODE_MT_gn_curve_base(node_add_menu.NodeMenu):
@@ -218,6 +218,7 @@ class NODE_MT_gn_geometry_base(node_add_menu.NodeMenu):
self.draw_menu(layout, path="Geometry/Sample")
self.draw_menu(layout, path="Geometry/Write")
layout.separator()
self.draw_menu(layout, path="Geometry/Material")
self.draw_menu(layout, path="Geometry/Operations")
layout.separator()
self.node_operator(layout, "GeometryNodeGeometryToInstance")
@@ -428,6 +429,7 @@ class NODE_MT_gn_instance_base(node_add_menu.NodeMenu):
class NODE_MT_gn_material_base(node_add_menu.NodeMenu):
bl_label = "Material"
menu_path = "Geometry/Material"
def draw(self, _context):
layout = self.layout
@@ -439,7 +441,7 @@ class NODE_MT_gn_material_base(node_add_menu.NodeMenu):
self.node_operator(layout, "GeometryNodeSetMaterial", search_weight=1.0)
self.node_operator(layout, "GeometryNodeSetMaterialIndex")
self.draw_assets_for_catalog(layout, self.bl_label)
self.draw_assets_for_catalog(layout, self.menu_path)
class NODE_MT_gn_mesh_base(node_add_menu.NodeMenu):
@@ -682,19 +684,17 @@ class NODE_MT_gn_utilities_base(node_add_menu.NodeMenu):
def draw(self, context):
layout = self.layout
self.draw_menu(layout, path="Utilities/Color")
self.draw_menu(layout, path="Utilities/Math")
self.draw_menu(layout, path="Utilities/Text")
self.draw_menu(layout, path="Utilities/Vector")
layout.separator()
self.draw_menu(layout, path="Utilities/Bundle")
self.draw_menu(layout, path="Utilities/Closure")
self.draw_menu(layout, path="Utilities/Field")
self.draw_menu(layout, path="Utilities/Math")
if context.preferences.experimental.use_geometry_nodes_lists:
self.draw_menu(layout, path="Utilities/List")
self.draw_menu(layout, path="Utilities/Matrix")
self.draw_menu(layout, path="Utilities/Rotation")
self.draw_menu(layout, path="Utilities/Deprecated")
layout.separator()
self.for_each_element_zone(layout, label="For Each Element")
self.node_operator(layout, "GeometryNodeIndexSwitch")
@@ -702,8 +702,10 @@ class NODE_MT_gn_utilities_base(node_add_menu.NodeMenu):
self.node_operator(layout, "FunctionNodeRandomValue")
self.repeat_zone(layout, label="Repeat")
self.node_operator(layout, "GeometryNodeSwitch")
layout.separator()
self.draw_assets_for_catalog(layout, self.bl_label)
layout.separator()
self.draw_menu(layout, path="Utilities/Deprecated")
class NODE_MT_gn_utilities_deprecated_base(node_add_menu.NodeMenu):
@@ -863,17 +865,22 @@ class NODE_MT_gn_utilities_vector_base(node_add_menu.NodeMenu):
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeRadialTiling")
self.node_operator(layout, "ShaderNodeVectorCurve")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeVectorMath", "operation")
self.node_operator(layout, "ShaderNodeVectorRotate")
layout.separator()
self.node_operator(layout, "ShaderNodeCombineXYZ")
props = self.node_operator(layout, "ShaderNodeMapRange")
ops = props.settings.add()
ops.name = "data_type"
ops.value = "'FLOAT_VECTOR'"
props = self.node_operator(layout, "ShaderNodeMix", label="Mix Vector")
ops = props.settings.add()
ops.name = "data_type"
ops.value = "'VECTOR'"
layout.separator()
self.node_operator(layout, "ShaderNodeSeparateXYZ")
self.node_operator(layout, "ShaderNodeRadialTiling")
self.node_operator(layout, "ShaderNodeVectorCurve")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeVectorMath", "operation")
self.node_operator(layout, "ShaderNodeVectorRotate")
self.draw_assets_for_catalog(layout, self.menu_path)
@@ -969,10 +976,10 @@ class NODE_MT_gn_all_base(node_add_menu.NodeMenu):
def draw(self, context):
del context
layout = self.layout
self.draw_menu(layout, "Attribute")
self.draw_menu(layout, "Input")
self.draw_menu(layout, "Output")
layout.separator()
self.draw_menu(layout, "Attribute")
self.draw_menu(layout, "Geometry")
layout.separator()
self.draw_menu(layout, "Curve")
@@ -984,15 +991,15 @@ class NODE_MT_gn_all_base(node_add_menu.NodeMenu):
layout.separator()
self.draw_menu(layout, "Simulation")
layout.separator()
self.draw_menu(layout, "Material")
self.draw_menu(layout, "Color")
self.draw_menu(layout, "Texture")
self.draw_menu(layout, "Utilities")
layout.separator()
self.draw_root_assets(layout)
layout.separator()
self.draw_menu(layout, "Group")
self.draw_menu(layout, "Layout")
self.draw_root_assets(layout)
add_menus = {
# menu bl_idname: baseclass
@@ -1037,10 +1044,10 @@ add_menus = {
"NODE_MT_geometry_node_GEO_VOLUME_WRITE": NODE_MT_gn_volume_write_base,
"NODE_MT_geometry_node_GEO_VOLUME_OPERATIONS": NODE_MT_gn_volume_operations_base,
"NODE_MT_geometry_node_GEO_VOLUME_PRIMITIVES": NODE_MT_gn_volume_primitives_base,
"NODE_MT_geometry_node_GEO_COLOR": NODE_MT_gn_color_base,
"NODE_MT_geometry_node_GEO_MATERIAL": NODE_MT_gn_material_base,
"NODE_MT_category_GEO_TEXTURE": NODE_MT_gn_texture_base,
"NODE_MT_category_GEO_UTILITIES": NODE_MT_gn_utilities_base,
"NODE_MT_geometry_node_GEO_COLOR": NODE_MT_gn_utilities_color_base,
"NODE_MT_category_GEO_TEXT": NODE_MT_gn_utilities_text_base,
"NODE_MT_category_GEO_VECTOR": NODE_MT_gn_utilities_vector_base,
"NODE_MT_category_utilities_bundle": NODE_MT_category_utilities_bundle_base,
@@ -1103,10 +1110,10 @@ swap_menus = {
"NODE_MT_gn_volume_write_swap": NODE_MT_gn_volume_write_base,
"NODE_MT_gn_volume_operations_swap": NODE_MT_gn_volume_operations_base,
"NODE_MT_gn_volume_primitives_swap": NODE_MT_gn_volume_primitives_base,
"NODE_MT_gn_color_swap": NODE_MT_gn_color_base,
"NODE_MT_gn_material_swap": NODE_MT_gn_material_base,
"NODE_MT_gn_texture_swap": NODE_MT_gn_texture_base,
"NODE_MT_gn_utilities_swap": NODE_MT_gn_utilities_base,
"NODE_MT_gn_utilities_color_swap": NODE_MT_gn_utilities_color_base,
"NODE_MT_gn_utilities_text_swap": NODE_MT_gn_utilities_text_base,
"NODE_MT_gn_utilities_vector_swap": NODE_MT_gn_utilities_vector_base,
"NODE_MT_gn_utilities_bundle_swap": NODE_MT_category_utilities_bundle_base,

View File

@@ -298,38 +298,23 @@ class NODE_MT_shader_node_color_base(node_add_menu.NodeMenu):
def draw(self, context):
layout = self.layout
layout.separator()
self.node_operator(layout, "ShaderNodeBlackbody")
self.node_operator(layout, "ShaderNodeWavelength")
self.node_operator(layout, "ShaderNodeValToRGB")
self.node_operator(layout, "ShaderNodeBrightContrast")
self.node_operator(layout, "ShaderNodeGamma")
self.node_operator(layout, "ShaderNodeHueSaturation")
self.node_operator(layout, "ShaderNodeInvert")
self.node_operator(layout, "ShaderNodeLightFalloff")
self.color_mix_node(context, layout)
self.node_operator(layout, "ShaderNodeRGBCurve")
self.draw_assets_for_catalog(layout, self.bl_label)
class NODE_MT_shader_node_converter_base(node_add_menu.NodeMenu):
bl_label = "Converter"
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeBlackbody")
self.node_operator(layout, "ShaderNodeClamp")
self.node_operator(layout, "ShaderNodeValToRGB")
self.color_mix_node(context, layout)
layout.separator()
self.node_operator(layout, "ShaderNodeCombineColor")
self.node_operator(layout, "ShaderNodeCombineXYZ")
self.node_operator(layout, "ShaderNodeFloatCurve")
self.node_operator(layout, "ShaderNodeMapRange")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeMath", "operation")
self.node_operator(layout, "ShaderNodeMix")
self.node_operator(layout, "ShaderNodeRGBToBW")
self.node_operator(layout, "ShaderNodeSeparateColor")
self.node_operator(layout, "ShaderNodeSeparateXYZ")
layout.separator()
self.node_operator(layout, "ShaderNodeRGBToBW")
self.node_operator(layout, "ShaderNodeShaderToRGB", poll=object_eevee_shader_nodes_poll(context))
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeVectorMath", "operation")
self.node_operator(layout, "ShaderNodeWavelength")
self.draw_assets_for_catalog(layout, self.bl_label)
@@ -359,26 +344,47 @@ class NODE_MT_shader_node_texture_base(node_add_menu.NodeMenu):
class NODE_MT_shader_node_vector_base(node_add_menu.NodeMenu):
bl_label = "Vector"
menu_path = "Utilities/Vector"
def draw(self, _context):
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeBump")
self.node_operator(layout, "ShaderNodeDisplacement")
self.node_operator(layout, "ShaderNodeMapping")
self.node_operator(layout, "ShaderNodeCombineXYZ")
props = self.node_operator(layout, "ShaderNodeMapRange")
ops = props.settings.add()
ops.name = "data_type"
ops.value = "'FLOAT_VECTOR'"
props = self.node_operator(layout, "ShaderNodeMix", label="Mix Vector")
ops = props.settings.add()
ops.name = "data_type"
ops.value = "'VECTOR'"
self.node_operator(layout, "ShaderNodeSeparateXYZ")
layout.separator()
self.node_operator(layout, "ShaderNodeMapping")
self.node_operator(layout, "ShaderNodeNormal")
self.node_operator(layout, "ShaderNodeNormalMap")
self.node_operator(layout, "ShaderNodeRadialTiling")
self.node_operator(layout, "ShaderNodeVectorCurve")
self.node_operator(layout, "ShaderNodeVectorDisplacement")
self.node_operator(layout, "ShaderNodeVectorRotate")
self.node_operator(layout, "ShaderNodeVectorTransform")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeVectorMath", "operation")
self.draw_assets_for_catalog(layout, self.bl_label)
self.draw_assets_for_catalog(layout, self.menu_path)
class NODE_MT_shader_node_math_base(node_add_menu.NodeMenu):
bl_label = "Math"
menu_path = "Utilities/Math"
def draw(self, context):
layout = self.layout
self.node_operator(layout, "ShaderNodeClamp")
self.node_operator(layout, "ShaderNodeFloatCurve")
self.node_operator(layout, "ShaderNodeMapRange")
self.node_operator_with_searchable_enum(context, layout, "ShaderNodeMath", "operation")
self.node_operator(layout, "ShaderNodeMix")
self.draw_assets_for_catalog(layout, self.menu_path)
class NODE_MT_shader_node_script_base(node_add_menu.NodeMenu):
@@ -392,12 +398,29 @@ class NODE_MT_shader_node_script_base(node_add_menu.NodeMenu):
self.draw_assets_for_catalog(layout, self.bl_label)
class NODE_MT_shader_node_displacement_base(node_add_menu.NodeMenu):
bl_label = "Displacement"
def draw(self, _context):
layout = self.layout
self.node_operator(layout, "ShaderNodeBump")
self.node_operator(layout, "ShaderNodeDisplacement")
self.node_operator(layout, "ShaderNodeNormalMap")
self.node_operator(layout, "ShaderNodeVectorDisplacement")
self.draw_assets_for_catalog(layout, self.bl_label)
class NODE_MT_shader_node_utilities_base(node_add_menu.NodeMenu):
bl_label = "Utilities"
def draw(self, context):
layout = self.layout
self.draw_menu(layout, "Utilities/Math")
self.draw_menu(layout, "Utilities/Vector")
layout.separator()
self.repeat_zone(layout, label="Repeat")
layout.separator()
self.closure_zone(layout, label="Closure")
@@ -407,6 +430,8 @@ class NODE_MT_shader_node_utilities_base(node_add_menu.NodeMenu):
layout.separator()
self.node_operator(layout, "GeometryNodeMenuSwitch")
self.draw_assets_for_catalog(layout, self.bl_label)
class NODE_MT_shader_node_all_base(node_add_menu.NodeMenu):
bl_label = ""
@@ -422,30 +447,31 @@ class NODE_MT_shader_node_all_base(node_add_menu.NodeMenu):
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, "Displacement")
self.draw_menu(layout, "Shader")
layout.separator()
self.draw_menu(layout, "Color")
self.draw_menu(layout, "Texture")
self.draw_menu(layout, "Vector")
self.draw_menu(layout, "Utilities")
layout.separator()
self.draw_menu(layout, "Script")
layout.separator()
self.draw_root_assets(layout)
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_shader_input": NODE_MT_shader_node_input_base,
"NODE_MT_category_shader_output": NODE_MT_shader_node_output_base,
"NODE_MT_category_shader_color": NODE_MT_shader_node_color_base,
"NODE_MT_category_shader_converter": NODE_MT_shader_node_converter_base,
"NODE_MT_category_shader_shader": NODE_MT_shader_node_shader_base,
"NODE_MT_category_shader_texture": NODE_MT_shader_node_texture_base,
"NODE_MT_category_shader_displacement": NODE_MT_shader_node_displacement_base,
"NODE_MT_category_shader_vector": NODE_MT_shader_node_vector_base,
"NODE_MT_category_shader_math": NODE_MT_shader_node_math_base,
"NODE_MT_category_shader_script": NODE_MT_shader_node_script_base,
"NODE_MT_category_shader_utilities": NODE_MT_shader_node_utilities_base,
"NODE_MT_shader_node_add_all": NODE_MT_shader_node_all_base,
@@ -462,10 +488,11 @@ swap_menus = {
"NODE_MT_shader_node_input_swap": NODE_MT_shader_node_input_base,
"NODE_MT_shader_node_output_swap": NODE_MT_shader_node_output_base,
"NODE_MT_shader_node_color_swap": NODE_MT_shader_node_color_base,
"NODE_MT_shader_node_converter_swap": NODE_MT_shader_node_converter_base,
"NODE_MT_shader_node_shader_swap": NODE_MT_shader_node_shader_base,
"NODE_MT_shader_node_texture_swap": NODE_MT_shader_node_texture_base,
"NODE_MT_shader_node_displacement_swap": NODE_MT_shader_node_displacement_base,
"NODE_MT_shader_node_vector_swap": NODE_MT_shader_node_vector_base,
"NODE_MT_shader_node_math_swap": NODE_MT_shader_node_math_base,
"NODE_MT_shader_node_script_swap": NODE_MT_shader_node_script_base,
"NODE_MT_shader_node_utilities_swap": NODE_MT_shader_node_utilities_base,
"NODE_MT_shader_node_swap_all": NODE_MT_shader_node_all_base,