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

65 lines
2.2 KiB
Python

from ngSkinTools2 import api, signal
from ngSkinTools2.api import Layer, PasteOperation
from ngSkinTools2.api.session import Session
def action_copy_cut(session, parent, cut):
"""
:type session: Session
:type parent: PySide2.QtWidgets.QWidget
:type cut: bool
"""
from ngSkinTools2.ui import actions
def cut_copy_callback():
if session.state.selectedSkinCluster is None:
return
if session.state.currentLayer.layer is None:
return
influences = session.state.currentLayer.layer.paint_targets
operation = api.copy_weights # type: Callable[[Layer, list], None]
if cut:
operation = api.cut_weights
operation(session.state.currentLayer.layer, influences)
operation_name = "Cut" if cut else "Copy"
result = actions.define_action(parent, operation_name + " weights to clipboard", callback=cut_copy_callback)
@signal.on(session.events.currentLayerChanged, session.events.currentInfluenceChanged, qtParent=parent)
def on_selection_changed():
layer = session.state.currentLayer.layer
result.setEnabled(layer is not None and len(layer.paint_targets) > 0)
return result
def action_paste(session, parent, operation):
"""
:type session: Session
:type parent: PySide2.QtWidgets.QWidget
:type cut: bool
"""
from ngSkinTools2.ui import actions
def paste_callback():
if session.state.currentLayer.layer is None:
return
influences = session.state.currentLayer.layer.paint_targets
api.paste_weights(session.state.currentLayer.layer, operation, influences=influences)
labels = {
PasteOperation.add: 'Paste weights (add to existing)',
PasteOperation.subtract: 'Paste weight (subtract from existing)',
PasteOperation.replace: 'Paste weights (replace existing)',
}
result = actions.define_action(parent, labels[operation], callback=paste_callback)
result.setToolTip("Paste previously copied weights from clipboard")
@signal.on(session.events.currentLayerChanged)
def on_selection_changed():
result.setEnabled(session.state.currentLayer.layer is not None)
return result