Exemple #1
0
    def createAssetCallBack(self, *args):
        name = pm.textFieldGrp('CrAsset_nameField', q=True, tx=True)
        if not name:
            return pm.confirmDialog(
                title='error',
                ma='center',
                message='please choose a name for the asset',
                button=['OK'],
                defaultButton='OK',
                dismissString='OK')
        workflow = pm.optionMenuGrp('CrAsset_workflowOpt', q=True, v=True)
        code = pm.textFieldGrp('CrAsset_codeField', q=True, tx=True)

        itemDict = database.createItem(self.type, name, self.path, workflow,
                                       code)
        print itemDict
        if itemDict == 'codeExists':
            return pm.confirmDialog(title='error',
                                    ma='center',
                                    message='this code already exists',
                                    button=['OK'],
                                    defaultButton='OK',
                                    dismissString='OK')

        pm.layoutDialog(dismiss='ok')
    def addMultipleFolders(self, *args):
        sel = pm.treeView(self.widgetName, q=True, si=True)

        name = pm.textFieldGrp('addMulti_nameField', q=True, tx=True)
        start = pm.intFieldGrp('addMulti_rangeField', q=True,  value1=True)
        end = pm.intFieldGrp('addMulti_rangeField', q=True,  value2=True)
        step = pm.intFieldGrp('addMulti_rangeField', q=True, value3=True)
        zeroPad = pm.intFieldGrp('addMulti_zeroField',q=True, value1=True)

        if sel:
            for folder in sel:
                par = folder
                for i in range(start, end + 1, step):
                    itemName = self.nextFolderName(name, par) + '{number:0{width}d}'.format(width=zeroPad, number=i)
                    print itemName
                    pm.treeView(self.widgetName, e=True, addItem=(itemName, par))
                    pm.treeView(self.widgetName, e=True, displayLabel=(itemName, itemName.split('_')[-1]))
        else:
            par = ''
            for i in range(start, end + 1, step):
                itemName = self.nextFolderName(name, par) + '{number:0{width}d}'.format(width=zeroPad, number=i)
                print itemName
                pm.treeView(self.widgetName, e=True, addItem=(itemName, par))
                pm.treeView(self.widgetName, e=True, displayLabel=(itemName, itemName.split('_')[-1]))

        self.putFolderTree()
        pm.layoutDialog(dismiss='ok')
Exemple #3
0
def cachePromptChangeList(*args):
    """

    :rtype: object
    """
    sel = pm.textScrollList('cacheScrollList', q=True, si=True)
    selString = ','.join(sel)
    pm.layoutDialog(dismiss=selString)
Exemple #4
0
    def addItemCallBack(self, *args):
        if not self.path:
            return pm.confirmDialog(title='error', ma='center',
                                    message='please choose a folder where to create the asset', button=['OK'],
                                    defaultButton='OK', dismissString='OK')

        pm.layoutDialog(ui=lambda: self.createAssetPrompt())
        self.refreshList(path=self.path, task=self.task)
Exemple #5
0
def showHideAttr(vis, picker, arg):
    """Code to show/hide attrs via showHide dialog. Don't worry about it."""
    sel = pmc.ls(selection=True)
    pmc.layoutDialog(dismiss=True)
    curr = pmc.optionMenu(picker, q=True, v=True)
    for s in sel:
        for d in ["X", "Y", "Z"]:
            pmc.setAttr(s + "." + curr + d, k=vis, l=(not vis))
Exemple #6
0
    def createAssetCallBack(self, component, *args):
        if component:
            ns = pm.textFieldGrp('nsFieldPrompt', q=True, tx=True)

            database.addComponent(self.item, ns, component.task, component.code, 'reference', update=True)

            createdTasks = database.getShotCreatedTasks(self.item)
            for itemMData in createdTasks:
                database.addComponent(itemMData, ns, component.task, component.code, 'reference', update=True)

            pm.layoutDialog(dismiss='ok')
