Update
This commit is contained in:
85
2023/scripts/animation_tools/dwpicker/interactionmanager.py
Normal file
85
2023/scripts/animation_tools/dwpicker/interactionmanager.py
Normal file
@@ -0,0 +1,85 @@
|
||||
from .pyside import QtWidgets, QtCore
|
||||
from maya import cmds
|
||||
from .optionvar import ZOOM_BUTTON
|
||||
|
||||
|
||||
class InteractionManager:
|
||||
FLY_OVER = 'fly_over'
|
||||
SELECTION = 'selection'
|
||||
NAVIGATION = 'navigation'
|
||||
DRAGGING = 'dragging'
|
||||
ZOOMING = 'zooming'
|
||||
|
||||
def __init__(self):
|
||||
self.shapes = []
|
||||
self.left_click_pressed = False
|
||||
self.right_click_pressed = False
|
||||
self.middle_click_pressed = False
|
||||
self.mouse_ghost = None
|
||||
self.has_shape_hovered = False
|
||||
self.dragging = False
|
||||
self.anchor = None
|
||||
self.zoom_anchor = None
|
||||
|
||||
@property
|
||||
def ctrl_pressed(self):
|
||||
modifiers = QtWidgets.QApplication.keyboardModifiers()
|
||||
return modifiers == (modifiers | QtCore.Qt.ControlModifier)
|
||||
|
||||
@property
|
||||
def shift_pressed(self):
|
||||
modifiers = QtWidgets.QApplication.keyboardModifiers()
|
||||
return modifiers == (modifiers | QtCore.Qt.ShiftModifier)
|
||||
|
||||
@property
|
||||
def alt_pressed(self):
|
||||
modifiers = QtWidgets.QApplication.keyboardModifiers()
|
||||
return modifiers == (modifiers | QtCore.Qt.AltModifier)
|
||||
|
||||
def update(
|
||||
self,
|
||||
event,
|
||||
pressed=False,
|
||||
has_shape_hovered=False,
|
||||
dragging=False):
|
||||
|
||||
self.dragging = dragging
|
||||
self.has_shape_hovered = has_shape_hovered
|
||||
self.update_mouse(event, pressed)
|
||||
|
||||
def update_mouse(self, event, pressed):
|
||||
if event.button() == QtCore.Qt.LeftButton:
|
||||
self.left_click_pressed = pressed
|
||||
self.anchor = event.pos() if self.dragging else None
|
||||
elif event.button() == QtCore.Qt.RightButton:
|
||||
self.right_click_pressed = pressed
|
||||
elif event.button() == QtCore.Qt.MiddleButton:
|
||||
self.middle_click_pressed = pressed
|
||||
if self.zoom_button_pressed:
|
||||
self.zoom_anchor = event.pos() if pressed else None
|
||||
|
||||
@property
|
||||
def mode(self):
|
||||
if self.dragging:
|
||||
return InteractionManager.DRAGGING
|
||||
elif self.zoom_button_pressed and self.alt_pressed:
|
||||
return InteractionManager.ZOOMING
|
||||
elif self.middle_click_pressed:
|
||||
return InteractionManager.NAVIGATION
|
||||
elif self.left_click_pressed:
|
||||
return InteractionManager.SELECTION
|
||||
self.mouse_ghost = None
|
||||
return InteractionManager.FLY_OVER
|
||||
|
||||
def mouse_offset(self, position):
|
||||
result = position - self.mouse_ghost if self.mouse_ghost else None
|
||||
self.mouse_ghost = position
|
||||
return result or None
|
||||
|
||||
@property
|
||||
def zoom_button_pressed(self):
|
||||
button = cmds.optionVar(query=ZOOM_BUTTON)
|
||||
return any((
|
||||
button == 'left' and self.left_click_pressed,
|
||||
button == 'middle' and self.middle_click_pressed,
|
||||
button == 'right' and self.right_click_pressed))
|
||||
Reference in New Issue
Block a user