def getCurrentCamera(): ''' Returns the camera that you're currently looking through. If the current highlighted panel isn't a modelPanel, ''' panel = mc.getPanel(withFocus=True) if mc.getPanel(typeOf=panel) != 'modelPanel': #just get the first visible model panel we find, hopefully the correct one. for p in mc.getPanel(visiblePanels=True): if mc.getPanel(typeOf=p) == 'modelPanel': panel = p mc.setFocus(panel) break if mc.getPanel(typeOf=panel) != 'modelPanel': OpenMaya.MGlobal.displayWarning('Please highlight a camera viewport.') return False camShape = mc.modelEditor(panel, query=True, camera=True) if not camShape: return False if mc.nodeType(camShape) == 'transform': return camShape elif mc.nodeType(camShape) == 'camera': return mc.listRelatives(camShape, parent=True)[0]
def takePictureProcess(self, *args): global screenShotPanelVar #get asset name from main textScrollList assetNameVar=cmds.textScrollList('assetTextScroll',q=True,si=True) if assetNameVar==None: cmds.confirmDialog(icn='warning', t='Error', m='No asset selected from asset list.', button=['Ok']) raise StandardError, 'error : no asset selected from asset list' assetNameVar=assetNameVar[0] #determin asset type based on assetName Var assetTypeVar='' for chk in veRegCore.listAssetTable(): if chk[1]==str(assetNameVar): assetTypeVar=chk[2] if assetTypeVar=='': cmds.confirmDialog(icn='warning', t='Error', m='Cannot find record for '+str(assetNameVar)+'!',\ button=['Ok']) raise ValueError, 'error : database anomaly record non exists' #image exporting instruction cmds.select(cl=True) cmds.setFocus(screenShotPanelVar) modelsPanelVar=apiUI.M3dView.active3dView() imageVar=api.MImage() modelsPanelVar.readColorBuffer(imageVar, True) imageVar.writeToFile(assetRootVar+'/'+assetTypeVar+'/'+assetNameVar+'/preview.png','png') #clear preview taking window cmds.layoutDialog(dismiss='SET AS PREVIEW') #refresh self.listLegacyAndPicture() return
def denyDrops(*args): try: from PySide import QtGui import shiboken except: cmds.warning('Cannot import PySide or shiboken, skipping...') return panels = args or cmds.lsUI(panels=True, l=True) or list() for p in panels: if not cmds.objectTypeUI(p) == 'modelEditor': continue cmds.setFocus(p) mp = cmds.playblast(activeEditor=True) mp = omui.MQtUtil.findControl(mp) try: mp = shiboken.wrapInstance(long(mp), QtGui.QWidget) except OverflowError: continue if mp.acceptDrops(): mp.setAcceptDrops(False) om.MGlobal.displayInfo('Denied drops for editor: %s' % p)
def UPDATECONTROLLERfn(self,*args): global NEWNAMEtxtfld, CONTROLLERtxtscr, CACHEsrvr, IMAGEimg, SCRSHTPANEL2var if cmds.textScrollList(CONTROLLERtxtscr,q=True,si=True)==None: cmds.confirmDialog(icon='warning',title='Message',message='Controller not selected', button=['Ok']) cmds.error('NO CONTROLLER SELECTED') REPLYvar=cmds.confirmDialog(icon='question', title='Message',message='This will overwrite the selected file. Proceed?', button=['Yes','No']) if REPLYvar=='Yes': cmds.select(cl=True) cmds.setFocus(SCRSHTPANEL2var) MODELPANELvar=apiUI.M3dView.active3dView() IMAGEvar=api.MImage() MODELPANELvar.readColorBuffer(IMAGEvar, True) IMAGEvar.writeToFile(CACHEsrvr+'/library/'+'ctrlimg_'+cmds.textScrollList(CONTROLLERtxtscr,q=True,si=True)[0][8:]+'.png','png') cmds.file(rename=CACHEsrvr+'library/'+cmds.textScrollList(CONTROLLERtxtscr,q=True,si=True)[0]+'.ma') cmds.file( save=True, type='mayaAscii' ) if os.path.isdir('C:/workspace/library/')==False: os.mkdir('C:/workspace/library/') TIMEvar=cmds.date(f='YYYYYYMMDDhhmmss') cmds.file(rename='C:/workspace/library/'+cmds.textScrollList(CONTROLLERtxtscr,q=True,si=True)[0]+'_'+TIMEvar+'.ma') cmds.file( save=True, type='mayaAscii' ) else: cmds.error('CANCELLED BY USER') return
def cmdRename(self, *args): names = cmds.textScrollList(self.browseForm.scroll, q=True, si=True) if len(names) > 1: message('Too many sets selected', warning=True) else: name = names[0] new = cmds.textField(self.createSetForm.field, q=True, tx=True) if new: path = os.path.join(self.path, new + self.ext) if name != new: if not os.path.isfile(path): os.rename(os.path.join(self.path, name + self.ext), os.path.join(self.path, new + self.ext)) self.populateBrowse() cmds.textScrollList(self.browseForm.scroll, e=True, si=new) cmds.setFocus(self.browseForm.scroll) self.renameUI() else: self.conflictName = new self.rename = name self.overwriteUI() else: self.renameUI() message('Cancelled', maya=True, warning=False) else: message('Enter a new name in the field.', maya=True, warning=True)
def delete_locators(self): try: cmds.setFocus("MayaWindow") selection = cmds.ls(sl=True) if selection: for i in selection: maya_object = i for item in [ self.listWidget.item(i) for i in range(self.listWidget.count()) ]: if item.text() == maya_object: item.setHidden(True) if maya_object in cmds.listRelatives('GSnap', c=True): cmds.delete(maya_object) return msg = QMessageBox() msg.setWindowTitle("X") msg.setText("Delete all Locators?") msg.setWindowIcon(self.icon) msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) text = msg.exec_() if text == msg.Yes: cmds.delete("GSnap") self.listWidget.clear() cmds.setFocus("MayaWindow") except Exception as e: print("GSnap Delete Error ::: " + str(e.message))
def cmdOverwrite(self, *args): new = cmds.textField(self.createSetForm.field, q=True, tx=True) # ensure context hasn't changed if new == self.conflictName: # delete existing file with 'new' name os.remove(os.path.join(self.path, new + self.ext)) # if not self.rename: # if overwriting from create set, need new selection, export selection = cmds.ls(sl=True, fl=True) if selection: selection = ss.outputDict(selection) ss.exportFile(filePath=os.path.join(self.path, new + self.ext), sel=selection) self.conflictName = '' else: # if overwriting from rename set, rename (need current name) os.rename(os.path.join(self.path, self.rename + self.ext), os.path.join(self.path, new + self.ext)) self.rename = False # self.populateBrowse() cmds.textScrollList(self.browseForm.scroll, e=True, si=new) self.renameUI() self.populatePreview() cmds.setFocus(self.browseForm.scroll) message('Select set has been overwritten: ' + new, warning=False) else: self.renameUI() # reset ui cmds.textField(self.createSetForm.field, e=True, tx=new) self.cmdCreate()
def changeViewRendererToVP2(): """ change persp view port display renderer to viewport2 """ persp_panel = "modelPanel4" cmds.setFocus(persp_panel) cmds.modelEditor(persp_panel, rendererName="vp2Renderer", edit=True)
def turnOffCreateNewSetField(self): if not cmds.columnLayout(self.createNewSetLayout, query=True, visible=True): return cmds.iconTextButton (self.plusBtn, edit=True, visible=True, w=25) cmds.columnLayout(self.createNewSetLayout, edit=True, visible=False, w=1) viewports = [view for view in cmds.getPanel(type='modelPanel') if view in cmds.getPanel(visiblePanels=True)] if len(viewports) > 0: cmds.setFocus(viewports[0]) self.adjustButtonsWidth()
def outliner_focus(): outliner = [i for i in cmds.lsUI(editors=1) if 'outliner' in i] if outliner: outliner = outliner[0] else: return cmds.outlinerEditor(outliner, edit=1, showSelected=1) cmds.setFocus(outliner)
def turnOnCreateNewSetField(self): cmds.iconTextButton (self.plusBtn, edit=True, visible=False, w=1) cmds.columnLayout(self.createNewSetLayout, edit=True, visible=True, w=self.createRenameLayoutW) self.turnOffRenameSetField() cmds.textField(self.createNewSetTextField, edit=True, text=self.guessNewSetName()) self.highlightColorSelection() cmds.setFocus(self.createNewSetTextField) self.adjustButtonsWidth()
def changeTarget(): target = cmds.textField(targetField, query=True, text=True) targEx = cmds.objExists(target) if (targEx == True): cmds.setFocus(startField) return target else: print "ERROR: target does not exist" cmds.textField(targetField, edit=True, text="joint, control, etc") return 0
def errorClicked(self, *args): if args[0] is None: return try: selectedItems = ["*" + i.text() for i in args[0].listWidget().selectedItems()] cmds.select(selectedItems, r=True) cmds.setFocus("MayaWindow") except ValueError: """ When channels/attributes/etc are selected, do not try to select """ pass
def generate_python_curve(): not_curve_error = "Please make sure you selected a Nurbs Curve or a Bezier Curve object before generating it" if len(cmds.ls(selection=True)) != 0: getcontext().prec = 5 shape = cmds.listRelatives(cmds.ls(sl=1)[0], s=1, fullPath=True)[0] type_checker = str(cmds.objectType(shape)) if "nurbsCurve" in type_checker or "bezierCurve" in type_checker: cvs = cmds.getAttr(shape + '.cv[*]') cvs_list = [] for c in cvs: cvs_list.append([ float(Decimal("%.3f" % c[0])), float(Decimal("%.3f" % c[1])), float(Decimal("%.3f" % c[2])) ]) if cmds.checkBoxGrp(settings, q=True, value1=True): out = 'import maya.cmds as cmds\n\ncmds.curve(p=' else: out = 'cmds.curve(p=' out += '[%s]' % ', '.join(map(str, cvs_list)) out += ',d=' + str(cmds.getAttr(shape + '.degree')) + ')' if cmds.checkBoxGrp(settings, q=True, value2=True): out += '\n\ncmds.closeCurve(ch=False, ps=False, rpo=True)' else: pass print("#" * 100) print out print("#" * 100) cmds.scrollField(output_python, edit=True, wordWrap=True, text=out, sl=True) cmds.setFocus(output_python) else: cmds.warning(not_curve_error) cmds.scrollField(output_python, edit=True, wordWrap=True, text=not_curve_error, sl=True) cmds.setFocus(output_python) else: cmds.warning(not_curve_error)
def test_parse_active_view(): """Parse active view works""" # Set focus to modelPanel1 (assume it exists) # Otherwise the panel with focus (temporary panel from capture) # got deleted and there's no "active panel" import maya.cmds as cmds cmds.setFocus("modelPanel1") options = capture.parse_active_view() capture.capture(**options)
def update_filter(self, *args, **kwargs): sender = kwargs['sender'] def filter_exp(x): return sender.text in x if sender.text: self.collection.update_filter(filter_exp) else: self.collection.update_filter(None) cmds.setFocus(self.window.main.flt.filter_text)
def set_outliner_persp(self): # set named panel layout self.set_named_panel_layout('Persp/Outliner') # get persp panel perspPanel = cmds.getPanel( withLabel='Persp View') # set foucs to persp panel cmds.setFocus(perspPanel) # set display mode to wireFrame mel.eval('DisplayWireframe') # set low quality display mel.eval('LowQualityDisplay')
def wrapper_function(*args, **kwars): # runs decorated function function_exec = function(*args, **kwars) if not cmds.about(batch=True): logger.debug("Focusing Flex window: {}".format(FLEX_UI_NAME)) # sets focus on Flex window cmds.setFocus(FLEX_UI_NAME) return function_exec
def set_outliner_persp(self): # set named panel layout self.set_named_panel_layout('Persp/Outliner') # get persp panel perspPanel = cmds.getPanel(withLabel='Persp View') # set foucs to persp panel cmds.setFocus(perspPanel) # set display mode to wireFrame mel.eval('DisplayWireframe') # set low quality display mel.eval('LowQualityDisplay')
def __init__(self): # Collect Variables: Paths fullPath = str(cmds.file(sceneName=True, q=True)) self.rootFolder = "/".join(fullPath.split("/")[:-1]) # Collect Variables: SceneName-Parts try: sceneName = fullPath.split("/")[-1] self.assetName = sceneName.split("_")[0] self.taskName = sceneName.split("_")[1] self.artist = vuPipelineHelpers.getArtist() self.sceneType = sceneName.split(".")[-1] except: mayaUtils.errorWindow_NamingConvention() return self.version = "v" + ("000" + str(VersionControl.getLatest(self.rootFolder, up=1, getNum=True)))[-3:] self.window = cmds.window("klPipeline_SaveIncr", title="Krotenlied-Pipeline: SaveScene+1", sizeable=False) # Header cmds.columnLayout(parent=self.window) cmds.image(image = HEADER_PATH) cmds.separator(h=5, vis=True, st='none') cmds.rowColumnLayout(parent=self.window, numberOfColumns=6) # Labels cmds.text( al="left", w=75, label='Name') cmds.text( al="left", w=50, label='Task') cmds.text( al="left", w=50, label='Version' ) cmds.text( al="left", w=40, label='Artist') cmds.text( al="left", w=200, label='Comment') cmds.text( al="left", w=25, label='') # TextFields cmds.textField(ed=False, w=75, tx=self.assetName) cmds.textField(ed=False, w=50, tx=self.taskName) cmds.textField(ed=False, w=50, tx=self.version) cmds.textField(ed=False, w=40, tx=self.artist) self.textComment = cmds.textField(w=200, enterCommand=self.btnSave) cmds.textField(ed=False, w=25, tx="." + self.sceneType) # Button cmds.rowColumnLayout(parent=self.window, numberOfColumns=2) cmds.separator(w=300, h=20, vis=True, st='none') cmds.separator(st='none') cmds.separator(st='none') cmds.button(h=30, w=100, label='Save+1', command=self.btnSave) cmds.showWindow() cmds.setFocus(self.textComment)
def cmd(self): mel.eval('setNamedPanelLayout "Single Perspective View"') cmds.modelEditor('modelPanel4', e=1, twoSidedLighting=0, udm=1) cmds.setFocus('modelPanel4') mel.eval('DisplayShaded') self.cont = u'单视图显示\n' self.cont += u'单个默认灯光\n' self.cont += u'使用默认材质显示\n' self.cont += u'实体显示\n' self.cont += u'\n请检查各物体的法线...\n' return .5
def changeSamples(): samples = cmds.intField(samplesField, query=True, value=True) end = cmds.intField(endField, query=True, value=True) start = cmds.intField(startField, query=True, value=True) # can't be more samples than frame range if ((end-start)>=samples): cmds.setFocus(startField) return samples else: print "ERROR: too many samples for frame range" cmds.intField(samplesField, edit=True, value=end-start) return (end-start)
def turnOffRenameSetField(self): if not cmds.columnLayout(self.renameSetLayout, query=True, visible=True): return self.sortSelSetButtons() viewports = [view for view in cmds.getPanel(type='modelPanel') if view in cmds.getPanel(visiblePanels=True)] self.setToRename = None cmds.columnLayout (self.renameSetLayout, edit=True, visible=False, w=1) if len(viewports) > 0: cmds.setFocus(viewports[0]) self.adjustButtonsWidth()
def errorClicked(self, *args): if args[0] is None: return try: selectedItems = [ "*" + i.text() for i in args[0].listWidget().selectedItems() ] cmds.select(selectedItems, r=True) cmds.setFocus("MayaWindow") except ValueError: """ When channels/attributes/etc are selected, do not try to select """ pass
def doubleClickCmd(self, *args): if cmds.window(self.subWindow, exists=True): cmds.deleteUI(self.subWindow, window=True) self.subWindow = cmds.window(self.subWindow, title=self.subTitle, width=self.subSize[0], height=self.subSize[1]) self.subLayout = cmds.rowColumnLayout(numberOfColumns=1) self.text = cmds.textField(self.focus, width=280, enterCommand=self.applyCmd) cmds.setFocus(self.focus) cmds.showWindow()
def ref_menu_item(nsp, new_nsp): print ('Menu item update received: '+nsp+' - '+new_nsp) if new_nsp == 'Custom...': cmds.setFocus('animlib_ref_'+nsp+'_txt') return if new_nsp == 'Default': cmds.textField('animlib_ref_'+nsp+'_txt', edit=True, text = nsp) else: cmds.textField('animlib_ref_'+nsp+'_txt', edit=True, text = new_nsp) ref_update(None)
def _clearRenameMeshText(self, *args): """ Changes the renameMeshText to the last selected object. """ if not self._hasSelection(): cmds.textField(self._renameMeshText, e=True, tx=' Rename Mesh') cmds.setFocus( self._window) #Prevents focus on textfield when no selection return lastSelected = cmds.ls(sl=True, tl=1)[0] renderMeshName = self._checkRenderMeshName(lastSelected) cmds.textField(self._renameMeshText, e=True, tx=renderMeshName)
def changeStart(): start = cmds.intField(startField, query=True, value=True) end = cmds.intField(endField, query=True, value=True) # start must be less than end if (start < end): cmds.intField(samplesField, edit=True, value=end-start) cmds.setFocus(endField) return start else: print "WARNING: start must be less than end" cmds.intField(samplesField, edit=True, value=4) cmds.intField(endField, edit=True, value=start+1) cmds.setFocus(endField) return end-4
def changeEnd(): end = cmds.intField(endField, query=True, value=True) start = cmds.intField(startField, query=True, value=True) # end must be greater than start if (end > start): cmds.intField(samplesField, edit=True, value=end-start) cmds.setFocus(colourField) return end else: print "WARNING: end must be greater than start" cmds.intField(samplesField, edit=True, value=4) cmds.intField(startField, edit=True, value=end-1) cmds.setFocus(colourField) return start+4
def turnOnCreateNewSetField(self): cmds.iconTextButton(self.plusBtn, edit=True, visible=False, w=1) cmds.columnLayout(self.createNewSetLayout, edit=True, visible=True, w=self.createRenameLayoutW) self.turnOffRenameSetField() cmds.textField(self.createNewSetTextField, edit=True, text=self.guessNewSetName()) self.highlightColorSelection() cmds.setFocus(self.createNewSetTextField) self.adjustButtonsWidth()
def do_playblast(self,imageName=None): ''' do plabyBlast ''' if not imageName: #set temp images name fd,imageName = tempfile.mkstemp(prefix='PlayBlast') fObj = os.fdopen(fd,'w') fObj.write( '' ) fObj.close() self.Images = imageName print 'self.Images:%s' % self.Images cmds.setFocus(self.Panel_Current) self.evalDeferred_playblast(self.Images, self.Width, self.Height, 4)
def get_current_camera(): # Find the first main panel --> "modelPanel4" first. active_panels = cmds.getPanel(visiblePanels=True) main_panel = 'modelPanel4' if main_panel in active_panels: index = active_panels.index(main_panel) panel = active_panels[index] cmds.setFocus(panel) return cmds.modelEditor(panel, query=True, camera=True) # Try to find the next best panel. for panel in active_panels: if 'modelPanel' in panel: cmds.setFocus(panel) return cmds.modelEditor(panel, query=True, camera=True)
def endDrag(self): """ :rtype: None """ logger.debug('End Drag') self._buttonDown = None self._dragStartIndex = None if self._drag: del self._drag self._drag = None # Return the focus to Maya under any keypress/drag. # This allow the animators to create keyframes immediately afterward. from maya import cmds cmds.setFocus("MayaWindow")
def turnOnRenameSetField(self, renameSet): extracted = self.extractInfoFromSelSet(renameSet) selSetName = extracted["selSetName"] colorName = extracted["colorName"] G.SS_lastColorUsed = colorName self.setToRename = renameSet cmds.columnLayout(self.renameSetLayout, edit=True, visible=True, w=self.createRenameLayoutW) self.turnOffCreateNewSetField() cmds.textField(self.renameSetTextField, edit=True, text=selSetName) self.sortSelSetButtons(renameSet=renameSet) cmds.setFocus(self.renameSetTextField) self.adjustButtonsWidth() self.highlightColorSelection()
def do_playblast(self, imageName=None): ''' do plabyBlast ''' if not imageName: #set temp images name fd, imageName = tempfile.mkstemp(prefix='PlayBlast') fObj = os.fdopen(fd, 'w') fObj.write('') fObj.close() self.Images = imageName print 'self.Images:%s' % self.Images cmds.setFocus(self.Panel_Current) self.evalDeferred_playblast(self.Images, self.Width, self.Height, 4)
def updateFilter(self, data): "Update the list based on the new filter" self.info('updateFilter') filterVal = cmds.textFieldGrp(self.wFilter, query=True, text=True) self.resList = cmds.resourceManager(nameFilter=filterVal + '*') if self.resList is None: self.resList = [] # Populate the list with all icons from the resources cmds.textScrollList(self.wList, edit=True, removeAll=True) for name in self.resList: cmds.textScrollList(self.wList, edit=True, append=name) cmds.textScrollList(self.wList, edit=True, selectIndexedItem=1) self.updatePreview() cmds.setFocus(self.wList)
def gridDropCallback(dragControl,dropControl,messages,x,y,dragTypes): print dragControl + '\n' print dropControl + '\n' print str(x) + ',' + str(y) + '\n' gridOrder = cmds.gridLayout('testGridLayout',q=True,go=True,fpn=True) dragName = dragControl.split('|') dropName = dropControl.split('|') dragOrder = gridOrder.index(dragName[-1]) dropOrder = gridOrder.index(dropName[-1]) cmds.gridLayout('testGridLayout',e=True,pos=[dragName[-1],dropOrder+1]) cmds.gridLayout('testGridLayout',e=True,pos=[dropName[-1],dragOrder+1]) cmds.setFocus('testGridLayout') print messages print dragTypes
def main(values): if (cmds.window("vpRenderWindow", exists=True)): cmds.deleteUI("vpRenderWindow") leftW = marLeft + values[0] topW = marTop + (formY - values[1]) resoX = values[2] - values[0] resoY = values[1] - values[3] mk_view("vpRenderWindow", values).show() cmds.window("vpRenderWindow", e=1, bgc=(0, 0, 0)) cmds.setFocus('renderView') return 0
def snap_values(self): """ Snaps selected object 1 to object 2. If a constraint exists on object 1, grab it's parent, and reapply it after value change. """ selected = cmds.ls(sl=True) if len(selected) < 2: return for i in cmds.listRelatives(selected[0], c=True): if "parentConstraint" not in str( cmds.listRelatives(selected[0], c=True)): constraint = None constraint_parent = None break elif "parentConstraint" in str(i): constraint = i constraint_parent = cmds.listConnections(constraint, source=True, destination=False, et=True, type="transform") for i in constraint_parent: if str(i) != str(selected[0]): constraint_parent = i break break if constraint_parent: cmds.delete(constraint) try: cmds.matchTransform(selected[0], selected[1], piv=False, position=True, rotation=True, scale=False) except: pass if constraint_parent: cmds.parentConstraint(constraint_parent, selected[0], mo=True) cmds.select(selected[0], replace=True) self.update_widgets() cmds.setFocus("MayaWindow")
def turnOffRenameSetField(self): if not cmds.columnLayout( self.renameSetLayout, query=True, visible=True): return self.sortSelSetButtons() viewports = [ view for view in cmds.getPanel(type='modelPanel') if view in cmds.getPanel(visiblePanels=True) ] self.setToRename = None cmds.columnLayout(self.renameSetLayout, edit=True, visible=False, w=1) if len(viewports) > 0: cmds.setFocus(viewports[0]) self.adjustButtonsWidth()
def turnOffCreateNewSetField(self): if not cmds.columnLayout( self.createNewSetLayout, query=True, visible=True): return cmds.iconTextButton(self.plusBtn, edit=True, visible=True, w=25) cmds.columnLayout(self.createNewSetLayout, edit=True, visible=False, w=1) viewports = [ view for view in cmds.getPanel(type='modelPanel') if view in cmds.getPanel(visiblePanels=True) ] if len(viewports) > 0: cmds.setFocus(viewports[0]) self.adjustButtonsWidth()
def update(self, key): #key if key == 'b_up': if self.test(self.playerPos, self.spin(self.playerMino)): self.playerMino = self.spin(self.playerMino) if key == 'b_left': if self.test([self.playerPos[0] - 1, self.playerPos[1]], self.playerMino): self.playerPos[0] -= 1 if key == 'b_right': if self.test([self.playerPos[0] + 1, self.playerPos[1]], self.playerMino): self.playerPos[0] += 1 if key == 'b_down': for lev in range(h): if not self.test([self.playerPos[0], self.playerPos[1] - lev], self.playerMino): self.playerPos[1] -= lev - 1 self.isContact = True self.timer = 20 break #fall if self.gameOverCount < 0: if self.timer == 0: if self.test([self.playerPos[0], self.playerPos[1] - 1], self.playerMino): self.playerPos[1] -= 1 else: if self.isContact: self.put() self.isContact = False self.breakLine() if not self.spown(): self.gameOverCount = 0 else: self.isContact = True else: if self.gameOverCount < h: for x in range(w): self.bo[x][self.gameOverCount] = 1 self.gameOverCount += 1 self.draw() self.timer = (self.timer + 1) % self.timerLevel cmds.setFocus('MayaWindow')
def saveCurve(curve): shapes = utility.getShapes(curve) name = curve.split("|")[-1] info = {} info['name'] = name info['icon'] = name+'.png' info['shape'] = [] for shape in shapes: curveInfo = cmds.shadingNode("curveInfo", au=1) cmds.connectAttr(shape+'.worldSpace[0]', curveInfo+'.inputCurve', f=1) shapeinfo = { 'points': cmds.getAttr(curveInfo+'.cp[:]'), 'degree': cmds.getAttr(shape+'.degree'), 'knot': cmds.getAttr(curveInfo+'.knots[:]') } # print(cmds.getAttr(curveInfo+'.cp[:]')) # print(cmds.getAttr(shape+'.degree')) # print(cmds.getAttr(curveInfo+'.knots[:]')) cmds.delete(curveInfo) info['shape'].append(shapeinfo) cmds.select(curve) json_path = CURVE_PATH + '%s.json' % name img_path = CURVE_PATH + '%s.png' % name with open(json_path, 'w') as f: json.dump(info, f) window = cmds.window(w=120, h=131) cmds.paneLayout() panel = cmds.modelPanel() editor = cmds.modelPanel(panel, me=1, q=1) cmds.modelEditor(editor, e=1) cmds.modelEditor(editor, e=1, grid=0, hud=0, manipulators=0, selectionHiliteDisplay=1) cmds.isolateSelect(panel, state=1) cmds.isolateSelect(panel, loadSelected=True) cmds.showWindow(window) cmds.setFocus(panel) cmds.viewFit(curve) cmds.refresh(cv=True, fe="png", fn=img_path) cmds.isolateSelect(panel, state=0) cmds.deleteUI(window) return info
def UI(processCall = 'NA'): refItem = cmds.ls(selection = True, flatten=True); sortedRef = sorted(refItem) #orderedSelection=True - this was in the ls, took it out if sortedRef == []:sortedRef.append('nothing selected') #Used if nothing is selected in scene but tool is called. if cmds.window('renameUI', exists = True): cmds.deleteUI('renameUI') window = cmds.window("renameUI", w = 200, h = 100, mnb = False, mxb = False, title = "Rename Selection", sizeable = False) mainLayout = cmds.columnLayout(w = 200, h=100) cmds.text(label = "Name", align = 'left') cmds.textField("inputField", w=200, text=sortedRef[0]) cmds.textField("replaceField", w=200) cmds.text(label = "Replace Top with Bottom", align = 'right') cmds.textField("withField", w=200) # add functions cmds.textField('inputField', edit = True, alwaysInvokeEnterCommandOnReturn = True, enterCommand = partial (process, processCall) ) cmds.textField("replaceField", edit = True, alwaysInvokeEnterCommandOnReturn = True, enterCommand = partial (process, processCall) ) cmds.textField("withField", edit = True, alwaysInvokeEnterCommandOnReturn = True, enterCommand = partial (process, processCall) ) cmds.setFocus('withField') # set focus to the with field so it's easier to just tab to the input field cmds.showWindow(window)
def updateFilter(self, data): """ Update the list based on the new filter """ self.iconsOffset = 0 if not data: self.resList = list(self.resources) else: self.resList = [e for e in self.resources if data in e.lower()] cmds.textScrollList(self.wList, edit=True, removeAll=True) for name in self.resList: cmds.textScrollList(self.wList, edit=True, append=name) cmds.textScrollList(self.wList, edit=True, selectIndexedItem=1) self.updateIconList() cmds.setFocus(self.wList) self.updatePreview()
def renameUI(self): if not self.alternateUI: self.alternateUI = True name = cmds.textScrollList(self.browseForm.scroll, q=True, si=True)[0] cmds.textField(self.createSetForm.field, e=True, text=name, ec=self.cmdRename) cmds.button(self.createSet.name, e=True, l=self.renameLabel, c=self.cmdRename, bgc=self.clr.blue) cmds.formLayout(self.selectionForm.form, e=True, en=False) cmds.formLayout(self.previewForm.form, e=True, en=False) cmds.setFocus(self.createSetForm.field) else: # reset UI self.alternateUI = False cmds.textField(self.createSetForm.field, e=True, text='', ec=self.cmdCreate, aie=True) cmds.button(self.createSet.name, e=True, l=self.createLabel, c=self.cmdCreate, bgc=self.clr.grey) cmds.formLayout(self.selectionForm.form, e=True, en=True) cmds.formLayout(self.previewForm.form, e=True, en=True) cmds.textField(self.createSetForm.field, e=True, bgc=self.clr.darkbg) cmds.setFocus(self.browseForm.scroll)
def create_model_panel(self,width,height): '''create one tear off model panel for playblast ''' # create tear off model panel self.Panel_Current = cmds.modelPanel(tearOff=True) # max model panel windows = set( cmds.lsUI( windows=True ) ) - set(u'MayaWindow') for win in windows: cmds.window( win, edit=True, widthHeight=(width+100, height+100) ) cmds.modelEditor(self.Panel_Current,e=1,udm=0) cmds.modelEditor(self.Panel_Current,e=1,allObjects=0) cmds.modelEditor(self.Panel_Current,e=1,polymeshes=1,nurbsSurfaces=1) cmds.modelEditor(self.Panel_Current,e=1,cameraName=self.Camera) # #cmds.setFocus(self.Panel_Current) cmds.setFocus(self.Panel_Current)
def playblastHUD(self): if cmds.window('pb', exists = True): cmds.deleteUI('pb') window = cmds.window('pb', titleBar = 0, sizeable = False) icon = cmds.internalVar(upd = True) + 'icons/JR_icons/folder.jpg' # FOLDER ICON mainLayout = cmds.columnLayout(w = 180, h = 80) # Row and Column Layout Setup cmds.rowColumnLayout(nc = 3, cw = [(1, 50), (2, 60), (3, 60)] , columnOffset = [(1, 'both', 5), (2, 'both', 5), (3, 'both', 5)] ) # first section relates to 1 and 2 columb widths # Radio Button Collection For 1080 and 720 cmds.radioCollection() frameSize = cmds.text( label='Frame:', align = 'left' ) i1080 = cmds.radioButton( label='1080', onc = partial( self.playblastSize, '1080' ) ) i720 = cmds.radioButton( label='720', onc = partial( self.playblastSize, '720' ) ) if Cache.playblastSize == [1920, 1080]: cmds.radioButton ( i1080, edit = True, select = True ) elif Cache.playblastSize == [1280, 720]: cmds.radioButton ( i720, edit = True, select = True ) # Radio Button Collection For AVI and MOV formatType = cmds.radioCollection() cmds.text( label='Format:', align = 'left' ) avi = cmds.radioButton( label='avi', onc = partial( self.playblastFormat, 'avi' ) ) qt = cmds.radioButton( label='mov', onc = partial( self.playblastFormat, 'qt' ) ) if Cache.playblastFormat == 'qt': cmds.radioButton ( qt, edit = True, select = True ) elif Cache.playblastFormat == 'avi': cmds.radioButton ( avi, edit = True, select = True ) # Codec Section codecOptionMenu = cmds.optionMenu ('codecOptionMenu', width = 160, label = 'Codec: ' ); cmds.text( label=''); cmds.text( label='' ) self.playblastFormat(Cache.playblastFormat) menuItems = cmds.optionMenu('codecOptionMenu', query = True, itemListLong = True) if Cache.playblastCodec in menuItems: cmds.optionMenu ('codecOptionMenu', e=True, v=Cache.playblastCodec) # Custom Width and Height Area #cmds.text( label='Custom:', align = 'left' ); customWidth = cmds.textField(text = 'W'); customHeight = cmds.textField(text = 'H') # Location of Playblasts inputField = cmds.textField( w =120, text = 'Change Location') cmds.text( label='') cmds.symbolButton(w=20, h=20, image = icon ) # focus on input field so when enter is pressed it can just begin cmds.setFocus(inputField) # Button to start the playblast cmds.button(w=180, h=30, label = 'PLAYBLAST', parent = mainLayout, c= partial( self.playblastExecute ) ) #cmds.textField(inputField, edit = True, alwaysInvokeEnterCommandOnReturn = True, enterCommand = partial( self.playblastExecute ) ) cmds.showWindow(window)
def cmdCreate(self, *args): # name = cmds.textField(self.createSetForm.field, q=True, tx=True) if name != '': path = os.path.join(self.path, name + self.ext) if not os.path.isfile(path): selSet = self.cmdSelectionDict() ss.exportFile(path, selSet) self.populateBrowse() cmds.textScrollList(self.browseForm.scroll, e=True, si=name) self.populatePreview() cmds.textField(self.createSetForm.field, e=True, tx='') cmds.setFocus(self.browseForm.scroll) else: message('File of same name exists.', warning=True) self.conflictName = name self.overwriteUI() else: message('Name field is empty', warning=True)
def Animposecam(sel_obj): # if mc.objExists('poseLibCaptureCamera'): # mc.delete('poseLibCaptureCamera') if not mc.objExists('poseLibCaptureCamera'): CurrentPanel = mc.getPanel(withFocus=True) #print CurrentPanel if mc.getPanel(to=CurrentPanel!= "modelPanel") : visPanel = mc.getPanel(vis=True) for name in visPanel: modelPanels= mc.getPanel(type= 'modelPanel') if mc.getPanel (to = name == "modelPanel"): mc.setFocus(name) CurrentPanel = name break if mel.eval('catch(`modelPanel -q -cam %s`)'%CurrentPanel): CurrentCamera = "persp" else: CurrentCamera = mc.modelPanel(CurrentPanel,q=1,cam=1) campos= mc.camera(CurrentCamera,q=1,position=1) camrot= mc.camera(CurrentCamera,q=1,rotation=1) camwup= mc.camera(CurrentCamera,q=1,worldUp =1) camcoi= mc.camera(CurrentCamera,q=1,coi=1) focal = mc.camera(CurrentCamera,q=1,fl=1) camShapeNode = mc.createNode("camera") camTopNode = mc.listRelatives(camShapeNode,p=1) mc.rename (camTopNode[0] ,'poseLibCaptureCamera') mc.hide('poseLibCaptureCamera') focalLengthTmp = 200 nearClipTmp = .1 farClipTmp = 10000 mc.camera('poseLibCaptureCamera',e=1, position =[campos[0],campos[1],campos[2]], rotation =[camrot[0],camrot[1],camrot[2]], worldUp =[camwup[0],camwup[1],camwup[2]], fl = focalLengthTmp, nearClipPlane = nearClipTmp, farClipPlane = farClipTmp) AnimposeCreateWindow(sel_obj)
def snap(self): """Write four viewports to disk Returns: (list) paths to resulting 4 files """ images = list() for index in range(4): # Panels start at index 1 index += 1 cmds.setFocus("modelPanel%i" % index) # Force a refresh, otherwise the setting # of the focus might not have time to come # into effect, resulting in duplicate # captures from the below. cmds.refresh() view = apiUI.M3dView.active3dView() image = api.MImage() view.readColorBuffer( image, True # BGRA -> RGBA ) fname = os.path.join(self.tempdir, "temp_%i.jpg" % index) image.writeToFile(fname, "jpg") images.append(fname) return images
def play_view(view): """Play with specified viewport.""" cmds.setFocus(view) destroy_window() play_button()
def capture(camera=None, width=None, height=None, filename=None, start_frame=None, end_frame=None, frame=None, format='qt', compression='h264', quality=100, off_screen=False, viewer=True, isolate=None, maintain_aspect_ratio=True, overwrite=False, raw_frame_numbers=False, camera_options=None, viewport_options=None, display_options=None, complete_filename=None): """Playblast in an independent panel Arguments: camera (str, optional): Name of camera, defaults to "persp" width (int, optional): Width of output in pixels height (int, optional): Height of output in pixels filename (str, optional): Name of output file. If none is specified, no files are saved. start_frame (float, optional): Defaults to current start frame. end_frame (float, optional): Defaults to current end frame. frame (float or tuple, optional): A single frame or list of frames. Use this to capture a single frame or an arbitrary sequence of frames. format (str, optional): Name of format, defaults to "qt". compression (str, optional): Name of compression, defaults to "h264" off_screen (bool, optional): Whether or not to playblast off screen viewer (bool, optional): Display results in native player isolate (list): List of nodes to isolate upon capturing maintain_aspect_ratio (bool, optional): Modify height in order to maintain aspect ratio. overwrite (bool, optional): Whether or not to overwrite if file already exists. If disabled and file exists and error will be raised. raw_frame_numbers (bool, optional): Whether or not to use the exact frame numbers from the scene or capture to a sequence starting at zero. Defaults to False. When set to True `viewer` can't be used and will be forced to False. camera_options (CameraOptions, optional): Supplied camera options, using :class:`CameraOptions` viewport_options (ViewportOptions, optional): Supplied viewport options, using :class:`ViewportOptions` display_options (DisplayOptions, optional): Supplied display options, using :class:`DisplayOptions` complete_filename (str, optional): Exact name of output file. Use this to override the output of `filename` so it excludes frame padding. Example: >>> # Launch default capture >>> capture() >>> # Launch capture with custom viewport settings >>> view_opts = ViewportOptions() >>> view_opts.grid = False >>> view_opts.polymeshes = True >>> view_opts.displayAppearance = "wireframe" >>> cam_opts = CameraOptions() >>> cam_opts.displayResolution = True >>> capture('myCamera', 800, 600, ... viewport_options=view_opts, ... camera_options=cam_opts) """ camera = camera or "persp" # Ensure camera exists if not cmds.objExists(camera): raise RuntimeError("Camera does not exist: {0}".format(camera)) width = width or cmds.getAttr("defaultResolution.width") height = height or cmds.getAttr("defaultResolution.height") if maintain_aspect_ratio: ratio = cmds.getAttr("defaultResolution.deviceAspectRatio") height = width / ratio start_frame = start_frame or cmds.playbackOptions(minTime=True, query=True) end_frame = end_frame or cmds.playbackOptions(maxTime=True, query=True) # We need to wrap `completeFilename`, otherwise even when None is provided # it will use filename as the exact name. Only when lacking as argument # does it function correctly. playblast_kwargs = dict() if complete_filename: playblast_kwargs['completeFilename'] = complete_filename if frame: playblast_kwargs['frame'] = frame # (#21) Bugfix: `maya.cmds.playblast` suffers from undo bug where it # always sets the currentTime to frame 1. By setting currentTime before # the playblast call it'll undo correctly. cmds.currentTime(cmds.currentTime(q=1)) padding = 10 # Extend panel to accommodate for OS window manager with _independent_panel(width=width + padding, height=height + padding) as panel: cmds.setFocus(panel) with contextlib.nested( _maintain_camera(panel, camera), _applied_viewport_options(viewport_options, panel), _applied_camera_options(camera_options, panel, camera), _applied_display_options(display_options), _isolated_nodes(isolate, panel), _maintained_time()): output = cmds.playblast( compression=compression, format=format, percent=100, quality=quality, viewer=viewer, startTime=start_frame, endTime=end_frame, offScreen=off_screen, forceOverwrite=overwrite, filename=filename, widthHeight=[width, height], rawFrameNumbers=raw_frame_numbers, **playblast_kwargs) return output
def takePlayblast(silent = True, custom = False, customPath = None): renWidth = mc.getAttr("defaultResolution.width") renHeight = mc.getAttr("defaultResolution.height") aspRatio = renWidth/float(renHeight) width = renWidth/2 if renWidth > 960 else renWidth height = renHeight/2 if renWidth > 960 else renHeight mayaShot = ppc.MayaShot() if not mayaShot.validShot: msgWin("Warning", "Invalid Shot or Project", True) if not custom: return False else: viewport = getActiveViewport(silent) if not viewport: return False mc.setFocus(viewport) scCam = mc.modelPanel(viewport, q = True, cam = True) scCamSshp = mc.listRelatives(scCam, c = 1, s = 1, ni = 1) stereo = True if mc.nodeType(scCamSshp == "stereoRigCamera") else False soundName = "NoIdea" else: if round(aspRatio, 2) == 1.78: width = 960 height = 540 else: width = mayaShot.projInfo.resWidth/2 if mayaShot.projInfo.resWidth > 1280 else mayaShot.projInfo.resWidth height = mayaShot.projInfo.resHeight/2 if mayaShot.projInfo.resWidth > 1280 else mayaShot.projInfo.resHeight soundName = "%s%s_aud"%(mayaShot.epSqName, mayaShot.shName) scCam = mayaShot.getSceneCamera(False) stereo = mayaShot.projInfo.stereo sceneCleanup(True) if not scCam or not mc.objExists(scCam): msgWin('Error', "Couldn't find a valid camera in the scene", silent) return False if stereo and custom: getCam = mc.confirmDialog(title = 'Select Camera', message = 'Which Stereo Camera do you want to take Playblast from?', button = ['Left','Center','Right','Cancel'], cb = 'Cancel', ds = 'Cancel') if getCam == 'Left': scCam = scCam.replace("_camCt", "_camLt") elif getCam == 'Right': scCam = scCam.replace("_camCt", "_camRt") elif getCam == 'Cancel': return False if mc.window('playBlastWindow', exists = 1): mc.deleteUI('playBlastWindow') if mc.windowPref ('playBlastWindow', exists = 1): mc.windowPref ('playBlastWindow', remove = 1) pbTmp = mc.window("playBlastWindow", wh = (1000, 700), te = 50, le = 50) mc.paneLayout() modPane = mc.modelPanel() mc.showWindow(pbTmp) mc.lookThru(scCam, modPane) mc.modelEditor(modPane, e=True, allObjects=0) mc.modelEditor(modPane, e=True, nurbsSurfaces=1, polymeshes=1,fluids=1,strokes=1) mc.modelEditor(modPane, e=True, da='smoothShaded') mc.modelEditor(modPane, e=True, av = True) sounds = mc.ls('%s*'%soundName, typ='audio') if not sounds: sounds = mc.ls(typ='audio') sound = sounds[0] if sounds else '' st = mc.playbackOptions(q = True, ast = True) en = mc.playbackOptions(q = True, aet = True) blastPath = os.path.join(os.environ['TMP'], 'tempPlayblast.avi') if custom: # Find the highlighted range on timeSlider (if any).. aPlayBackSlider = mel.eval('$tmpVar=$gPlayBackSlider') times = mc.timeControl(aPlayBackSlider, q=True, rng=1) times = times.replace('"', '').split(':') if int(times[1]) != int(times[0]) +1 : # 'll be currentTime & currentTime+1 evenif no range selected ==> Exclude that case! st = int(times[0]) en = int(times[1]) -1 finalPath = None else: st = 101 en = 100 + mayaShot.frames finalPath = customPath if customPath else mayaShot.shotPath.replace(".%s"%mayaShot.projInfo.mayaExt, ".avi") saveVersion(finalPath) width = width*2 height = height*2 mc.playblast(st = st, et = en, fmt = 'movie', f = blastPath, s = sound, c = 'Lagarith', fo = True, orn = True, p = 50, qlt = 100, w = width, h = height) if finalPath: try: shutil.copyfile(blastPath, finalPath) except: msgWin("Error", "Error copying %s to %s"%(blastPath, finalPath), False) mc.deleteUI(pbTmp) return True
def capture(camera=None, width=None, height=None, filename=None, start_frame=None, end_frame=None, format='qt', compression='h264', off_screen=False, viewer=True, isolate=None, maintain_aspect_ratio=True, camera_options=None, viewport_options=None): """Playblast in an independent panel Arguments: camera (str, optional): Name of camera, defaults to "persp" width (int, optional): Width of output in pixels height (int, optional): Height of output in pixels filename (str, optional): Name of output file. If none is specified, no files are saved. start_frame (float, optional): Defaults to current start frame. end_frame (float, optional): Defaults to current end frame. format (str, optional): Name of format, defaults to "qt". compression (str, optional): Name of compression, defaults to "h264" off_screen (bool, optional): Whether or not to playblast off screen viewer (bool, optional): Display results in native player isolate (list): List of nodes to isolate upon capturing maintain_aspect_ratio (bool, optional): Modify height in order to maintain aspect ratio. camera_options (CameraOptions, optional): Supplied camera options, using :class:`CameraOptions` viewport_options (ViewportOptions, optional): Supplied viewport options, using :class:`ViewportOptions` Example: >> # Launch default capture >> capture() >> # Launch capture with custom viewport settings >> view_opts = ViewportOptions() >> view_opts.grid = False >> view_opts.polymeshes = True >> view_opts.displayAppearance = "wireframe" >> cam_opts = CameraOptions() >> cam_opts.displayResolution = True >> capture('myCamera', 800, 600, .. viewport_options=view_opts, .. camera_options=cam_opts) """ camera = camera or "persp" width = width or cmds.getAttr("defaultResolution.width") height = height or cmds.getAttr("defaultResolution.height") start_frame = start_frame or cmds.playbackOptions(minTime=True, query=True) end_frame = end_frame or cmds.playbackOptions(maxTime=True, query=True) with independent_panel( width=width, height=height, maintain_aspect_ratio=maintain_aspect_ratio) as panel: cmds.lookThru(panel, camera) cmds.setFocus(panel) assert panel in cmds.playblast(activeEditor=True) with applied_viewport_options(viewport_options, panel): with applied_camera_options(camera_options, panel, camera): with isolated_nodes(isolate, panel): output = cmds.playblast( compression=compression, format=format, percent=100, quality=100, viewer=viewer, startTime=start_frame, endTime=end_frame, filename=filename, offScreen=off_screen) return output