Exemple #7
0
    def addTab(self, _type):

        """
            Method: addTab
                a method to add a tab
                
            Inputs:
                _type:                A string identifyinfg the type of tab to add
                
            On Exit:                  A tab has been added
            
        """

        # switch throught the different options

        if _type == "arm":

            # create a button prompt

            side = pm.layoutDialog(t="Pick Sides", ui=lrPrompt)

            # set up a settings object for the tab settings
            settings = pts.TabSettings()

            settings.m_baseName = self.m_tabList[0].getRigName()
            settings.m_tabName = "Arm Tab " + str(self.uID)
            self.uID = self.uID + 1
            settings.m_limbName = "Arm"
            settings.m_sideSpecifier = side

            arm = par.ArmRig(settings.m_baseName)
            self.m_rigComponents.append(arm)

            settings.m_rigElement = arm

            # switch through the dificulty levels

            if self.m_skillLevel == "Novice":

                self.m_tabList.append(patn.ArmTabNovice(self.m_tabs, self, settings))

            elif self.m_skillLevel == "Intermediate":

                self.m_tabList.append(pati.ArmTabIntermediate(self.m_tabs, self, settings))

            elif self.m_skillLevel == "Experienced":

                self.m_tabList.append(pate.ArmTabExperienced(self.m_tabs, self, settings))

            self.m_tabs.setSelectTabIndex(len(self.m_tabList))

            self.m_helpBox.update()
Exemple #8
0
def dialogWrap(windowClass, title=None, *args, **kwargs):
    """Wrapper for Maya's layoutDialogue class.
    It will take focus of the entire program.

    Note: Due to Python 2 limitations, *args and **kwargs can't be unpacked with the title keyword
    present, so don't try to clean up the code by enabling unpacking again.
    """
    def uiScript(cls, clsArgs=(), clsKwargs={}):
        form = pm.setParent(query=True)
        parent = pm.uitypes.toQtObject(form)
        parent.layout().setSizeConstraint(QtWidgets.QLayout.SetFixedSize)

        windowInstance = cls(parent, *clsArgs, **clsKwargs)
        windowInstance.windowReady.emit()
        return windowInstance
    return pm.layoutDialog(ui=partial(uiScript, windowClass, clsArgs=args, clsKwargs=kwargs), title=title)
Exemple #9
0
    def dialog(cls, parent=None, *args, **kwargs):
        """Create the window as a dialog.
        For Maya versions after 2017, pm.layoutDialog is used.
        """
        # This is quite buggy and can lock up Maya, so disable for now
        if False and not cls._Pre2017:
            # Note: Due to Python 2 limitations, *args and **kwargs can't be unpacked with the
            # title keyword present, so don't try to clean up the code by enabling unpacking again.
            def uiScript(cls, clsArgs=(), clsKwargs={}):
                form = pm.setParent(query=True)
                parent = pm.uitypes.toQtObject(form)
                parent.layout().setSizeConstraint(
                    QtWidgets.QLayout.SetFixedSize)

                windowInstance = cls(parent, *clsArgs, **clsKwargs)
                windowInstance.windowReady.emit()
                return windowInstance

            # Set WindowID if needed but disable saving
            # TODO: Override output to match AbstractWindow.dialog
            # cmds.layoutDialog(dismiss=str(data)) to self.dialogAccept(data)
            class WindowClass(windowClass):
                if not hasattr(windowClass, 'WindowID'):
                    WindowID = uuid.uuid4().hex

                    def enableSaveWindowPosition(self, enable):
                        return super(WindowClass,
                                     self).enableSaveWindowPosition(False)

            try:
                return pm.layoutDialog(
                    ui=partial(uiScript,
                               WindowClass,
                               clsArgs=args,
                               clsKwargs=kwargs),
                    title=getattr(cls, 'WindowTitle', 'New Window'),
                )
            finally:
                cls.clearWindowInstance(cls.WindowID)

        if parent is None:
            parent = getMainWindow()
        return super(MayaWindow, cls).dialog(parent=parent, *args, **kwargs)
