Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.29 KB | None | 0 0
  1. import math, sys, string, os
  2.  
  3. import maya.OpenMaya as OpenMaya
  4. import maya.OpenMayaMPx as OpenMayaMPx
  5. import maya.OpenMayaAnim as OpenMayaAnim
  6.  
  7. import maya.cmds as cmds
  8. import maya.mel as mel
  9.  
  10. kPluginTranslatorTypeName = "chan Export/Import"
  11. kVersionNumber = "0.5a"
  12.  
  13. camSel = []
  14. start = []
  15. end = []
  16. win_name = "chan_window"
  17.  
  18. class CustomNodeTranslator(OpenMayaMPx.MPxFileTranslator):  
  19.     def __init__(self):
  20.         OpenMayaMPx.MPxFileTranslator.__init__(self)      
  21.     def haveWriteMethod(self):
  22.         return True
  23.     def haveReadMethod(self):
  24.         return True
  25.     def filter(self):
  26.         return " .chan"
  27.     def defaultExtension(self):
  28.         return "chan"
  29.     def writer( self, fileObject, optionString, accessMode ):
  30.         try:
  31.                        
  32.             fullName = fileObject.fullName()
  33.             fileHandle = open(fullName,"w")
  34.  
  35.             selectList = OpenMaya.MSelectionList()
  36.    
  37.             OpenMaya.MGlobal.getActiveSelectionList(selectList)
  38.             node = OpenMaya.MObject()
  39.             depFn = OpenMaya.MFnDependencyNode()
  40.             path = OpenMaya.MDagPath()
  41.             iterator = OpenMaya.MItSelectionList(selectList)
  42.            
  43.             animationTime = OpenMayaAnim.MAnimControl()
  44.            
  45.             maxTime = int(animationTime.maxTime().value())
  46.             minTime = int(animationTime.minTime().value())
  47.            
  48.             while (iterator.isDone() == 0):
  49.                
  50.                 iterator.getDependNode(node)
  51.                
  52.                 depFn.setObject(node)
  53.                
  54.                 iterator.getDagPath(path, node)
  55.                
  56.                 cameraObject = OpenMaya.MFnCamera(path)
  57.                
  58.                 transform = OpenMaya.MFnTransform(path)
  59.                    
  60.                 chanMe = ChanFileExporter(transform, minTime, maxTime, cameraObject)
  61.  
  62.                 for all in chanMe():
  63.                     fileHandle.write(all)
  64.                    
  65.                 iterator.next()
  66.            
  67.             fileHandle.close()
  68.            
  69.         except:
  70.             sys.stderr.write( "Failed to write file information\n")
  71.             raise
  72.    
  73.     def processLine( self, lineStr ):
  74.  
  75.         self.importTheChan.writeFrameData(lineStr)
  76.        
  77.  
  78. class ChanFileExporter():
  79.     """ module for exporting chan files from application. arguments: object, startFrame, endFrame """
  80.    
  81.     def __init__(self, transform, startAnimation, endAnimation, cameraObj):
  82.         self.fileExport = []
  83.         self.transform = transform
  84.         self.cameraObj = cameraObj
  85.         self.start = startAnimation
  86.         self.end = endAnimation
  87.         self.exportWin()
  88.  
  89.     def exportWin(self):
  90.         self.expWindow = cmds.window(w=150, h=100, title = "Export Selection" )
  91.         cmds.columnLayout( adjustableColumn=True )
  92.         form = cmds.formLayout(numberOfDivisions=100)
  93.         cmds.radioCollection()
  94.         self.chk1 = cmds.radioButton( label='option1', onc = self.opt1On, ofc = self.opt1Off )
  95.         self.chk2 = cmds.radioButton( label='option2', onc = self.opt2On, ofc = self.opt2Off )
  96.         self.okayBtn = cmds.button(label='okay!', command=self.runSel, width=150, height=35)
  97.  
  98.         cmds.formLayout(form, edit=True, attachForm=[\
  99.         (self.chk1, 'top', 15),\
  100.         (self.chk1, 'left', 15),\
  101.         (self.chk2, 'top', 30),\
  102.         (self.chk2, 'left', 15),\
  103.         (self.okayBtn, 'top', 50),\
  104.         (self.okayBtn, 'left', 15)])
  105.  
  106.         cmds.showWindow( self.expWindow )
  107.    
  108.     def opt1On(self,  args):
  109.         print "User checked option1"
  110.        
  111.         startAnimation = cmds.playbackOptions(query=True, minTime=True)
  112.         endAnimation = cmds.playbackOptions(query=True, maxTime=True)
  113.        
  114.         self.start = startAnimation
  115.         self.end = endAnimation
  116.    
  117.     def opt1Off(self,  args):
  118.         print "User un-checked option1"
  119.         cmds.radioButton(self.chk2, edit = True, enable = True)
  120.         self.start = ""
  121.         self.end = ""
  122.        
  123.     def opt2On(self,  args):
  124.         print "User checked option2"
  125.         startAnimation = cmds.findKeyframe(which='first')
  126.         endAnimation = cmds.findKeyframe(which='last')
  127.  
  128.         self.start = startAnimation
  129.         self.end = endAnimation
  130.  
  131.         #self.start.append(int(startAnimation))
  132.         #self.end.append(int(endAnimation))
  133.  
  134.     def opt2Off(self,  args):
  135.         print "User un-checked option2"
  136.         self.start = ""
  137.         self.end = ""
  138.  
  139.     def runSel(self,  args):
  140.         chkVal1 = cmds.radioButton(self.chk1, query=True, sl=1)
  141.         chkVal2 = cmds.radioButton(self.chk2, query=True, sl=1)
  142.        
  143.         if chkVal1 == 1:
  144.             print "opt1 Pressed!"      
  145.             print self.start
  146.             print self.end
  147.             self.test()
  148.             self.closeWindow()
  149.            
  150.         elif chkVal2 == 1:
  151.             print "opt2 Pressed!"
  152.             print self.start
  153.             print self.end
  154.             self.test()
  155.             self.closeWindow()
  156.            
  157.         else:
  158.             cmds.warning("Check an option")
  159.  
  160.     def closeWindow(self):
  161.         cmds.deleteUI(self.expWindow, window=True)
  162.        
  163.     def test(self):
  164.         self.actualExp(self.transform, self.start, self.end, self.cameraObj)
  165.    
  166.    
  167.     def actualExp(self, transform, startAnimation, endAnimation, cameraObj):
  168.         mayaGlobal = OpenMaya.MGlobal()
  169.         mayaGlobal.viewFrame(OpenMaya.MTime(1))
  170.  
  171.         # Converts the float arguement into integer
  172.         for i in range(int(startAnimation), int(endAnimation + 1)):
  173.  
  174.             focalLength = cameraObj.focalLength()
  175.            
  176.             vFilmApp = cameraObj.verticalFilmAperture()
  177.  
  178.             focalOut = 2  math.degrees(math.atan(vFilmApp   25.4/ (2  focalLength)))
  179.  
  180.             myEuler = OpenMaya.MEulerRotation()
  181.             spc = OpenMaya.MSpace.kWorld
  182.  
  183.             trans = transform.getTranslation(spc)
  184.  
  185.             rotation = transform.getRotation(myEuler)
  186.             rotVector = OpenMaya.MVector(myEuler.asVector())
  187.  
  188.             self.fileExport.append((str(i) + '\t' + str(trans[0]) + "\t" + str(trans[1]) + "\t" + str(trans[2]) + "\t" + str(math.degrees(rotVector[0])) + "\t" + str(math.degrees(rotVector[1])) + "\t" + str(math.degrees(rotVector[2])) + "\t" + str(focalOut) + "\n"))
  189.  
  190.             mayaGlobal.viewFrame(OpenMaya.MTime(i+1))
  191.    
  192.     def __call__(self,  args):
  193.         return self.fileExport
  194.  
  195.     def radianToDegree(self, radians):
  196.         outDegrees = 0.0
  197.         outDegrees = (float(radians) / (math.pi)) 180
  198.         return outDegrees
  199.  
  200.  
  201. # creator
  202. def translatorCreator():
  203.     return OpenMayaMPx.asMPxPtr( CustomNodeTranslator() )
  204.  
  205. # initialize the script plug-in
  206. def initializePlugin(mobject):
  207.     mplugin = OpenMayaMPx.MFnPlugin(mobject)
  208.  
  209.     try:
  210.         mplugin.registerFileTranslator(kPluginTranslatorTypeName, None, translatorCreator)
  211.     except:
  212.         sys.stderr.write( "Failed to register translator: %s" % kPluginTranslatorTypeName )
  213.         raise
  214.  
  215. # uninitialize the script plug-in
  216. def uninitializePlugin(mobject):
  217.     mplugin = OpenMayaMPx.MFnPlugin(mobject)
  218.     try:
  219.         mplugin.deregisterFileTranslator( kPluginTranslatorTypeName )
  220.     except:
  221.         sys.stderr.write( "Failed to deregister translator: %s" % kPluginTranslatorTypeName )
  222.         raise
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement