Wannes Malfait
1ee8da0246
The node wrangler source code wasn't consistently formatted before, which made it quite annoying to make changes. This formats it with the same formatter used for other python files in blender's source code, so that, in principle, the IDE would already be configured correctly for anyone working on blender. Pull Request #104463
429 lines
23 KiB
Python
429 lines
23 KiB
Python
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import bpy
|
|
from bpy.props import EnumProperty, BoolProperty, StringProperty
|
|
from nodeitems_utils import node_categories_iter
|
|
|
|
from . import operators
|
|
from . import interface
|
|
|
|
from .utils.constants import nice_hotkey_name
|
|
|
|
|
|
# Principled prefs
|
|
class NWPrincipledPreferences(bpy.types.PropertyGroup):
|
|
base_color: StringProperty(
|
|
name='Base Color',
|
|
default='diffuse diff albedo base col color basecolor',
|
|
description='Naming Components for Base Color maps')
|
|
sss_color: StringProperty(
|
|
name='Subsurface Color',
|
|
default='sss subsurface',
|
|
description='Naming Components for Subsurface Color maps')
|
|
metallic: StringProperty(
|
|
name='Metallic',
|
|
default='metallic metalness metal mtl',
|
|
description='Naming Components for metallness maps')
|
|
specular: StringProperty(
|
|
name='Specular',
|
|
default='specularity specular spec spc',
|
|
description='Naming Components for Specular maps')
|
|
normal: StringProperty(
|
|
name='Normal',
|
|
default='normal nor nrm nrml norm',
|
|
description='Naming Components for Normal maps')
|
|
bump: StringProperty(
|
|
name='Bump',
|
|
default='bump bmp',
|
|
description='Naming Components for bump maps')
|
|
rough: StringProperty(
|
|
name='Roughness',
|
|
default='roughness rough rgh',
|
|
description='Naming Components for roughness maps')
|
|
gloss: StringProperty(
|
|
name='Gloss',
|
|
default='gloss glossy glossiness',
|
|
description='Naming Components for glossy maps')
|
|
displacement: StringProperty(
|
|
name='Displacement',
|
|
default='displacement displace disp dsp height heightmap',
|
|
description='Naming Components for displacement maps')
|
|
transmission: StringProperty(
|
|
name='Transmission',
|
|
default='transmission transparency',
|
|
description='Naming Components for transmission maps')
|
|
emission: StringProperty(
|
|
name='Emission',
|
|
default='emission emissive emit',
|
|
description='Naming Components for emission maps')
|
|
alpha: StringProperty(
|
|
name='Alpha',
|
|
default='alpha opacity',
|
|
description='Naming Components for alpha maps')
|
|
ambient_occlusion: StringProperty(
|
|
name='Ambient Occlusion',
|
|
default='ao ambient occlusion',
|
|
description='Naming Components for AO maps')
|
|
|
|
|
|
# Addon prefs
|
|
class NWNodeWrangler(bpy.types.AddonPreferences):
|
|
bl_idname = __package__
|
|
|
|
merge_hide: EnumProperty(
|
|
name="Hide Mix nodes",
|
|
items=(
|
|
("ALWAYS", "Always", "Always collapse the new merge nodes"),
|
|
("NON_SHADER", "Non-Shader", "Collapse in all cases except for shaders"),
|
|
("NEVER", "Never", "Never collapse the new merge nodes")
|
|
),
|
|
default='NON_SHADER',
|
|
description="When merging nodes with the Ctrl+Numpad0 hotkey (and similar) specify whether to collapse them or show the full node with options expanded")
|
|
merge_position: EnumProperty(
|
|
name="Mix Node Position",
|
|
items=(
|
|
("CENTER", "Center", "Place the Mix node between the two nodes"),
|
|
("BOTTOM", "Bottom", "Place the Mix node at the same height as the lowest node")
|
|
),
|
|
default='CENTER',
|
|
description="When merging nodes with the Ctrl+Numpad0 hotkey (and similar) specify the position of the new nodes")
|
|
|
|
show_hotkey_list: BoolProperty(
|
|
name="Show Hotkey List",
|
|
default=False,
|
|
description="Expand this box into a list of all the hotkeys for functions in this addon"
|
|
)
|
|
hotkey_list_filter: StringProperty(
|
|
name=" Filter by Name",
|
|
default="",
|
|
description="Show only hotkeys that have this text in their name",
|
|
options={'TEXTEDIT_UPDATE'}
|
|
)
|
|
show_principled_lists: BoolProperty(
|
|
name="Show Principled naming tags",
|
|
default=False,
|
|
description="Expand this box into a list of all naming tags for principled texture setup"
|
|
)
|
|
principled_tags: bpy.props.PointerProperty(type=NWPrincipledPreferences)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
col = layout.column()
|
|
col.prop(self, "merge_position")
|
|
col.prop(self, "merge_hide")
|
|
|
|
box = layout.box()
|
|
col = box.column(align=True)
|
|
col.prop(
|
|
self,
|
|
"show_principled_lists",
|
|
text='Edit tags for auto texture detection in Principled BSDF setup',
|
|
toggle=True)
|
|
if self.show_principled_lists:
|
|
tags = self.principled_tags
|
|
|
|
col.prop(tags, "base_color")
|
|
col.prop(tags, "sss_color")
|
|
col.prop(tags, "metallic")
|
|
col.prop(tags, "specular")
|
|
col.prop(tags, "rough")
|
|
col.prop(tags, "gloss")
|
|
col.prop(tags, "normal")
|
|
col.prop(tags, "bump")
|
|
col.prop(tags, "displacement")
|
|
col.prop(tags, "transmission")
|
|
col.prop(tags, "emission")
|
|
col.prop(tags, "alpha")
|
|
col.prop(tags, "ambient_occlusion")
|
|
|
|
box = layout.box()
|
|
col = box.column(align=True)
|
|
hotkey_button_name = "Show Hotkey List"
|
|
if self.show_hotkey_list:
|
|
hotkey_button_name = "Hide Hotkey List"
|
|
col.prop(self, "show_hotkey_list", text=hotkey_button_name, toggle=True)
|
|
if self.show_hotkey_list:
|
|
col.prop(self, "hotkey_list_filter", icon="VIEWZOOM")
|
|
col.separator()
|
|
for hotkey in kmi_defs:
|
|
if hotkey[7]:
|
|
hotkey_name = hotkey[7]
|
|
|
|
if self.hotkey_list_filter.lower() in hotkey_name.lower():
|
|
row = col.row(align=True)
|
|
row.label(text=hotkey_name)
|
|
keystr = nice_hotkey_name(hotkey[1])
|
|
if hotkey[4]:
|
|
keystr = "Shift " + keystr
|
|
if hotkey[5]:
|
|
keystr = "Alt " + keystr
|
|
if hotkey[3]:
|
|
keystr = "Ctrl " + keystr
|
|
row.label(text=keystr)
|
|
|
|
|
|
#
|
|
# REGISTER/UNREGISTER CLASSES AND KEYMAP ITEMS
|
|
#
|
|
switch_category_menus = []
|
|
addon_keymaps = []
|
|
# kmi_defs entry: (identifier, key, action, CTRL, SHIFT, ALT, props, nice name)
|
|
# props entry: (property name, property value)
|
|
kmi_defs = (
|
|
# MERGE NODES
|
|
# NWMergeNodes with Ctrl (AUTO).
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_0', 'PRESS', True, False, False,
|
|
(('mode', 'MIX'), ('merge_type', 'AUTO'),), "Merge Nodes (Automatic)"),
|
|
(operators.NWMergeNodes.bl_idname, 'ZERO', 'PRESS', True, False, False,
|
|
(('mode', 'MIX'), ('merge_type', 'AUTO'),), "Merge Nodes (Automatic)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_PLUS', 'PRESS', True, False, False,
|
|
(('mode', 'ADD'), ('merge_type', 'AUTO'),), "Merge Nodes (Add)"),
|
|
(operators.NWMergeNodes.bl_idname, 'EQUAL', 'PRESS', True, False, False,
|
|
(('mode', 'ADD'), ('merge_type', 'AUTO'),), "Merge Nodes (Add)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', True, False, False,
|
|
(('mode', 'MULTIPLY'), ('merge_type', 'AUTO'),), "Merge Nodes (Multiply)"),
|
|
(operators.NWMergeNodes.bl_idname, 'EIGHT', 'PRESS', True, False, False,
|
|
(('mode', 'MULTIPLY'), ('merge_type', 'AUTO'),), "Merge Nodes (Multiply)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_MINUS', 'PRESS', True, False, False,
|
|
(('mode', 'SUBTRACT'), ('merge_type', 'AUTO'),), "Merge Nodes (Subtract)"),
|
|
(operators.NWMergeNodes.bl_idname, 'MINUS', 'PRESS', True, False, False,
|
|
(('mode', 'SUBTRACT'), ('merge_type', 'AUTO'),), "Merge Nodes (Subtract)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_SLASH', 'PRESS', True, False, False,
|
|
(('mode', 'DIVIDE'), ('merge_type', 'AUTO'),), "Merge Nodes (Divide)"),
|
|
(operators.NWMergeNodes.bl_idname, 'SLASH', 'PRESS', True, False, False,
|
|
(('mode', 'DIVIDE'), ('merge_type', 'AUTO'),), "Merge Nodes (Divide)"),
|
|
(operators.NWMergeNodes.bl_idname, 'COMMA', 'PRESS', True, False, False,
|
|
(('mode', 'LESS_THAN'), ('merge_type', 'MATH'),), "Merge Nodes (Less than)"),
|
|
(operators.NWMergeNodes.bl_idname, 'PERIOD', 'PRESS', True, False, False,
|
|
(('mode', 'GREATER_THAN'), ('merge_type', 'MATH'),), "Merge Nodes (Greater than)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_PERIOD', 'PRESS', True, False, False,
|
|
(('mode', 'MIX'), ('merge_type', 'ZCOMBINE'),), "Merge Nodes (Z-Combine)"),
|
|
# NWMergeNodes with Ctrl Alt (MIX or ALPHAOVER)
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_0', 'PRESS', True, False, True,
|
|
(('mode', 'MIX'), ('merge_type', 'ALPHAOVER'),), "Merge Nodes (Alpha Over)"),
|
|
(operators.NWMergeNodes.bl_idname, 'ZERO', 'PRESS', True, False, True,
|
|
(('mode', 'MIX'), ('merge_type', 'ALPHAOVER'),), "Merge Nodes (Alpha Over)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_PLUS', 'PRESS', True, False, True,
|
|
(('mode', 'ADD'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Add)"),
|
|
(operators.NWMergeNodes.bl_idname, 'EQUAL', 'PRESS', True, False, True,
|
|
(('mode', 'ADD'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Add)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', True, False, True,
|
|
(('mode', 'MULTIPLY'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Multiply)"),
|
|
(operators.NWMergeNodes.bl_idname, 'EIGHT', 'PRESS', True, False, True,
|
|
(('mode', 'MULTIPLY'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Multiply)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_MINUS', 'PRESS', True, False, True,
|
|
(('mode', 'SUBTRACT'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Subtract)"),
|
|
(operators.NWMergeNodes.bl_idname, 'MINUS', 'PRESS', True, False, True,
|
|
(('mode', 'SUBTRACT'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Subtract)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_SLASH', 'PRESS', True, False, True,
|
|
(('mode', 'DIVIDE'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Divide)"),
|
|
(operators.NWMergeNodes.bl_idname, 'SLASH', 'PRESS', True, False, True,
|
|
(('mode', 'DIVIDE'), ('merge_type', 'MIX'),), "Merge Nodes (Color, Divide)"),
|
|
# NWMergeNodes with Ctrl Shift (MATH)
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_PLUS', 'PRESS', True, True, False,
|
|
(('mode', 'ADD'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Add)"),
|
|
(operators.NWMergeNodes.bl_idname, 'EQUAL', 'PRESS', True, True, False,
|
|
(('mode', 'ADD'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Add)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', True, True, False,
|
|
(('mode', 'MULTIPLY'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Multiply)"),
|
|
(operators.NWMergeNodes.bl_idname, 'EIGHT', 'PRESS', True, True, False,
|
|
(('mode', 'MULTIPLY'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Multiply)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_MINUS', 'PRESS', True, True, False,
|
|
(('mode', 'SUBTRACT'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Subtract)"),
|
|
(operators.NWMergeNodes.bl_idname, 'MINUS', 'PRESS', True, True, False,
|
|
(('mode', 'SUBTRACT'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Subtract)"),
|
|
(operators.NWMergeNodes.bl_idname, 'NUMPAD_SLASH', 'PRESS', True, True, False,
|
|
(('mode', 'DIVIDE'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Divide)"),
|
|
(operators.NWMergeNodes.bl_idname, 'SLASH', 'PRESS', True, True, False,
|
|
(('mode', 'DIVIDE'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Divide)"),
|
|
(operators.NWMergeNodes.bl_idname, 'COMMA', 'PRESS', True, True, False,
|
|
(('mode', 'LESS_THAN'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Less than)"),
|
|
(operators.NWMergeNodes.bl_idname, 'PERIOD', 'PRESS', True, True, False,
|
|
(('mode', 'GREATER_THAN'), ('merge_type', 'MATH'),), "Merge Nodes (Math, Greater than)"),
|
|
# BATCH CHANGE NODES
|
|
# NWBatchChangeNodes with Alt
|
|
(operators.NWBatchChangeNodes.bl_idname, 'NUMPAD_0', 'PRESS', False, False, True,
|
|
(('blend_type', 'MIX'), ('operation', 'CURRENT'),), "Batch change blend type (Mix)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'ZERO', 'PRESS', False, False, True,
|
|
(('blend_type', 'MIX'), ('operation', 'CURRENT'),), "Batch change blend type (Mix)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'NUMPAD_PLUS', 'PRESS', False, False, True,
|
|
(('blend_type', 'ADD'), ('operation', 'ADD'),), "Batch change blend type (Add)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'EQUAL', 'PRESS', False, False, True,
|
|
(('blend_type', 'ADD'), ('operation', 'ADD'),), "Batch change blend type (Add)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'NUMPAD_ASTERIX', 'PRESS', False, False, True,
|
|
(('blend_type', 'MULTIPLY'), ('operation', 'MULTIPLY'),), "Batch change blend type (Multiply)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'EIGHT', 'PRESS', False, False, True,
|
|
(('blend_type', 'MULTIPLY'), ('operation', 'MULTIPLY'),), "Batch change blend type (Multiply)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'NUMPAD_MINUS', 'PRESS', False, False, True,
|
|
(('blend_type', 'SUBTRACT'), ('operation', 'SUBTRACT'),), "Batch change blend type (Subtract)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'MINUS', 'PRESS', False, False, True,
|
|
(('blend_type', 'SUBTRACT'), ('operation', 'SUBTRACT'),), "Batch change blend type (Subtract)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'NUMPAD_SLASH', 'PRESS', False, False, True,
|
|
(('blend_type', 'DIVIDE'), ('operation', 'DIVIDE'),), "Batch change blend type (Divide)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'SLASH', 'PRESS', False, False, True,
|
|
(('blend_type', 'DIVIDE'), ('operation', 'DIVIDE'),), "Batch change blend type (Divide)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'COMMA', 'PRESS', False, False, True,
|
|
(('blend_type', 'CURRENT'), ('operation', 'LESS_THAN'),), "Batch change blend type (Current)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'PERIOD', 'PRESS', False, False, True,
|
|
(('blend_type', 'CURRENT'), ('operation', 'GREATER_THAN'),), "Batch change blend type (Current)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'DOWN_ARROW', 'PRESS', False, False, True,
|
|
(('blend_type', 'NEXT'), ('operation', 'NEXT'),), "Batch change blend type (Next)"),
|
|
(operators.NWBatchChangeNodes.bl_idname, 'UP_ARROW', 'PRESS', False, False, True,
|
|
(('blend_type', 'PREV'), ('operation', 'PREV'),), "Batch change blend type (Previous)"),
|
|
# LINK ACTIVE TO SELECTED
|
|
# Don't use names, don't replace links (K)
|
|
(operators.NWLinkActiveToSelected.bl_idname, 'K', 'PRESS', False, False, False,
|
|
(('replace', False), ('use_node_name', False), ('use_outputs_names', False),), "Link active to selected (Don't replace links)"),
|
|
# Don't use names, replace links (Shift K)
|
|
(operators.NWLinkActiveToSelected.bl_idname, 'K', 'PRESS', False, True, False,
|
|
(('replace', True), ('use_node_name', False), ('use_outputs_names', False),), "Link active to selected (Replace links)"),
|
|
# Use node name, don't replace links (')
|
|
(operators.NWLinkActiveToSelected.bl_idname, 'QUOTE', 'PRESS', False, False, False,
|
|
(('replace', False), ('use_node_name', True), ('use_outputs_names', False),), "Link active to selected (Don't replace links, node names)"),
|
|
# Use node name, replace links (Shift ')
|
|
(operators.NWLinkActiveToSelected.bl_idname, 'QUOTE', 'PRESS', False, True, False,
|
|
(('replace', True), ('use_node_name', True), ('use_outputs_names', False),), "Link active to selected (Replace links, node names)"),
|
|
# Don't use names, don't replace links (;)
|
|
(operators.NWLinkActiveToSelected.bl_idname, 'SEMI_COLON', 'PRESS', False, False, False,
|
|
(('replace', False), ('use_node_name', False), ('use_outputs_names', True),), "Link active to selected (Don't replace links, output names)"),
|
|
# Don't use names, replace links (')
|
|
(operators.NWLinkActiveToSelected.bl_idname, 'SEMI_COLON', 'PRESS', False, True, False,
|
|
(('replace', True), ('use_node_name', False), ('use_outputs_names', True),), "Link active to selected (Replace links, output names)"),
|
|
# CHANGE MIX FACTOR
|
|
(operators.NWChangeMixFactor.bl_idname, 'LEFT_ARROW', 'PRESS', False,
|
|
False, True, (('option', -0.1),), "Reduce Mix Factor by 0.1"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'RIGHT_ARROW', 'PRESS', False,
|
|
False, True, (('option', 0.1),), "Increase Mix Factor by 0.1"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'LEFT_ARROW', 'PRESS', False,
|
|
True, True, (('option', -0.01),), "Reduce Mix Factor by 0.01"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'RIGHT_ARROW', 'PRESS', False,
|
|
True, True, (('option', 0.01),), "Increase Mix Factor by 0.01"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'LEFT_ARROW', 'PRESS',
|
|
True, True, True, (('option', 0.0),), "Set Mix Factor to 0.0"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'RIGHT_ARROW', 'PRESS',
|
|
True, True, True, (('option', 1.0),), "Set Mix Factor to 1.0"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'NUMPAD_0', 'PRESS',
|
|
True, True, True, (('option', 0.0),), "Set Mix Factor to 0.0"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'ZERO', 'PRESS', True, True, True, (('option', 0.0),), "Set Mix Factor to 0.0"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'NUMPAD_1', 'PRESS', True, True, True, (('option', 1.0),), "Mix Factor to 1.0"),
|
|
(operators.NWChangeMixFactor.bl_idname, 'ONE', 'PRESS', True, True, True, (('option', 1.0),), "Set Mix Factor to 1.0"),
|
|
# CLEAR LABEL (Alt L)
|
|
(operators.NWClearLabel.bl_idname, 'L', 'PRESS', False, False, True, (('option', False),), "Clear node labels"),
|
|
# MODIFY LABEL (Alt Shift L)
|
|
(operators.NWModifyLabels.bl_idname, 'L', 'PRESS', False, True, True, None, "Modify node labels"),
|
|
# Copy Label from active to selected
|
|
(operators.NWCopyLabel.bl_idname, 'V', 'PRESS', False, True, False,
|
|
(('option', 'FROM_ACTIVE'),), "Copy label from active to selected"),
|
|
# DETACH OUTPUTS (Alt Shift D)
|
|
(operators.NWDetachOutputs.bl_idname, 'D', 'PRESS', False, True, True, None, "Detach outputs"),
|
|
# LINK TO OUTPUT NODE (O)
|
|
(operators.NWLinkToOutputNode.bl_idname, 'O', 'PRESS', False, False, False, None, "Link to output node"),
|
|
# SELECT PARENT/CHILDREN
|
|
# Select Children
|
|
(operators.NWSelectParentChildren.bl_idname, 'RIGHT_BRACKET', 'PRESS',
|
|
False, False, False, (('option', 'CHILD'),), "Select children"),
|
|
# Select Parent
|
|
(operators.NWSelectParentChildren.bl_idname, 'LEFT_BRACKET', 'PRESS',
|
|
False, False, False, (('option', 'PARENT'),), "Select Parent"),
|
|
# Add Texture Setup
|
|
(operators.NWAddTextureSetup.bl_idname, 'T', 'PRESS', True, False, False, None, "Add texture setup"),
|
|
# Add Principled BSDF Texture Setup
|
|
(operators.NWAddPrincipledSetup.bl_idname, 'T', 'PRESS', True, True, False, None, "Add Principled texture setup"),
|
|
# Reset backdrop
|
|
(operators.NWResetBG.bl_idname, 'Z', 'PRESS', False, False, False, None, "Reset backdrop image zoom"),
|
|
# Delete unused
|
|
(operators.NWDeleteUnused.bl_idname, 'X', 'PRESS', False, False, True, None, "Delete unused nodes"),
|
|
# Frame Selected
|
|
(operators.NWFrameSelected.bl_idname, 'P', 'PRESS', False, True, False, None, "Frame selected nodes"),
|
|
# Swap Links
|
|
(operators.NWSwapLinks.bl_idname, 'S', 'PRESS', False, False, True, None, "Swap Links"),
|
|
# Preview Node
|
|
(operators.NWPreviewNode.bl_idname, 'LEFTMOUSE', 'PRESS', True, True,
|
|
False, (('run_in_geometry_nodes', False),), "Preview node output"),
|
|
(operators.NWPreviewNode.bl_idname, 'LEFTMOUSE', 'PRESS', False, True,
|
|
True, (('run_in_geometry_nodes', True),), "Preview node output"),
|
|
# Reload Images
|
|
(operators.NWReloadImages.bl_idname, 'R', 'PRESS', False, False, True, None, "Reload images"),
|
|
# Lazy Mix
|
|
(operators.NWLazyMix.bl_idname, 'RIGHTMOUSE', 'PRESS', True, True, False, None, "Lazy Mix"),
|
|
# Lazy Connect
|
|
(operators.NWLazyConnect.bl_idname, 'RIGHTMOUSE', 'PRESS', False, False, True, (('with_menu', False),), "Lazy Connect"),
|
|
# Lazy Connect with Menu
|
|
(operators.NWLazyConnect.bl_idname, 'RIGHTMOUSE', 'PRESS', False,
|
|
True, True, (('with_menu', True),), "Lazy Connect with Socket Menu"),
|
|
# Viewer Tile Center
|
|
(operators.NWViewerFocus.bl_idname, 'LEFTMOUSE', 'DOUBLE_CLICK', False, False, False, None, "Set Viewers Tile Center"),
|
|
# Align Nodes
|
|
(operators.NWAlignNodes.bl_idname, 'EQUAL', 'PRESS', False, True,
|
|
False, None, "Align selected nodes neatly in a row/column"),
|
|
# Reset Nodes (Back Space)
|
|
(operators.NWResetNodes.bl_idname, 'BACK_SPACE', 'PRESS', False, False,
|
|
False, None, "Revert node back to default state, but keep connections"),
|
|
# MENUS
|
|
('wm.call_menu', 'W', 'PRESS', False, True, False, (('name', interface.NodeWranglerMenu.bl_idname),), "Node Wrangler menu"),
|
|
('wm.call_menu', 'SLASH', 'PRESS', False, False, False,
|
|
(('name', interface.NWAddReroutesMenu.bl_idname),), "Add Reroutes menu"),
|
|
('wm.call_menu', 'NUMPAD_SLASH', 'PRESS', False, False, False,
|
|
(('name', interface.NWAddReroutesMenu.bl_idname),), "Add Reroutes menu"),
|
|
('wm.call_menu', 'BACK_SLASH', 'PRESS', False, False, False,
|
|
(('name', interface.NWLinkActiveToSelectedMenu.bl_idname),), "Link active to selected (menu)"),
|
|
('wm.call_menu', 'C', 'PRESS', False, True, False,
|
|
(('name', interface.NWCopyToSelectedMenu.bl_idname),), "Copy to selected (menu)"),
|
|
('wm.call_menu', 'S', 'PRESS', False, True, False,
|
|
(('name', interface.NWSwitchNodeTypeMenu.bl_idname),), "Switch node type menu"),
|
|
)
|
|
|
|
classes = (
|
|
NWPrincipledPreferences, NWNodeWrangler
|
|
)
|
|
|
|
|
|
def register():
|
|
from bpy.utils import register_class
|
|
for cls in classes:
|
|
register_class(cls)
|
|
|
|
# keymaps
|
|
addon_keymaps.clear()
|
|
kc = bpy.context.window_manager.keyconfigs.addon
|
|
if kc:
|
|
km = kc.keymaps.new(name='Node Editor', space_type="NODE_EDITOR")
|
|
for (identifier, key, action, CTRL, SHIFT, ALT, props, nicename) in kmi_defs:
|
|
kmi = km.keymap_items.new(identifier, key, action, ctrl=CTRL, shift=SHIFT, alt=ALT)
|
|
if props:
|
|
for prop, value in props:
|
|
setattr(kmi.properties, prop, value)
|
|
addon_keymaps.append((km, kmi))
|
|
|
|
# switch submenus
|
|
switch_category_menus.clear()
|
|
for cat in node_categories_iter(None):
|
|
if cat.name not in ['Group', 'Script']:
|
|
idname = f"NODE_MT_nw_switch_{cat.identifier}_submenu"
|
|
switch_category_type = type(idname, (bpy.types.Menu,), {
|
|
"bl_space_type": 'NODE_EDITOR',
|
|
"bl_label": cat.name,
|
|
"category": cat,
|
|
"poll": cat.poll,
|
|
"draw": interface.draw_switch_category_submenu,
|
|
})
|
|
|
|
switch_category_menus.append(switch_category_type)
|
|
|
|
bpy.utils.register_class(switch_category_type)
|
|
|
|
|
|
def unregister():
|
|
for cat_types in switch_category_menus:
|
|
bpy.utils.unregister_class(cat_types)
|
|
switch_category_menus.clear()
|
|
|
|
# keymaps
|
|
for km, kmi in addon_keymaps:
|
|
km.keymap_items.remove(kmi)
|
|
addon_keymaps.clear()
|
|
|
|
from bpy.utils import unregister_class
|
|
for cls in classes:
|
|
unregister_class(cls)
|