Exemple #10
0
def sceneRefCheck(silent=False):
    """

    Compare the current scene references versions with metadata and update as needed

    :param silent: boolean
    :return:
    """
    uptodate = True
    print 'init sceneChecking...'
    currentProject = database.getCurrentProject()
    projName = pm.fileInfo.get('projectName')

    if currentProject != projName:
        print 'ERROR sceneRefCheck: This file is from a project different from the current project'
        return

    item = Item(fromScene=True)  # get current scene metadata

    # compare references and metadata and create lists of references to add, delete, update and replace
    refOnSceneList = pm.getReferences()
    toDelete = [x for x in refOnSceneList if x not in item.components]
    toAdd = [x for x in item.components if x not in refOnSceneList and x != 'cam']
    toReplace = [x for x in item.components if item.components[x]['task'] != item.components[x]['proxyMode']]
    refToCheckUpdate = [x for x in refOnSceneList if x not in toDelete and x not in toReplace]
    toUpdate = {}

    # create the list of references to update depending on the assemble mode
    for ns in refToCheckUpdate:
        if item.components[ns]['assembleMode'] == 'camera':
            continue

        if item.components[ns]['assembleMode'] == 'reference':
            component = ReferenceComponent(ns, item.components[ns], parent=item)
            toUpdate[ns] = component.updateVersion(refOnSceneList[ns])

        if item.components[ns]['assembleMode'] == 'xlo':
            component = XloComponent(ns, item.components[ns], parent=item)
            toUpdate[ns] = component.updateVersion(refOnSceneList[ns])

        if item.components[ns]['assembleMode'] == 'cache':
            cache = CacheComponent(ns, item.components[ns], parent=item)
            toUpdate[ns] = cache.updateVersion(refOnSceneList[ns])

    # If not in silent mode, show dialogs to the user choose which references should be processed
    if not silent:
        if toDelete:
            uptodate = False
            toDelete = pm.layoutDialog(ui=lambda: refCheckPrompt(toDelete, 'delete')).split(',')

        if toAdd:
            uptodate = False
            toAdd = pm.layoutDialog(ui=lambda: refCheckPrompt(toAdd, 'add')).split(',')

        if toReplace:
            uptodate = False
            toReplace = pm.layoutDialog(ui=lambda: refCheckPrompt(toReplace, 'replace')).split(',')

        upDateList = [x for x, y in toUpdate.iteritems() if y ]
        if upDateList:
            uptodate = False
            upDateList = pm.layoutDialog(ui=lambda: refCheckPrompt(upDateList, 'update')).split(',')
            toUpdate = {x: y for x, y in toUpdate.iteritems() if x in upDateList}
        else:
            toUpdate = {}

        if uptodate:
            pm.confirmDialog(title='Scene Check', ma='center',
                             message='Versions ok!',
                             button=['OK'], defaultButton='OK', dismissString='OK')



    # Do the processing
    # delete
    print 'toDelete:%s' % toDelete
    for ns in toDelete:
        refOnSceneList[ns].remove()

    # add
    print 'toAdd:%s' % toAdd
    for ns in toAdd:
        if item.components[ns]['assembleMode'] == 'camera':
            continue

        print ns
        if item.components[ns]['assembleMode'] == 'reference':
            component = ReferenceComponent(ns, item.components[ns], parent=item)
            component.addToScene()

        elif item.components[ns]['assembleMode'] == 'xlo':
            component = XloComponent(ns, item.components[ns], parent=item)
            component.addToScene()

            cache = CacheComponent(ns, item.components[ns], parent=item)
            cache.importCache()

        elif item.components[ns]['assembleMode'] == 'cache':
            cache = CacheComponent(ns, item.components[ns], parent=item)
            cache.addToScene()

    #update versions
    for ns, versions in toUpdate.iteritems():
        if item.components[ns]['assembleMode'] == 'camera':
            continue

        if item.components[ns]['assembleMode'] == 'reference':
            component = ReferenceComponent(ns, item.components[ns], parent=item)
            componentPath = component.getPublishPath()
            refOnSceneList[ns].replaceWith(componentPath)

        if item.components[ns]['assembleMode'] == 'xlo':
            if 'ver' in versions:
                component = XloComponent(ns, item.components[ns], parent=item)
                componentPath = component.getPublishPath()
                refOnSceneList[ns].replaceWith(componentPath)

            if 'cacheVer' in versions:
                #todo check if need to delete old cache node
                cache = CacheComponent(ns, item.components[ns], parent=item)
                cache.importCache()

        if item.components[ns]['assembleMode'] == 'cache':
            component = CacheComponent(ns, item.components[ns], parent=item)
            componentPath = component.getPublishPath()
            refOnSceneList[ns].replaceWith(componentPath)

    # Replace
    for ns in toReplace:
        if item.components[ns]['assembleMode'] == 'reference':
            print item.components[ns]['task'], item.components[ns]['proxyMode']
            item.components[ns]['task'] = item.components[ns]['proxyMode']
            print item.components[ns]['task'], item.components[ns]['proxyMode']
            component = ReferenceComponent(ns, item.components[ns], parent=item)
            print component.getPublishPath()
            # todo check if existe uma versao
            refOnSceneList[ns].replaceWith(component.getPublishPath())
    item.putDataToDB()

    print 'done sceneChecking!'
