65 lines
2.2 KiB
Python
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
|