I’m looking to execute a python script on double click in Maya’s viewport, but seem to be running into a few problems.
Does anyone have experience setting something like this up, or pointers on where I should start.
cheers in advance
I’m looking to execute a python script on double click in Maya’s viewport, but seem to be running into a few problems.
Does anyone have experience setting something like this up, or pointers on where I should start.
cheers in advance
You are into some obscure territory. The Maya api is pretty vast, and I may have missed it, but I don’t know of any easy way to do this. Take a look at Maya API: MPxContext Class Reference
There may also be a way to add an event callback directly to QT if you are using Maya >= 2012, but you’re not going to find a lot of examples.
If found a way, in python moreover :):
import time
DOUBLE_CLICK_MAX_DELTA = 1.0
class doubleClick():
# our static member to keep track of the last click
lastClick = time.time()
# our static method to avoid having to deal with instances
@staticmethod
def clicked():
print "clicked"
currentTime = time.time()
if currentTime - doubleClick.lastClick < DOUBLE_CLICK_MAX_DELTA :
print "double click !"
# to force 2 clicks before the next double click is detected, otherwise if click fast enough all clicks are seen as double clicks
doubleClick.lastClick = 0.0
else :
doubleClick.lastClick = currentTime
return
def main():
cmds.draggerContext( 'dummyName', releaseCommand='doubleClick.clicked()')
cmds.setToolTo('dummyName')
return
main()
You can’t call it twice in the same session because the context created by the first call isn’t destroyed (and that’s what we want :)
I wish Autodesk was reading this.
we really need some improvement to the default native user input events in Maya, and while I haven’t dug into Qt yet, I am sure the libraries must have these features already.
draggerContext has its uses, and can be quite a decent tool, except it’s been left hanging after the migration to Qt and could use a major overhaul.
Yes, its not the best solution. Its slow and depending on Maya’s pleasure…
But its quite simple.
The best way might be to find the widget containing the viewport (among the 10k+ widgets maya’s interface has) and connect its mouse events to your tool slots. But its just guessing.
cheers for the replies, ill update the thread when I have a working version
Does it have to be a double click?
You could get the same functionality by clicking on the viewport with a modifier.
You do not actually have to build a menu to take advantage of executing a command with a viewport mouse button click via popupMenu’s postMenuCommand. Just parent the popupMenu to viewPanes.
cmds.popupMenu( parent=‘viewPanes’, alt=True, SHIFT=True, button=3, pmc = yercommand )