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:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user