Maya MEL-在时间轴中突出显示特定范围 [英] Maya MEL - Highlighting Specific Range in Timeline
问题描述
我是写脚本的新手.在Maya中,我想突出显示时间线中的特定范围,而无需使用shift + LMB清理.我想输入开始/结束值并使脚本选择该范围.那有可能吗?我还没有找到任何解决方案.
I'm new in writing scripts. In Maya, I'd like to highlight a specific range in timeline without shift+LMB scrubbing. I want to enter start/end values and make the script select that range. Is that even possible? I haven't found any solution yet.
谢谢.
推荐答案
这是最大的黑客解决方法-但是在Python中.使用Qt鼠标按下,移动和释放事件,以模仿时间滑块小部件上的鼠标行为以使其选中.我不建议初学者使用它,但至少可以使用.
Here's the biggest hacky workaround there is - in Python however. Using Qt Mouse press, move and release events to mimic the mouse behavior on the time slider widget to have it select. I wouldn't recommend it to a beginner, but at least it works.
在代码中,我暂时更改了时间滑块范围,以最大化要单击的帧的屏幕空间.
In code I'm temporarily changing the time slider range to maximize the screen space for the frames I want to click on.
from maya import mel
from maya import OpenMayaUI as omui
from shiboken2 import wrapInstance
from PySide2 import QtCore, QtGui, QtWidgets
def select_time_slider_range(start, end):
app = QtWidgets.QApplication.instance()
widgetStr = mel.eval('$gPlayBackSlider=$gPlayBackSlider')
ptr = omui.MQtUtil.findControl(widgetStr)
slider = wrapInstance(long(ptr), QtWidgets.QWidget)
slider_width = slider.size().width()
slider_height = slider.size().height()
# Store time slider settings
min_time = cmds.playbackOptions(query=True, minTime=True)
max_time = cmds.playbackOptions(query=True, maxTime=True)
animation_start_time = cmds.playbackOptions(query=True, animationStartTime=True)
animation_end_time = cmds.playbackOptions(query=True, animationEndTime=True)
t = cmds.currentTime(query=True)
# Set the time slider to the range we want so we have
# perfect precision to click at the start and end of the
# time slider.
cmds.playbackOptions(minTime=start)
cmds.playbackOptions(maxTime=end)
a_pos = QtCore.QPoint(0, slider_height / 2.0)
b_pos = QtCore.QPoint(slider_width, slider_height / 2.0)
# Trigger some mouse events on the Time Control
# Somehow we need to have some move events around
# it so the UI correctly understands it stopped
# clicking, etc.
event = QtGui.QMouseEvent(QtCore.QEvent.MouseMove,
a_pos,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.NoModifier)
app.sendEvent(slider, event)
event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
a_pos,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.ShiftModifier)
app.sendEvent(slider, event)
event = QtGui.QMouseEvent(QtCore.QEvent.MouseMove,
b_pos,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.ShiftModifier)
app.sendEvent(slider, event)
event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonRelease,
b_pos,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.ShiftModifier)
app.sendEvent(slider, event)
event = QtGui.QMouseEvent(QtCore.QEvent.MouseMove,
b_pos,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.MouseButton.LeftButton,
QtCore.Qt.NoModifier)
app.sendEvent(slider, event)
app.processEvents()
# Reset time slider settings
cmds.playbackOptions(minTime=min_time)
cmds.playbackOptions(maxTime=max_time)
cmds.playbackOptions(animationStartTime=animation_start_time)
cmds.playbackOptions(animationEndTime=animation_end_time)
cmds.currentTime(t)
select_time_slider_range(-200, 500000)
这篇关于Maya MEL-在时间轴中突出显示特定范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!