Files
Nexus/2023/scripts/rigging_tools/ngskintools2/ui/hotkeys.py
2025-11-24 08:27:50 +08:00

87 lines
2.6 KiB
Python

"""
Global list of hotkey-able functions within the plugin.
These functions will be embedded in end-user's hotkey setup by absolute path (package.function_name)
so the names should not fluctuate.
"""
from ngSkinTools2.api import NamedPaintTarget, PaintTool, WeightsDisplayMode, plugin
from ngSkinTools2.api.paint import MaskDisplayMode
from ngSkinTools2.api.session import session, withSession
from ngSkinTools2.operations.paint import FloodAction, PaintAction
from ngSkinTools2.ui.action import do_action_hotkey
def paint_tool_start():
do_action_hotkey(PaintAction)
def paint_tool_toggle_help():
plugin.ngst2_hotkey(paintContextToggleHelp=True)
def paint_tool_flood():
do_action_hotkey(FloodAction)
def paint_tool_focus_current_influence():
plugin.ngst2_hotkey(paintContextViewFit=True)
def paint_tool_brush_size():
plugin.ngst2_hotkey(paintContextBrushSize=True)
def paint_tool_brush_size_release():
plugin.ngst2_hotkey(paintContextBrushSize=False)
def paint_tool_sample_influence():
plugin.ngst2_hotkey(paintContextSampleInfluence=True)
def paint_tool_sample_influence_release():
plugin.ngst2_hotkey(paintContextSampleInfluence=False)
@withSession
def select_paint_brush_intensity():
from ngSkinTools2.ui.brush_settings_popup import brush_settings_popup
brush_settings_popup(session.paint_tool)
@withSession
def paint_tool_toggle_original_mesh():
paint = session.paint_tool
paint.display_settings.display_node_visible = not paint.display_settings.display_node_visible
session.events.toolChanged.emit()
@withSession
def paint_tool_cycle_weights_display_mode():
"""
cycle current display mode "all influences" -> "current influence" -> "current influence colored"
:return:
"""
paint = session.paint_tool
targets = session.state.currentInfluence.targets
is_mask_mode = targets is not None and len(targets) == 1 and targets[0] == NamedPaintTarget.MASK
settings = paint.display_settings
if is_mask_mode:
settings.mask_display_mode = {
MaskDisplayMode.default_: MaskDisplayMode.color_ramp,
MaskDisplayMode.color_ramp: MaskDisplayMode.default_,
}.get(settings.mask_display_mode, MaskDisplayMode.default_)
else:
settings.weights_display_mode = {
WeightsDisplayMode.allInfluences: WeightsDisplayMode.currentInfluence,
WeightsDisplayMode.currentInfluence: WeightsDisplayMode.currentInfluenceColored,
WeightsDisplayMode.currentInfluenceColored: WeightsDisplayMode.allInfluences,
}.get(settings.weights_display_mode, WeightsDisplayMode.allInfluences)
session.events.toolChanged.emit()