Exemple #11
0
                def _show():

                    pm.layoutDialog(ui=_addLocMultiOptions)
Exemple #12
0
                def _retriveOptions(jNumber, dirAxis, jSpac, *args):
                    self.jNumberVal = jNumber.getValue()[0]
                    self.dirAxisVal = dirAxis.getValue()
                    self.jSpacVal = jSpac.getValue()[0]

                    pm.layoutDialog(dismiss="Continue")
 def abortCreateCallback(self, *args):
     pm.layoutDialog(dismiss="Abort")
Exemple #14
0
 def genChain(self):
     
     """
         Method: genChain
             A method to generate the joint chain
     """
     
     #check if there is an existing joint chain
     
     isChainExist  = self.m_rigElement.getIsGenerated()
     force = "False"
     
     if isChainExist:
         
         #generate a dialog window to define the force variable
         
         force = pm.layoutDialog(t = "Replace Chain?", ui = forcePrompt)
         
     if force == "True":
         
         #clear the rigElement
         
         self.m_rigElement.clear()
         
         #and set isChainExist to false
         
         isChainExist = False
         
     #if a chain doesn't exist at this point
     
     if not isChainExist:        
         
         #create a list of the unicode strings representing
         #the selected joints and an empty list for their
         #pynode counterparts
         
         strList = self.m_jointTable.getAllItems()
         pyNodeList = []
         
         #cycle through and convert to pyNode
         
         for jnt in strList:
             
             pyNodeList.append(pm.PyNode(jnt))
             
         #check that there are some joints
         
         if pyNodeList == []:
             
             #currently print, will be refactored to use the help box
             
              self.m_gui.getHelp().update( _errorList =["ERROR","NO JOINTS","ERROR: No joints were passed in to generate the rig from"])
             
         #otherwise continue with the generation
         
         else:
             
             #set the m_template joints equal to those passed in with hierarchy enforced
             
             pyNodeList = self.enforceHierarchy(pyNodeList)
             
             #now check if there is any nodes in the joint list
             
             if pyNodeList == []:
                 
                 #temp print, will use the help box eventually
                 
                 self.m_gui.getHelp().update( _errorList = ["ERROR","INCORRECT HIERARCHY","ERROR: The joints selected were not in a single hierarchy, either a joint was missing or one of them had two immediate children in the selection with it"])
             
             else:
                         
                 #and set the root name for the arm
                 
                 self.m_rigElement.setRootName(self.addExtToNames(self.addExtToNames([self.m_rigName],self.m_sideSpecifier),self.m_limbName)[0])
                 
                 result = self.m_rigElement.genArmRig(pyNodeList,
                             _doIK = self.m_ikCheck.getValue(),
                             _ikExt = self.m_ikExt,
                             _doFK = self.m_fkCheck.getValue(),
                             _fkExt = self.m_fkExt,
                             _jntExt = self.m_jntExt,
                             _ctrlExt = self.m_ctrlExt,
                             _doTwist = self.m_twistCheck.getValue(), 
                             _twistStartIds = [-2],
                             _numTwistJnts = self.m_numTwistJnts
                             )
                             
                 self.m_gui.getHelp().update( _errorList = result)
