def createStereoCameraRig(rigName=""): """ Create a stereo camera rig. The rig creation call back is called, then specific dynamic attributes are created to track cameras belonging to stereo rigs. If no rigName is set, the default rig tool is used. Return an array [rig root, Left eye camera, right eye camera] """ definitions = None rigRoot = None leftCam = '' rightCam = '' proxyObj = None try: definitions = cmds.stereoRigManager(rigDefinition=rigName) except: stereoCameraErrors.displayError('kNoStereoRigCommand', rigName) try: # Call the creation method dagObjects = stereoCameraUtil.__call(definitions[0], definitions[1], rigName) if dagObjects <> 'Error': try: size = len(dagObjects) # For those users who want to create custom rigs # have the proxy object selected after creation, they need to pass # back a 4th parameter when the rig is created. This 4th parameter # points to the actual object to be selected. # if size == 3 or size == 4: [rigRoot, leftCam, rightCam] = __validateRig(dagObjects[0], dagObjects[1], dagObjects[2]) if size == 4: proxyObj = dagObjects[3] else: stereoCameraErrors.displayError('kRigReturnError', rigName, len(dagObjects)) except: stereoCameraErrors.displayError('kRigReturnNotArray', rigName) except: stereoCameraErrors.displayError('kCannotCreateRig', rigName) if not rigRoot == None: rigTypeName = rigName if rigTypeName == "": rigTypeName = cmds.stereoRigManager(query=True, defaultRig=True) makeStereoCameraRig(rigRoot, rigTypeName, leftCam, rightCam) if proxyObj: rigRoot = proxyObj cmds.select(proxyObj, replace=True) else: cmds.select(rigRoot, replace=True) return [rigRoot, leftCam, rightCam]
def registerThisRig(): """ Registers the rig in Maya's database """ cmds.stereoRigManager(add=[ 'StereoCameraMulti', 'Python', 'maya.app.stereo.stereoCameraComplexRig.createRig' ])
def registerThisRig(): """ Registers the rig in Maya's database """ global rigTypeName cmds.stereoRigManager(add=[ rigTypeName, 'Python', 'maya.app.stereo.stereoCameraDefaultRig.createRig' ]) cmds.stereoRigManager(cameraSetFunc=[ rigTypeName, 'maya.app.stereo.stereoCameraDefaultRig.attachToCameraSet' ])
def findVrayDomeRig(): import maya.cmds as cmds rigs = cmds.stereoRigManager(listRigs=True) print ("Stereo Camera rigs:") for rig in rigs: defs = cmds.stereoRigManager(rigDefinition=rig) print 'Rig "'+ rig +'": (language '+defs[0]+') create callback: '+defs[1] # Check for rig if (rig == "VrayDomemasterStereoCamera"): return 1 return 0
def findDomeRig(): import maya.cmds as cmds rigs = cmds.stereoRigManager(listRigs=True) print ("Stereo Camera rigs:") for rig in rigs: defs = cmds.stereoRigManager(rigDefinition=rig) print 'Rig "'+ rig +'": (language '+defs[0]+') create callback: '+defs[1] #Check for if (rig == "DomeStereoCamera"): return 1 return 0
def gatherCreateMenuUILabels(): rigs = cmds.stereoRigManager(listRigs=True) menuTitle = maya.stringTable['y_stereoCameraMenus.kNewStereoCamera'] menuAnnot = maya.stringTable['y_stereoCameraMenus.kNewStereoCameraAnnot'] rigCount = len(rigs) uiLabels = [] for rig in rigs: label = menuTitle if (rigCount > 1): label = "%s (%s)" % (label, rig) annot = menuAnnot + rig theMenu = stereoCameraUILabel.UILabel( label=label, annotation=annot, command=stereoCameraRig.createStereoCameraRig, command_keywords={'rigName': rig}) uiLabels.append(theMenu) multiRigMgr = multiRig.NamingTemplateManager() for m in multiRigMgr.templates(): label = m.rigName() annot = menuAnnot + label theMenu = stereoCameraUILabel.UILabel(label=label, annotation=annot, command=m.create, command_pack=None) uiLabels.append(theMenu) return uiLabels
def layoutForLayer(self, layer): """ Build the UI for the specified layer. We need to access the UI data later in callbacks. So we store the data inside a dictionary for reference layer. """ ui = {} #frlt = cmds.frameLayout( collapsable=True, borderStyle="out", label="Layer %d" % layer ) locLayer = maya.stringTable['y_cameraSetTool.kLayerNumberString'] frlt = cmds.frameLayout(collapsable=True, label=locLayer + " %d" % layer) ui['frame'] = frlt self._layerFrameUI.append(ui) cmds.columnLayout(adjustableColumn=True) ui['layerPrefix'] = cmds.textFieldGrp( label=maya.stringTable['y_cameraSetTool.kLabelPrefix'], text=self._template.layerPrefixForLayer(layer)) ui['menuGrp'] = cmds.optionMenuGrp( label=maya.stringTable['y_cameraSetTool.kRigType']) opValue = rigTypeLayer = self._template.rigTypeForLayer(layer) rigs = cmds.stereoRigManager(listRigs=True) for r in rigs: cmds.menuItem(label=r) if not opValue in rigs: cmds.menuItem(label=opValue) cmds.optionMenuGrp(ui['menuGrp'], edit=True, value=opValue) # For some reason, the only way I can get the check box to line # up is if I embed it in a form layout. # form = cmds.formLayout() ui['ckbox'] = cmds.checkBox( label=maya.stringTable['y_cameraSetTool.kAutoCreate']) ui['icon'] = cmds.iconTextButton( style="iconOnly", image="removeRenderable.png", annotation=maya.stringTable['y_cameraSetTool.kDelete'], width=20, height=20) cmds.checkBox(ui['ckbox'], edit=True, value=self._template.autoCreateSet(layer)) cmds.formLayout(form, edit=True, attachForm=[(ui['ckbox'], "left", 125), (ui['ckbox'], "top", 0), (ui['ckbox'], "bottom", 0), (ui['icon'], "top", 0), (ui['icon'], "bottom", 0), (ui['icon'], "right", 5)], attachNone=[(ui['ckbox'], "right"), (ui['icon'], "left")]) self._setCallbacks(layer) cmds.setParent('..') cmds.setParent('..') cmds.setParent('..')
def __add(layout, nameBox, langMenu, createBox, createCamSet): name = cmds.textField(nameBox, query=True, text=True) lang = cmds.optionMenu(langMenu, query=True, value=True) create = cmds.textField(createBox, query=True, text=True) camSet = cmds.textField(createCamSet, query=True, text=True) # Multibyte string is not allowed for node name if mel.eval(u'containsMultibyte \"%s\"' % name) == 1: stereoCameraErrors.displayError('kRigToolMultiByteName', arg1=name) return if name == '': stereoCameraErrors.displayError('kRigToolNoName') elif create == '': stereoCameraErrors.displayError('kRigToolNoCreate') elif name in cmds.stereoRigManager(listRigs=True): stereoCameraErrors.displayError('kRigToolAlreadyExists', arg1=name) else: cmds.stereoRigManager(add=[name, lang, create]) cmds.stereoRigManager(cameraSetFunc=[name, camSet]) rebuildUI(layout)
def _getDefinition( rigType ): """ Get the definition for this object. """ definitions = [] if rigType: try: definitions = cmds.stereoRigManager(rigDefinition=rigType) except: stereoCameraErrors.displayError('kNoStereoRigCommand', rigType) return definitions
def addNewArnoldLatLongRig(): import maya.mel as mel import maya.cmds as cmds if (findArnoldLatLongRig() == 0): print( "An ArnoldLatLongStereoCamera rig has been added to the stereoRigManager." ) # Register the ArnoldLatLongStereoCamera rig type # add[rig, language, createProcedure] # cameraSetFunc=[rig,callback] # Add the custom rig #cmds.evalDeferred("cmds.stereoRigManager(add=['ArnoldLatLongStereoCamera', 'Python', 'arnoldLatLongStereoRig.createRig'])") cmds.stereoRigManager(add=[ 'ArnoldLatLongStereoCamera', 'Python', 'arnoldLatLongStereoRig.createRig' ]) # Add the custom callback set for Maya 2011+ mayaVersion = getMayaVersionDome() if (mayaVersion >= 2011): #cmds.evalDeferred("cmds.stereoRigManager(cameraSetFunc=['ArnoldLatLongStereoCamera','arnoldLatLongStereoRig.attachToCameraSet'] )") cmds.stereoRigManager(cameraSetFunc=[ 'ArnoldLatLongStereoCamera', 'arnoldLatLongStereoRig.attachToCameraSet' ]) #Make the new rig the default rig #cmds.evalDeferred("cmds.stereoRigManager(defaultRig='ArnoldLatLongStereoCamera')") cmds.stereoRigManager(defaultRig='ArnoldLatLongStereoCamera') else: print( "An ArnoldLatLongStereoCamera rig already exists in the stereoRigManager." )
def registerThisRig(): """ Registers the rig in Maya's database """ mayaVersion = getMayaVersionDome() if (mayaVersion >= 2011): global rigTypeName cmds.stereoRigManager(add=[rigTypeName, 'Python', 'LatLongStereoRig.createRig']) cmds.stereoRigManager(cameraSetFunc=[rigTypeName, 'LatLongStereoRig.attachToCameraSet']) else: cmds.stereoRigManager(add=['StereoCamera', 'Python', 'maya.app.stereo.stereoCameraDefaultRig.createRig'])
def registerThisRig(): """ Registers the rig in Maya's database """ mayaVersion = getMayaVersionDome() if(mayaVersion >= 2011): global rigTypeName cmds.stereoRigManager(add=[rigTypeName, 'Python', 'domeStereoRig.createRig']) cmds.stereoRigManager(cameraSetFunc=[rigTypeName, 'domeStereoRig.attachToCameraSet']) else: cmds.stereoRigManager(add=['StereoCamera', 'Python', 'maya.app.stereo.stereoCameraDefaultRig.createRig'])
def addNewVrayLatLongRig(): import maya.mel as mel import maya.cmds as cmds if (findVrayLatLongRig() == 0): print ("A VrayLatLongStereoCamera rig has been added to the stereoRigManager.") # Register the VrayLatLongStereoCamera rig type # add[rig, language, createProcedure] # cameraSetFunc=[rig,callback] # Add the custom rig #cmds.evalDeferred("cmds.stereoRigManager(add=['VrayLatLongStereoCamera', 'Python', 'vrayLatLongStereoRig.createRig'])") cmds.stereoRigManager(add=['VrayLatLongStereoCamera', 'Python', 'vrayLatLongStereoRig.createRig']) # Add the custom callback set for Maya 2011+ mayaVersion = getMayaVersionDome() if (mayaVersion >= 2011): #cmds.evalDeferred("cmds.stereoRigManager(cameraSetFunc=['VrayLatLongStereoCamera','vrayLatLongStereoRig.attachToCameraSet'] )") cmds.stereoRigManager(cameraSetFunc=['VrayLatLongStereoCamera','vrayLatLongStereoRig.attachToCameraSet'] ) # Make the new rig the default rig #cmds.evalDeferred("cmds.stereoRigManager(defaultRig='VrayLatLongStereoCamera')") cmds.stereoRigManager(defaultRig='VrayLatLongStereoCamera') else: print ("An VrayLatLongStereoCamera rig already exists in the stereoRigManager.")
def create(self, *args): """ Create the Maya nodes per the specification of this template. """ if self.checkMultibyte(): return rigs = cmds.stereoRigManager(listRigs=True) defaultCam = cmds.stereoRigManager(query=True, defaultRig=True) standardDefault = defaultRigType.rigTypeName swapWithDefault = False askedUserAlready = False for i in range(self.layers()): rtype = self.rigTypeForLayer(i) if rtype not in rigs: if rtype == standardDefault and defaultCam != standardDefault: # Check to make sure we haven't already asked the user # for this create call. There are multiple layers # of a multi-rig and we don't want to ask the user # the same question multiple times. # if not askedUserAlready: swapWithDefault = swapDefault(standardDefault, defaultCam) askedUserAlready = True if not swapWithDefault: stereoCameraErrors.displayError('kRigNotFound', rtype) return else: stereoCameraErrors.displayError('kRigNotFound', rtype) return camSet = None camSetType = self.cameraSetNodeType() val = cmds.objectType(tagFromType=camSetType) if val > 0: camSet = cmds.createNode(camSetType, name=self._templateName) else: stereoCameraErrors.displayError('kCameraSetNotFound', camSetType) return masterPrefix = self._camSetPrefix.replace(' ', '_') uniqueRigs = [] for i in range(self.layers()): rtype = self.rigTypeForLayer(i) if rtype == standardDefault and swapWithDefault: rtype = defaultCam stereoCameraErrors.displayWarning('kDefaultRigSwap', rtype) if rtype not in uniqueRigs: uniqueRigs.append(rtype) layerPrefix = self.layerPrefixForLayer(i).replace(' ', '_') prefix = masterPrefix + layerPrefix autoCreateSet = self.autoCreateSet(i) rig = stereoCameraRig.createStereoCameraRig(rtype) objSet = None if autoCreateSet: objSet = cmds.createNode('objectSet', name=prefix + 'Set') stereoCameraSets.addNewRigToSet(rig[0], camSet, objSet) baseName = rig[0] for r in rig: cmds.rename(r, r.replace(baseName, prefix)) # Notify once to all unique rigs that we have finished # building the multi rig. # for u in uniqueRigs: stereoCameraSets.notifyCameraSetCreateFinished(camSet, u)
def __changeCameraSetProcedure(layout, control, rig): cb = cmds.textField(control, query=True, text=True) cmds.stereoRigManager(cameraSetFunc=[rig, cb])
def __changeProcedure(layout, control, rig): create = cmds.textField(control, query=True, text=True) cmds.stereoRigManager(creationProcedure=[rig, create])
def __delete(layout, control, rig): cmds.stereoRigManager(delete=rig) rebuildUI(layout)
def __changeLang(layout, control, rig): lang = cmds.optionMenu(control, query=True, value=True) cmds.stereoRigManager(language=[rig, lang])
def getDefaultRig(): stereoCameraUtil.runCallbackChecks() return cmds.stereoRigManager(query=True, defaultRig=True)
def buildMainToolUI(): "Build the UI for this window" layout = cmds.columnLayout() cmds.frameLayout(label=maya.stringTable['y_stereoRigToolEditor.kEdit']) cmds.columnLayout() cmds.separator(height=5, style='none') mode = 'maya' rigTools = cmds.stereoRigManager(listRigs=True) for rig in rigTools: definition = cmds.stereoRigManager(rigDefinition=rig) print definition [name, menu, text, text2] = __oneItem(layout, rig, definition, mode) if mode == 'maya': cmds.textField(text, edit=True, enable=False) cmds.textField(text2, edit=True, enable=False) cmds.optionMenu(menu, edit=True, enable=False, value=definition[0]) else: cmds.textField(text, edit=True, changeCommand=__buildCB(layout, '__changeProcedure', text, rig)) cmds.textField(text2, edit=True, changeCommand=__buildCB( layout, '__changeCameraSetProcedure', text2, rig)) cmds.optionMenu(menu, edit=True, value=definition[0], changeCommand=__buildCB(layout, '__changeLang', menu, rig)) cmds.separator(height=5, style='none') cmds.separator(width=460) cmds.separator(height=5, style='none') mode = 'custom' cmds.setParent('..') cmds.setParent('..') # Add a last entry to register a new rig cmds.separator(height=8, style='none') cmds.frameLayout(label=maya.stringTable['y_stereoRigToolEditor.kRegister']) cmds.columnLayout() cmds.separator(height=5, style='none') [name, menu, text, text2] = __oneItem(layout, None, ['', '', ''], 'new') cmds.separator(height=5, style='none') cmds.rowColumnLayout(numberOfColumns=2, columnSpacing=[2, 10], columnWidth=[[1, 150], [2, 300]]) cmds.text(label='') btn = cmds.button(label=maya.stringTable['y_stereoRigToolEditor.kNewRig']) btn = cmds.button(btn, edit=True, command=__buildCB2(layout, '__add', name, menu, text, text2)) cmds.setParent('..') cmds.setParent('..') cmds.setParent('..') cmds.setParent('..')
def createVrayLatLongStereoRig(): import maya.cmds as cmds import maya.mel as mel # --------------------------------------------------------------------- # Setup the default Maya Settings # --------------------------------------------------------------------- cmds.loadPlugin("stereoCamera", qt=True) # Make sure the Vray plugin was loaded forceVrayLoad() # Show the Render Settings Window so the Post Translator Action can be loaded mel.eval('unifiedRenderGlobalsWindow;') # Check if the vray settings element exists in the scene domeCreateVraySettingsNode() # --------------------------------------------------------------------- # Create the stereo rig # --------------------------------------------------------------------- #import maya.app.stereo.stereoCameraMenus as stereoCameraMenus #stereoCameraMenus.buildCreateMenu() #import maya.app.stereo.stereoCameraRig #maya.app.stereo.stereoCameraRig.createStereoCameraRig() from maya.app.stereo import stereoCameraRig # Set the default rig to an VrayLatLongStereoCamera cmds.stereoRigManager(defaultRig='VrayLatLongStereoCamera') # Add the camera rig to the scene rig = stereoCameraRig.createStereoCameraRig('VrayLatLongStereoCamera') #[u'VrayLatLongCamera', u'VrayLatLongCameraLeft', u'VrayLatLongCameraRight'] #Get the stereo camera rig shape nodes for the center/right/left cameras rig_center_shape_name = getObjectShapeNode(rig[0]) #[u'stereoCameraCenterCamShape', u'stereoCameraFrustum'] # rig_left_shape_name = getObjectShapeNode(rig[1]) # Result: [u'stereoCameraLeftShape'] # rig_right_shape_name = getObjectShapeNode(rig[2]) # Result: [u'stereoCameraRightShape'] # """ cmds.setAttr( rig[0]+'.rotateX', 90) cmds.setAttr( rig[0]+'.rotateY', 0) cmds.setAttr( rig[0]+'.rotateZ', 0) """ # Changes the render settings to set the stereo camera to be a renderable camera cmds.setAttr(rig_left_shape_name[0] + '.renderable', 1) #stereoCameraLeftShape cmds.setAttr(rig_right_shape_name[0] + '.renderable', 1) #stereoCameraRightShape cmds.setAttr('topShape.renderable', 0) cmds.setAttr('sideShape.renderable', 0) cmds.setAttr('frontShape.renderable', 0) cmds.setAttr('perspShape.renderable', 0) #Set up the default AA sampling quality setDomeSamplingQuality() #--------------------------------------------------------------------------- # Enable Real-time 3D in the OpenGL viewport # using a PreRender and PostRender MEL script #--------------------------------------------------------------------------- #import maya.cmds as cmds #PreRender MEL: #cmds.setAttr( 'defaultRenderGlobals.preMel', "source \"domeRender.mel\"; domemaster3DPreRenderMEL();", type='string') #PostRender MEL: #cmds.setAttr( 'defaultRenderGlobals.postMel' , "source \"domeRender.mel\"; domemaster3DPostRenderMEL();", type='string') #enable realtime 3D #mel.eval("source \"domeRender.mel\"; domemaster3DPostRenderMEL();"); return rig
def createArnoldLatLongStereoRig(): import maya.cmds as cmds import maya.mel as mel # --------------------------------------------------------------------- # Setup the default Maya Settings # --------------------------------------------------------------------- cmds.loadPlugin( "stereoCamera", qt=True ) # Make sure the Arnold plugin was loaded forceArnoldLoad() # --------------------------------------------------------------------- # Create the stereo rig # --------------------------------------------------------------------- #import maya.app.stereo.stereoCameraMenus as stereoCameraMenus #stereoCameraMenus.buildCreateMenu() #import maya.app.stereo.stereoCameraRig #maya.app.stereo.stereoCameraRig.createStereoCameraRig() from maya.app.stereo import stereoCameraRig # Set the default rig to an ArnoldLatLongStereoCamera cmds.stereoRigManager(defaultRig='ArnoldLatLongStereoCamera') # Add the camera rig to the scene rig = stereoCameraRig.createStereoCameraRig('ArnoldLatLongStereoCamera') #[u'ArnoldLatLongCamera', u'ArnoldLatLongCameraLeft', u'ArnoldLatLongCameraRight'] #Get the stereo camera rig shape nodes for the center/right/left cameras rig_center_shape_name = getObjectShapeNode(rig[0]) #[u'stereoCameraCenterCamShape', u'stereoCameraFrustum'] # rig_left_shape_name = getObjectShapeNode(rig[1]) # Result: [u'stereoCameraLeftShape'] # rig_right_shape_name = getObjectShapeNode(rig[2]) # Result: [u'stereoCameraRightShape'] # """ cmds.setAttr( rig[0]+'.rotateX', 90) cmds.setAttr( rig[0]+'.rotateY', 0) cmds.setAttr( rig[0]+'.rotateZ', 0) """ # Changes the render settings to set the stereo camera to be a renderable camera cmds.setAttr( rig_left_shape_name[0]+'.renderable', 1) #stereoCameraLeftShape cmds.setAttr( rig_right_shape_name[0]+'.renderable', 1) #stereoCameraRightShape cmds.setAttr( 'topShape.renderable', 0) cmds.setAttr( 'sideShape.renderable', 0) cmds.setAttr( 'frontShape.renderable', 0) cmds.setAttr( 'perspShape.renderable', 0) #Set up the default AA sampling quality setDomeSamplingQuality() #--------------------------------------------------------------------------- # Enable Real-time 3D in the OpenGL viewport # using a PreRender and PostRender MEL script #--------------------------------------------------------------------------- #import maya.cmds as cmds #PreRender MEL: #cmds.setAttr( 'defaultRenderGlobals.preMel', "source \"domeRender.mel\"; domemaster3DPreRenderMEL();", type='string') #PostRender MEL: #cmds.setAttr( 'defaultRenderGlobals.postMel' , "source \"domeRender.mel\"; domemaster3DPostRenderMEL();", type='string') #enable realtime 3D #mel.eval("source \"domeRender.mel\"; domemaster3DPostRenderMEL();"); return rig
def registerThisRig(): """ Registers the rig in Maya's database """ cmds.stereoRigManager(add=['StereoCameraHier', 'Python', 'maya.app.stereo.stereoCameraHierarchicalRig.createRig'])