113 lines
4.3 KiB
Python
113 lines
4.3 KiB
Python
'''
|
|
========================================================================================================================
|
|
Author: Alan Camilo
|
|
www.alancamilo.com
|
|
|
|
Requirements: aTools Package
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
To install aTools, please follow the instructions in the file how_to_install.txt
|
|
|
|
------------------------------------------------------------------------------------------------------------------------
|
|
To unistall aTools, go to menu (the last button on the right), Uninstall
|
|
|
|
========================================================================================================================
|
|
|
|
|
|
Tumble on objects was adapted from:
|
|
|
|
'''
|
|
|
|
from maya import cmds
|
|
from maya import mel
|
|
from aTools.generalTools.aToolsGlobals import aToolsGlobals as G
|
|
from aTools.commonMods import utilMod
|
|
|
|
import math
|
|
|
|
class TumbleOnObjects(object):
|
|
|
|
def __init__(self):
|
|
self.currentLocalTumble = cmds.tumbleCtx ("tumbleContext", query=True, localTumble=True)
|
|
self.unitMultiplier = {"mm": 0.1,
|
|
"cm": 1.0,
|
|
"m" : 100.0,
|
|
"in": 2.54,
|
|
"ft": 30.48,
|
|
"yd": 91.44}
|
|
|
|
def switch(self, onOff):
|
|
|
|
utilMod.killScriptJobs("G.tumbleOnObjectsScriptJobs")
|
|
|
|
if onOff:
|
|
cmds.tumbleCtx ("tumbleContext", edit=True, localTumble=0)
|
|
#scriptJob
|
|
G.tumbleOnObjectsScriptJobs.append(cmds.scriptJob(runOnce = False, killWithScene = False, event =('DragRelease', self.update )))
|
|
G.tumbleOnObjectsScriptJobs.append(cmds.scriptJob(runOnce = False, killWithScene = False, event =('SelectionChanged', self.update )))
|
|
G.tumbleOnObjectsScriptJobs.append(cmds.scriptJob(runOnce = False, killWithScene = False, event =('timeChanged', self.update )))
|
|
|
|
self.update()
|
|
|
|
else:
|
|
cmds.tumbleCtx ("tumbleContext", edit=True, localTumble=self.currentLocalTumble)
|
|
|
|
|
|
def update(self):
|
|
|
|
sel = cmds.ls(selection=True)
|
|
|
|
if len(sel) > 0:
|
|
|
|
sel = sel[-1]
|
|
allowedTypes = ["transform", "joint"]
|
|
|
|
if cmds.nodeType(sel) in allowedTypes :
|
|
|
|
currUnit = cmds.currentUnit(query=True, linear=True)
|
|
unitMultiplier = self.unitMultiplier[currUnit]
|
|
isMesh = cmds.listRelatives(sel, allDescendents=True, noIntermediate=True, type="mesh") != None
|
|
|
|
if isMesh:
|
|
bb = cmds.xform(sel, query=True, boundingBox=True, ws=True)
|
|
x = ((bb[0] + bb[3])/2.)
|
|
y = ((bb[1] + bb[4])/2.)
|
|
z = ((bb[2] + bb[5])/2.)
|
|
|
|
else:
|
|
xyz = cmds.xform(sel, query=True, ws=True, rotatePivot=True)
|
|
x = xyz[0]
|
|
y = xyz[1]
|
|
z = xyz[2]
|
|
|
|
|
|
x = x * unitMultiplier
|
|
y = y * unitMultiplier
|
|
z = z * unitMultiplier
|
|
cams = cmds.ls(dag=True, cameras=True )
|
|
|
|
"""
|
|
for loopCam in cams:
|
|
if math.isnan(cmds.getAttr("%s.centerOfInterest"%loopCam)):
|
|
print "center is NAN"
|
|
|
|
if math.isnan(x) or math.isnan(y) or math.isnan(z):
|
|
print "tumble returns"
|
|
print xyz
|
|
for cam in cams:
|
|
t = cmds.xform(cam, query=True, ws=True, rotatePivot=True)
|
|
print cam, t
|
|
return
|
|
"""
|
|
|
|
cmds.undoInfo(stateWithoutFlush=False)
|
|
|
|
for loopCam in cams:
|
|
try: cmds.setAttr("%s.tumblePivot"%loopCam, x, y, z)
|
|
except: pass
|
|
|
|
cmds.undoInfo(stateWithoutFlush=True)
|
|
|
|
|
|
|
|
|