Exemple #15
0
def cacheScene(task, code):
    ver = 0

    collection = database.getCollection('shot')
    shotMData = database.getItemMData(task=task, code=code, itemType='shot')

    if 'caches' not in shotMData:
        shotMData['caches'] = copy.deepcopy(shotMData['components'])

        for item in shotMData['caches'].itervalues():
            item['ver'] = 0
            item['type'] = 'cache'
            item['assembleMode'] = 'cache'
            item['cacheVer'] = 0
            item['name'] = ''

    itemComponents = shotMData['components']
    itemCaches = shotMData['caches']
    geoGroups = pm.ls('geo_group', r=True)

    choosen = pm.layoutDialog(ui=lambda: cachePrompt(geoGroups))

    if 'Abort' in choosen:
        return

    path = database.getPath(shotMData, dirLocation='cacheLocation', ext='')
    cachePath = os.path.join(*path)

    if not os.path.exists(cachePath):
        os.makedirs(cachePath)

    choosenGeoGroups = [pm.PyNode(x) for x in choosen.split(',')]

    for geoGroup in choosenGeoGroups:
        # get all geometry on geo_group
        geosShape = geoGroup.getChildren(allDescendents=True,
                                         type='geometryShape')
        geos = [x.getParent() for x in geosShape]
        jobGeos = ''

        for geo in geos:
            if '|' in geo:

                logger.error('Naming problem on geo %s' % geo)
            else:
                jobGeos = jobGeos + ' -root ' + geo

                # make path and name for alembic file

        ns = geoGroup.namespace()[:-1]
        cacheMData = itemCaches[ns]  # get the data for this component

        # get version and increment
        cacheMData['cacheVer'] += 1

        ver = cacheMData['cacheVer']

        # get cache publish path

        cacheName = database.templateName(cacheMData) + '_' + ns
        cacheFileName = str('v%03d_' % ver) + cacheName
        cacheFullPath = os.path.join(cachePath, cacheFileName)

        jobFile = " -file " + cacheFullPath + ".abc "

        # get scene frame range
        ini = str(int(pm.playbackOptions(q=True, min=True)))
        fim = str(int(pm.playbackOptions(q=True, max=True)))
        jobFrameRange = ' -frameRange ' + ini + ' ' + fim

        # set parameters for alembic cache
        jobAttr = ' -attr translateX -attr translateY -attr translateZ -attr rotateX ' \
                  '-attr rotateY -attr rotateZ -attr scaleX -attr scaleY -attr scaleZ -attr visibility'
        jobOptions = " -worldSpace -uv -writeVisibility"

        # build cache arguments
        jobArg = jobFrameRange + jobOptions + jobAttr + jobGeos + jobFile

        # do caching
        pm.AbcExport(j=jobArg)

    collection.find_one_and_update({
        'task': task,
        'code': code
    }, {'$set': shotMData})

    logger.info('Cache Ver: %s')
Exemple #16
0
        def createAssetCallBack(self, component, *args):
            if component:
                print component

                pm.layoutDialog(dismiss='ok')
Exemple #17
0
import pymel.core as pm

import lcPipe.ui.widgets as widgets

pm.layoutDialog(ui=lambda: widgets.AssetPrompt())





 def addMultipleFoldersCallback(self, *args):
     pm.layoutDialog(ui=self.addMultiPromp)
Exemple #19
0
def makeShowHideDialog():
    """A UI to show/hide channel box attributes for selected objects."""
    pmc.layoutDialog(ui=dialogGuts, title="Lock+Hide/Unlock+Show")
Exemple #20
0
def changeList(*args):
    sel = pm.textScrollList('scrollList', q=True, si=True)
    selString = ','.join(sel)
    pm.layoutDialog(dismiss=selString)
 def abortMultipleFolders(self, *args):
     pm.layoutDialog(dismiss='cancel')
Exemple #22
0
 def addItemCallBack(self, *args):
     pm.layoutDialog(ui=lambda: self.createAssetPrompt())
     self.refreshList(itemMData=self.item)
Exemple #23
0
 def okCallback(self, selected):
     logger.debug(selected.name())
     pm.layoutDialog(dismiss='ok')