コード例 #1
0
def mk_proj(path='', renPath=''):
    'Creates a show project structure'
    import MaxPlus
    mpPM = MaxPlus.PathManager
    workspaceExists = False

    #  Variables :
    projDirs = [
        'sceneassets', 'sceneassets/animations', 'archives', 'autoback',
        'proxies', 'downloads', 'export', 'express', 'sceneassets/images',
        'import', 'materiallibraries', 'scenes', 'sceneassets\photometric',
        'previews', 'sceneassets/renderassets', 'renderoutput',
        'renderpresets', 'sceneassets/sound', 'vpost'
    ]

    projectName = os.path.basename(os.path.normpath(path))
    P.info('Project Folder: %s' % projectName)

    #  Create 3dsMax project directories :
    if os.path.isdir(path):
        for projDir in projDirs:
            _dir = os.path.normpath(
                os.path.join(path, projDir).replace('\\', '/'))
            if not os.path.isdir(_dir):
                P.info("DIR: %s" % _dir)
                try:
                    os.mkdir(_dir)
                except Exception, e:
                    P.error('Failed creating the directory: %s' % _dir)
                    P.error('    %s' % traceback.print_exc())
                    return False
コード例 #2
0
ファイル: nim_houdini.py プロジェクト: rohtau/nim_connectors
def mk_proj(path='', renPath=''):
    'Creates a show project structure'
    import hou
    workspaceExists = False

    #  Variables :
    projDirs = [
        'abc', 'audio', 'comp', 'desk', 'flip', 'geo', 'hda', 'render',
        'scripts', 'sim', 'tex', 'video'
    ]

    projectName = os.path.basename(os.path.normpath(path))
    P.info('Project Folder: %s' % projectName)

    #  Create Houdini project directories :
    if os.path.isdir(path):
        for projDir in projDirs:
            _dir = os.path.normpath(
                os.path.join(path, projDir).replace('\\', '/'))
            if not os.path.isdir(_dir):
                P.info("DIR: %s" % _dir)
                try:
                    os.mkdir(_dir)
                except Exception, e:
                    P.error('Failed creating the directory: %s' % _dir)
                    P.error('    %s' % traceback.print_exc())
                    return False
コード例 #3
0
def mk_proj(path='', renPath=''):
    'Creates a show project structure'
    workspaceExists = False

    #  Variables :
    projDirs = [
        'assets', 'autosave', 'cache', 'cache/nCache', 'cache/nCache/fluid',
        'cache/particles', 'clips', 'data', 'images', 'movies', 'renderData',
        'renderData/depth', 'renderData/fur', 'renderData/fur/furAttrMap',
        'renderData/fur/furEqualMap', 'renderData/fur/furFiles',
        'renderData/fur/furImages', 'renderData/fur/furShadowMap',
        'renderData/iprImages', 'renderData/shaders', 'scenes', 'scenes/edits',
        'scripts', 'sound', 'sourceimages', 'sourceimages/3dPaintTextures'
    ]

    #  Create Maya project directories :
    path = os.path.normpath(path)
    if os.path.isdir(path):
        P.info('Creating Project Folders...')
        for projDir in projDirs:
            _dir = os.path.normpath(os.path.join(path, projDir))
            if not os.path.isdir(_dir):
                try:
                    os.mkdir(_dir)
                except Exception, e:
                    P.error('Failed creating the directory: %s' % _dir)
                    P.error('    %s' % traceback.print_exc())
                    return False
        P.info('Complete')
コード例 #4
0
ファイル: nim_win.py プロジェクト: rohtau/nim_connectors
def userInfo( url='', apiUser='', newUser=False ) :
    'Retrieves the User ID to use for the window'
    
    user, userID, userList='', '', []
    
    isGUI = False
    try :
        #Validate Against DCC Environment
        if F.get_app() is not None :
            isGUI = True
    except :
        pass

    if isGUI :
        user=popup( title='Enter NIM Login', msg='Please enter your NIM username:'******'input', defaultInput=apiUser )
    else :
        user=raw_input('Please enter your NIM username: '******'q': 'getUserID', 'u': user}, debug=False, nimURL=url )
            print("userID: %s" % userID)
        else :
            userID=Api.get( sqlCmd={ 'q': 'getUserID', 'u': user}, debug=False )
            print("userID: %s" % userID)

        if type(userID)==type(list()) and len(userID)==1 :
            try :
                userID=userID[0]['ID']
                P.info( 'User set to "%s" (ID #%s)' % (user, userID) )
                if newUser == False:
                    #  Update Preferences :
                    Prefs.update( attr='NIM_User', value=user )
                    if isGUI :
                        popup( title='NIM User Set', msg='The NIM user has been set to %s.' % user)
                    else :
                        print('The NIM user has been set to %s.' % user)
                return (user, userID)
            except :
                return False
        else :
            P.error( 'Failed to find NIM user.' )
            if isGUI :
                response = popup( title='User Not Found', msg='The username entered is not a valid NIM user.\n\n Would you like to enter a new username?', type='okCancel')
            else :
                response=raw_input('The username entered is not a valid NIM user. Would you like to enter a new username? (Y/N)')
                if response == 'Y' or response == 'y' :
                    response = 'OK'

            if(response=='OK'):
                userInfo( url=url, newUser=newUser )
            else :
                return False
コード例 #5
0
def _prefsFail():
    'Determines course of action, after a user has input an invalid NIM URL'
    msg = 'Sorry, specified NIM URL is invalid.'
    P.error(msg)
    msg += '\n    Would you like to enter another one?'
    result = Win.popup(title='NIM - URL Error', msg=msg, type='okCancel')
    #P.info( 'WINDOW RESULT: %s' % result)
    if result == 'OK':
        url = _inputURL()
        test = _verifyURL(url)
        P.info('NIM URL Verified: %s' % test)
        if test: return [result, url]
    return [result, False]
コード例 #6
0
ファイル: nim.py プロジェクト: rohtau/nim_connectors
    def ingest_prefs(self):
        'Sets NIM dictionary from preferences'
        self.app = F.get_app()
        self.prefs = Prefs.read()

        if not self.prefs:
            return False

        P.info('Preferences being read...')

        #  Set User Information :
        user = self.prefs['NIM_User']
        userID = Api.get(sqlCmd={'q': 'getUserID', 'u': user}, debug=False)
        if userID:
            if type(userID) == type(list()) and len(userID) == 1:
                userID = userID[0]['ID']
            try:
                self.nim['user'] = {'name': user, 'ID': str(userID)}
            except:
                self.nim['user'] = {'name': '', 'ID': ''}
                P.warning('Unable to set User information in NIM!')

            #  Get Show/Shot Prefs :
            try:
                self.set_name(elem='job', name=self.prefs[self.app + '_Job'])
                self.set_name(elem='asset',
                              name=self.prefs[self.app + '_Asset'])
                self.set_tab(_type=self.prefs[self.app + '_Tab'])
                self.set_name(elem='show', name=self.prefs[self.app + '_Show'])
                self.set_name(elem='shot', name=self.prefs[self.app + '_Shot'])
                self.set_name(elem='filter',
                              name=self.prefs[self.app + '_Filter'])
                self.set_name(elem='task', name=self.prefs[self.app + '_Task'])
                self.set_name(elem='base',
                              name=self.prefs[self.app + '_Basename'])
                self.set_name(elem='ver',
                              name=self.prefs[self.app + '_Version'])
            except:
                P.error(
                    'Sorry, unable to get NIM preferences, cannot run NIM GUI')
                P.error('    %s' % traceback.print_exc())
                win.popup(
                    title='NIM Error',
                    msg=
                    'Sorry, unable to get NIM preferences, cannot run NIM GUI')
                return False
            return self
        else:
            return False
コード例 #7
0
def scripts_reload():
    'Reloads the facility level scripts'
    try:
        import nim as Nim
        import nim_api as Api
        import nim_file as F
        import nim_prefs as Prefs
        import nim_print as P
        import nim_win as Win
        import nim_tools
        reload(Nim)
        reload(Api)
        reload(F)
        reload(Prefs)
        reload(P)
        reload(Win)
        reload(nim_tools)
        #  App specific modules :
        app = get_app()
        try:
            import UI as UI
            reload(UI)
        except:
            pass
        if app == 'Maya':
            import nim_maya as M
            reload(M)
        elif app == 'Nuke':
            import nim_nuke as N
            reload(N)
        elif app == 'C4D':
            import nim_c4d as C
            reload(C)
        elif app == '3dsMax':
            import nim_3dsmax as Max
            reload(Max)
        elif app == 'Houdini':
            import nim_houdini as Houdini
            reload(Houdini)
        P.info('    NIM scripts. have been reloaded.')
    except Exception, e:
        print 'Sorry, problem reloading scripts...'
        print '    %s' % traceback.print_exc()
コード例 #8
0
ファイル: nim_houdini.py プロジェクト: rohtau/nim_connectors
def set_vars(nim=None):
    'Add variables to Houdini Globals'

    P.info('\nHoudini - Setting Globals variables...')

    #  User :
    userInfo = nim.userInfo()

    makeGlobalAttrs = False
    h_root = hou.node("/")

    h_root.setUserData("nim_user", str(userInfo['name']))
    h_root.setUserData("nim_userID", str(userInfo['ID']))
    h_root.setUserData("nim_class", str(nim.tab()))
    h_root.setUserData("nim_server", str(nim.server()))
    h_root.setUserData("nim_serverID", str(nim.ID('server')))
    h_root.setUserData("nim_jobName", str(nim.name('job')))
    h_root.setUserData("nim_jobID", str(nim.ID('job')))
    h_root.setUserData("nim_showName", str(nim.name('show')))
    h_root.setUserData("nim_showID", str(nim.ID('show')))
    h_root.setUserData("nim_shot", str(nim.name('shot')))
    h_root.setUserData("nim_shotID", str(nim.ID('shot')))
    h_root.setUserData("nim_asset", str(nim.name('asset')))
    h_root.setUserData("nim_assetID", str(nim.ID('asset')))
    h_root.setUserData("nim_fileID", str(nim.ID('ver')))

    if nim.tab() == 'SHOT':
        h_root.setUserData("nim_name", str(nim.name('shot')))
    elif nim.tab() == 'ASSET':
        h_root.setUserData("nim_name", str(nim.name('asset')))

    h_root.setUserData("nim_basename", str(nim.name('base')))
    h_root.setUserData("nim_type", str(nim.name(elem='task')))
    h_root.setUserData("nim_typeID", str(nim.ID(elem='task')))
    h_root.setUserData("nim_typeFolder", str(nim.taskFolder()))
    h_root.setUserData("nim_tag", str(nim.name('tag')))
    h_root.setUserData("nim_fileType", str(nim.fileType()))
    P.info("Root attributes added")

    return
コード例 #9
0
def _verifyURL(url=''):
    'Verifies a given URL as valid'
    #  Verify URL :
    if not url: return False

    # Validate URL Pattern
    parsedURL = urlparse.urlparse(url)
    min_attributes = ('scheme', 'netloc')
    if not all([getattr(parsedURL, attr) for attr in min_attributes]):
        #error = "'{url}' string has no scheme or netloc.".format(url=parsedURL.geturl())
        #print(error)
        print("URL Format is invalid")
        return False
    else:
        print("Valid URL Format Entered")

    result = Api.get(sqlCmd={'q': 'testAPI'}, debug=False, nimURL=url)
    P.info('Validating API: %s' % result)
    if result:
        #setting global variable
        return url
    else:
        return False
コード例 #10
0
ファイル: nim_nuke.py プロジェクト: rohtau/nim_connectors
def set_vars(nim=None):
    'Sets the environment variables inside of Nuke, for Deadline to pick up'

    P.info('Setting Nuke Vars...')

    tabName = 'NIM'
    knobInfo = _knobInfo(nim)
    knobNames, knobLabels, knobCmds = knobInfo[0], knobInfo[1], knobInfo[2]
    #  Get Project Settings Node :
    PS = nuke.root()

    #  Create NIM Tab, if it doesn't exist :
    if not PS.knob(tabName):
        PS.addKnob(nuke.Tab_Knob(tabName))

    #  Create Knobs :
    for x in range(len(knobNames)):
        if not PS.knob(knobNames[x]):
            PS.addKnob(nuke.String_Knob(knobNames[x], knobLabels[x]))
        #  Set Knob :
        P.debug('%s - %s' % (knobNames[x], knobCmds[x]))
        knob = PS.knob(knobNames[x])
        knob.setEnabled(True)
        if knobCmds[x]:
            #  Convert backslashes to forwardslashes for Nuke :
            if knobNames[x] == 'nim_compPath':
                correctedPath = knobCmds[x].replace('\\', '/')
                knob.setValue(correctedPath)
            #  Otherwise, set the knob as normal :
            else:
                knob.setValue(knobCmds[x])
        knob.setEnabled(False)

    P.info('    Done setting Nuke Vars.')

    return
コード例 #11
0
def Dbug_toggle():
    'Toggles debug mode on/off, inside of Maya'
    import maya.cmds as mc
    import maya.mel as mm

    P.info('Toggling debug mode...')
    prefs = read()
    try:
        debugMode = prefs['NIM_DebugMode']
    except:
        debugMode = prefs['DebugMode']
    P.info('    Debug mode is currently set to %s.' % debugMode)

    #  Turn D-bug mode Off, if it is On :
    if debugMode == 'True':
        update(attr='NIM_DebugMode', value='False')
        shelf = mm.eval('$tempVar=`tabLayout -q -st $gShelfTopLevel`')
        shelf_icons = mc.shelfLayout(shelf, query=True, childArray=True)
        for icon in shelf_icons:
            shelf_btn = mc.shelfButton(icon, query=True, label=True)
            if shelf_btn == 'Dbug':
                iconPath = 'I:/VAULT/NIM/NIM_v5.1/imgs/maya_shelf_icons/debugOff_icon.png'
                mc.shelfButton(icon, edit=True, image=iconPath)
        P.info('  D-bug mode has been turned off!')

    #  Turn D-bug mode On, if it is Off :
    elif debugMode == 'False':
        update(attr='NIM_DebugMode', value='True')
        shelf = mm.eval('$tempVar=`tabLayout -q -st $gShelfTopLevel`')
        shelf_icons = mc.shelfLayout(shelf, query=True, childArray=True)
        for icon in shelf_icons:
            shelf_btn = mc.shelfButton(icon, query=True, label=True)
            if shelf_btn == 'Dbug':
                iconPath = 'I:/VAULT/NIM/NIM_v5.1/imgs/maya_shelf_icons/debugOn_icon.png'
                mc.shelfButton(icon, edit=True, image=iconPath)
        P.info('  D-bug mode has been turned on!')

    return
コード例 #12
0
def mk_default(recreatePrefs=False, notify_success=True):
    'Makes default preferences'

    global apps
    global nim_api
    global nim_user, nim_userID
    global nim_URL

    isGUI = False
    try:
        #Validate Against DCC Environment
        if F.get_app() is not None:
            isGUI = True
    except:
        pass

    nimHome = mk_home()
    prefsFile = get_path()
    apps = F.get_apps()
    #nim_user=F.get_user()
    url, userID = 1, ''

    #  Create home dir, if necessary :
    mk_home()

    #  Check to see if preferences need to be re-created :
    if os.path.exists(prefsFile):
        #  If preferences have missing attributes, add those attributes to prefs file:
        prefs_check = check()
        if prefs_check:
            #  Open NIM prefs file for appending :
            _prefFile = open(prefsFile, 'a')
            _prefFile.write('\n')
            #  Write NIM preferences :
            nim_prefs = _nimPrefs()
            missing_at_least_one_nim_pref = False
            for key in prefs_check:
                if key in nim_prefs:
                    missing_at_least_one_nim_pref = True
                    _prefFile.write(key + '=' + nim_prefs[key] + '\n')
            if missing_at_least_one_nim_pref:
                _prefFile.write('\n')
            #  Write Application Preferences :
            for app in apps:
                app_prefs = _appPrefs(app)
                for key in prefs_check:
                    if key in app_prefs:
                        _prefFile.write(key + '=' + app_prefs[key] + '\n')
                _prefFile.write('\n')
            #  Close file :
            _prefFile.close()
        else:
            #  Ask to recreate existing preferences :
            if recreatePrefs:
                if isGUI:
                    recreate=Win.popup( title=winTitle+' - Prefs Exist', \
                        msg='Preferences already exist.\nWould you like to re-create your preferences?', \
                        type='okCancel' )
                else:
                    recreate = raw_input(
                        "Preferences already exist. Would you like to re-create your preferences? (Y\N) "
                    )
                    if recreate == 'Y' or recreate == 'y':
                        recreate = 'OK'

                if recreate == 'OK':
                    P.info('Deleting previous preferences file...')
                    try:
                        os.remove(prefsFile)
                    except Exception, e:
                        P.error('Unable to delete preferences')
                        P.error('    %s' % traceback.print_exc())
                        return False
                else:
                    return prefsFile
            else:
                return prefsFile
コード例 #13
0
def update(attr=None, app='', value=''):
    'Updates the preferences file with whatever attribute is specified'
    #P.info('nim_prefs.update')

    #  Variables :
    _prefsFile = get_path()
    _prefs = read()

    if not os.path.isfile(_prefsFile):
        mk_default()
    if not attr:
        P.info(
            'Error : At least one preference attribute must be specified to write out'
        )
        return
    _pre, _txt = '', ''
    _skip = False
    if app:
        _pre = app + '_'
    _clearable = [
        _pre + 'Job', _pre + 'Asset', _pre + 'Show', _pre + 'Shot',
        _pre + 'Task', _pre + 'Basename', _pre + 'Version'
    ]

    #  Retrieve old preferences :
    _old = open(_prefsFile, 'r')

    #  Write out preferences :
    for line in _old:
        #  Operate on lines matching the application and attribute names specified :
        if re.search('^' + _pre + attr[0].upper() + attr[1:] + '=', line):
            #  Don't store "Select.." or "None" combo box options :
            if value not in ['Select..', 'Select...', 'None', ''] and value:
                _txt += _pre + attr[0].upper() + attr[1:] + '=' + str(
                    value) + '\n'
                #  Print :
                P.debug('Writing "%s=%s" to preferences...' %
                        (_pre + attr[0].upper() + attr[1:], value))
            else:
                #  Write out Shot/Asset for the tab :
                if re.search('^' + _pre + 'Tab', line):
                    _txt += _pre + attr[0].upper() + attr[1:] + '=SHOT\n'
                else:
                    _txt += _pre + attr[0].upper() + attr[1:] + '=\n'
            _skip = True
            continue

        #  Operate on lines without the application/attribute names specified :
        else:
            srch = re.search('^' + _pre + '[a-zA-Z]+', line)
            #  Operate on lines related to the given attribute :
            if _skip and srch:
                if not re.search('^' + _pre + 'Tab', line):
                    if srch.group() in _clearable and attr in _clearable:
                        _txt += srch.group() + '=\n'
                    else:
                        _txt += line
                #  Deal with assetIndex attributes :
                else:
                    _txt += line
            else:
                _txt += line

    #  Close old preference file, so it can be over-written :
    _old.close()

    #  Write new preferences :
    _old = open(_prefsFile, 'w')
    _old.write(_txt)
    _old.close()

    return
コード例 #14
0
ファイル: nim.py プロジェクト: rohtau/nim_connectors
    def Print(self, indent=4, debug=False):
        'Prints the NIM dictionary'

        if not debug:
            P.info(' ' * indent + '{')
            if self.nim['server']['path']:
                P.info(' ' * indent * 2 +
                       'Server Path = "%s"' % self.nim['server']['path'])
            if self.nim['server']['name']:
                P.info(' ' * indent * 2 +
                       '  Name = "%s"' % self.nim['server']['name'])
            if self.nim['server']['ID']:
                P.info(' ' * indent * 2 +
                       '  ID = "%s"' % self.nim['server']['ID'])
            if self.nim['server']['Dict']:
                P.info(' ' * indent * 2 +
                       '  Dict = "%s"' % self.nim['server']['Dict'])
            if self.nim['server']['input']:
                P.info(' ' * indent * 2 +
                       '  Input = "%s"' % self.nim['server']['input'])
            for elem in self.elements:
                P.info(' ' * indent * 2 + '%s = "%s"' %
                       (self.get_printElem(elem), self.name(elem)))
                if self.Input(elem):
                    P.info(' ' * indent * 2 +
                           '  Input = %s' % self.Input(elem))
                if self.ID(elem):
                    P.info(' ' * indent * 2 + '  ID = "%s"' % self.ID(elem))
                if self.Dict(elem):
                    P.info(' ' * indent * 2 + '  Dict = %s' % self.Dict(elem))
                if elem == 'task':
                    P.info(' ' * indent * 2 +
                           '  Task Folder = "%s"' % self.taskFolder())
            P.info(' ' * indent * 2 + 'tab = "%s"' % self.nim['class'])
            P.info(' ' * indent + '}')
        elif debug:
            P.debug(' ' * indent + '{')
            if self.nim['server']['name']:
                P.debug(' ' * indent * 2 +
                        'Server = "%s"' % self.nim['server']['name'])
            if self.nim['server']['path']:
                P.debug(' ' * indent * 2 +
                        '  Path = "%s"' % self.nim['server']['path'])
            if self.nim['server']['ID']:
                P.debug(' ' * indent * 2 +
                        '  ID = "%s"' % self.nim['server']['ID'])
            if self.nim['server']['Dict']:
                P.debug(' ' * indent * 2 +
                        '  Dict = "%s"' % self.nim['server']['Dict'])
            if self.nim['server']['input']:
                P.debug(' ' * indent * 2 +
                        '  Input = "%s"' % self.nim['server']['input'])
            for elem in self.elements:
                P.debug(' ' * indent * 2 + '%s = "%s"' %
                        (self.get_printElem(elem), self.name(elem)))
                if self.Input(elem):
                    P.debug(' ' * indent * 2 +
                            '  Input = %s' % self.Input(elem))
                if self.ID(elem):
                    P.debug(' ' * indent * 2 + '  ID = "%s"' % self.ID(elem))
                if self.Dict(elem):
                    P.debug(' ' * indent * 2 + '  Dict = %s' % self.Dict(elem))
                if elem == 'task' and self.taskFolder():
                    P.debug(' ' * indent * 2 +
                            '  Task Folder = "%s"' % self.taskFolder())
            P.debug(' ' * indent * 2 + 'tab = "%s"' % self.nim['class'])
            P.debug(' ' * indent + '}')

        return
コード例 #15
0
ファイル: nim_houdini.py プロジェクト: rohtau/nim_connectors
def get_vars(nim=None):
    'Gets NIM settings from the root node in Houdini.'
    P.info('Getting information from NIM attributes on the root node...')

    h_root = hou.node("/")

    #  User :
    nim_user = h_root.userData("nim_user")
    if nim_user is not None:
        nim.set_user(userName=nim_user)
        P.info('Reading userName')
    else:
        P.error('Failed reading userName')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_user' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_user' )
        P.debug( 'User = %s' % value )
        nim.set_user( userName=value )
    '''

    #  User ID :
    nim_userID = h_root.userData("nim_userID")
    if nim_userID is not None:
        nim.set_userID(userID=nim_userID)
        P.info('Reading userID')
    else:
        P.error('Failed reading userID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_userID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_userID' )
        P.debug( 'User ID = %s' % value )
        nim.set_userID( userID=value )
    '''

    #  Tab/Class :
    nim_class = h_root.userData("nim_class")
    if nim_class is not None:
        nim.set_tab(nim_class)
        P.info('Reading nim_class')
    else:
        P.error('Failed reading nim_class')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_class' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_class' )
        P.debug( 'Tab = %s' % value )
        nim.set_tab( value )
    '''

    #  Server :
    nim_server = h_root.userData("nim_server")
    if nim_server is not None:
        nim.set_server(path=nim_server)
        P.info('Reading nim_server')
    else:
        P.error('Failed reading nim_server')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_server' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_server' )
        P.debug( 'Server = %s' % value )
        nim.set_server( path=value )
    '''

    #  Server ID :
    nim_serverID = h_root.userData("nim_serverID")
    if nim_serverID is not None:
        nim.set_ID(elem='server', ID=nim_serverID)
        P.info('Reading nim_serverID')
    else:
        P.error('Failed reading nim_serverID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_serverID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_serverID' )
        P.debug( 'Server ID = %s' % value )
        nim.set_ID( elem='server', ID=value )
    '''

    #  Job :
    nim_jobName = h_root.userData("nim_jobName")
    if nim_jobName is not None:
        nim.set_name(elem='job', name=nim_jobName)
        P.info('Reading nim_jobName')
    else:
        P.error('Failed reading nim_jobName')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_jobName' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_jobName' )
        P.debug( 'Job = %s' % value )
        nim.set_name( elem='job', name=value )
    '''

    #  Job ID :
    nim_jobID = h_root.userData("nim_jobID")
    if nim_jobID is not None:
        nim.set_ID(elem='job', ID=nim_jobID)
        P.info('Reading nim_jobID')
    else:
        P.error('Failed reading nim_jobID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_jobID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_jobID' )
        P.debug( 'Job ID = %s' % value )
        nim.set_ID( elem='job', ID=value )
    '''

    #  Show :
    nim_showName = h_root.userData("nim_showName")
    if nim_showName is not None:
        nim.set_name(elem='show', name=nim_showName)
        P.info('Reading nim_showName')
    else:
        P.error('Failed reading nim_showName')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_showName' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_showName' )
        P.debug( 'Show = %s' % value )
        nim.set_name( elem='show', name=value )
    '''

    #  Show ID :
    nim_showID = h_root.userData("nim_showID")
    if nim_showID is not None:
        nim.set_ID(elem='show', ID=nim_showID)
        P.info('Reading nim_showID')
    else:
        P.error('Failed reading nim_showID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_showID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_showID' )
        P.debug( 'Show ID = %s' % value )
        nim.set_ID( elem='show', ID=value )
    '''

    #  Shot :
    nim_shot = h_root.userData("nim_shot")
    if nim_shot is not None:
        nim.set_name(elem='shot', name=nim_shot)
        P.info('Reading nim_shot')
    else:
        P.error('Failed reading nim_shot')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_shot' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_shot' )
        P.debug( 'Shot = %s' % value )
        nim.set_name( elem='shot', name=value )
    '''

    #  Shot ID :
    nim_shotID = h_root.userData("nim_shotID")
    if nim_shotID is not None:
        nim.set_ID(elem='shot', ID=nim_shotID)
        P.info('Reading nim_shotID')
    else:
        P.error('Failed reading nim_shotID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_shotID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_shotID' )
        P.debug( 'Shot ID = %s' % value )
        nim.set_ID( elem='shot', ID=value )
    '''

    #  Asset :
    nim_asset = h_root.userData("nim_asset")
    if nim_asset is not None:
        nim.set_name(elem='asset', name=nim_asset)
        P.info('Reading nim_asset')
    else:
        P.error('Failed reading nim_asset')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_asset' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_asset' )
        P.debug( 'Asset = %s' % value )
        nim.set_name( elem='asset', name=value )
    '''

    #  Asset ID :
    nim_assetID = h_root.userData("nim_assetID")
    if nim_assetID is not None:
        nim.set_ID(elem='asset', ID=nim_assetID)
        P.info('Reading nim_assetID')
    else:
        P.error('Failed reading nim_assetID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_assetID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_assetID' )
        P.debug( 'Asset ID = %s' % value )
        nim.set_ID( elem='asset', ID=value )
    '''

    #  File ID :
    '''
    if mc.attributeQuery( 'defaultRenderGlobals.nim_fileID' ) :
        value=mc.attributeQuery( 'nim_fileID', node='defaultRenderGlobals' )
        P.debug( 'Class = %s' % value )
        nim.set_tab( tab=value )
    '''
    #TODO: Check if Maya code is error or intentional

    #  Shot/Asset Name :
    nim_name = h_root.userData("nim_name")
    if nim_name is not None:
        if nim.tab() == 'SHOT':
            P.debug('Shot Name = %s' % nim_name)
            #nim.set_tab( nim_name.Get() )
        elif nim.tab() == 'ASSET':
            P.debug('Asset Name = %s' % nim_name)
            #nim.set_tab( nim_name.Get() )
    else:
        P.error('Failed reading nim_name')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_name' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_name' )
        #  Determine what the tab is set to :
        if nim.tab()=='SHOT' :
            P.debug( 'Shot Name = %s' % value )
            #  No corresponding NIM attribute :
            #nim.set_tab( value )
        elif nim.tab()=='ASSET' :
            P.debug( 'Asset Name = %s' % value )
            #  No corresponding NIM attribute :
            #nim.set_tab( value )
    '''

    #  Basename :
    nim_basename = h_root.userData("nim_basename")
    if nim_basename is not None:
        nim.set_name(elem='base', name=nim_basename)
        P.info('Reading nim_basename')
    else:
        P.error('Failed reading nim_basename')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_basename' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_basename' )
        P.debug( 'Basename = %s' % value )
        nim.set_name( elem='base', name=value )
    
    '''

    #  Task :
    nim_type = h_root.userData("nim_type")
    if nim_type is not None:
        nim.set_name(elem='task', name=nim_type)
        P.info('Reading nim_type')
    else:
        P.error('Failed reading nim_type')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_type' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_type' )
        P.debug( 'Task = %s' % value )
        nim.set_name( elem='task', name=value )
    
    '''

    #  Task ID :
    nim_typeID = h_root.userData("nim_typeID")
    if nim_typeID is not None:
        nim.set_ID(elem='task', ID=nim_typeID)
        P.info('Reading nim_typeID')
    else:
        P.error('Failed reading nim_typeID')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_typeID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_typeID' )
        P.debug( 'Task ID = %s' % value )
        nim.set_ID( elem='task', ID=value )
    
    '''

    #  Task Folder :
    nim_typeFolder = h_root.userData("nim_typeFolder")
    if nim_typeFolder is not None:
        nim.set_taskFolder(folder=nim_typeFolder)
        P.info('Reading nim_typeFolder')
    else:
        P.error('Failed reading nim_typeFolder')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_typeFolder' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_typeFolder' )
        P.debug( 'Task Folder = %s' % value )
        nim.set_taskFolder( folder=value )
    
    '''

    #  Tag :
    nim_tag = h_root.userData("nim_tag")
    if nim_tag is not None:
        nim.set_name(elem='tag', name=nim_tag)
        P.info('Reading nim_tag')
    else:
        P.error('Failed reading nim_tag')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_tag' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_tag' )
        P.debug( 'Tag = %s' % value )
        nim.set_name( elem='tag', name=value )
    
    '''

    #  File Type :
    nim_fileType = h_root.userData("nim_fileType")
    if nim_fileType is not None:
        nim.set_name(elem='file', name=nim_fileType)
        P.info('Reading nim_fileType')
    else:
        P.error('Failed reading nim_fileType')
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_fileType' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_fileType' )
        P.debug( 'File Type = %s' % value )
        nim.set_name( elem='file', name=value )
    '''

    #  Print dictionary :
    #P.info('\nNIM Dictionary from get vars...')
    #nim.Print()

    return
コード例 #16
0
    def pub_check(self):
        'Cleans up a Maya file before publishing'

        #  Selection :
        sel = mc.ls(sl=True, long=True, transforms=True)
        #  Select entire hierarchy :
        if sel:
            hier = mc.listRelatives(sel,
                                    children=True,
                                    allDescendents=True,
                                    type='transform',
                                    fullPath=True)
            if hier:
                sel.extend(hier)

        #  Variables :
        #===------------

        non_linears = [
            'deformBend', 'deformFlare', 'deformSine', 'deformSquash',
            'deformTwist', 'deformWave'
        ]
        constraints=['pointConstraint', 'aimConstraint', 'orientConstraint', 'scaleConstraint', 'parentConstraint', \
            'geometryConstraint', 'normalConstraint', 'tangentConstraint', 'pointOnPolyConstraint']
        mayaLights = [
            'ambientLight', 'directionalLight', 'areaLight', 'pointLight',
            'spotLight', 'volumeLight'
        ]
        vrayLights = [
            'VRayLightSphereShape', 'VRayLightDomeShape', 'VRayLightRectShape',
            'VRayLightIESShape'
        ]

        #  Delete :
        #===-------

        #  Delete Unselected Geometry :
        if self.delUnselected.isChecked():
            P.info('Deleting unselected geometry...')
            delGeo = []
            objs = sel[:]
            allGeo = mc.listRelatives(mc.ls(geometry=True),
                                      parent=True,
                                      fullPath=True)
            for obj in sel:
                prnts = mc.listRelatives(obj, allParents=True, fullPath=True)
                if prnts:
                    prnt = prnts[0]
                    while prnts:
                        objs.extend(prnts)
                        prnts = mc.listRelatives(prnt,
                                                 allParents=True,
                                                 fullPath=True)
                        if prnts: prnt = prnts[0]
            delGeo = [x for x in allGeo if x not in objs]
            mc.delete(delGeo)
            P.info('    Unselected geometry deleted successfully.')

        #  Apply Default Shader :
        if self.applyShaders.isChecked():
            P.info('Applying default shaders...')
            mc.select(all=True)
            mm.eval('hyperShade -assign initialShadingGroup')
            mc.select(sel, replace=True)
            P.info('    Default shaders applied successfully.')

        #  Delete Unused Shaders :
        if self.delUnusedShaders.isChecked():
            P.info('Deleting unused shaders...')
            mm.eval(
                'hyperShadePanelMenuCommand("hyperShadePanel1", "deleteUnusedNodes")'
            )
            P.info('    Unused shaders have been deleted successfully.')

        #  Delete history :
        if self.delHist.isChecked():
            P.info('Deleteing all history...')
            mm.eval('DeleteAllHistory')
            P.info('    All history deleted successfully.')

        #  Clean File :
        #===-------------

        #  Delete Deformers :

        if self.delDeformers.currentText() == 'All':
            P.info('Deleting all deformers...')
            #  FFD's :
            P.info('    Deleting FFDs...')
            try:
                mc.delete(mc.ls(type='ffd'))
            except:
                P.info('      No FFDs found.')
            #  Lattices :
            P.info('    Deleting Latices...')
            try:
                mc.delete(mc.ls(type='lattice'))
            except:
                P.info('      No Lattices found.')
            #  Clusters :
            P.info('    Deleting clusters...')
            try:
                mc.delete(mc.ls(type='cluster'))
            except:
                P.info('      No Clusters found.')
            #  Sculpt Deformers :
            P.info('    Deleting Sculpts...')
            try:
                mm.eval('DeleteAllSculptObjects')
            except:
                P.info('      No Sculpts found.')
            #  Non-Linear Deformers :
            P.info('    Deleting non-linear deformers...')
            try:
                mm.eval('DeleteAllNonLinearDeformers')
            except:
                P.info('      No non-linear deformers found.')
            #  Wire Defomers :
            P.info('    Deleting Wires...')
            try:
                mc.delete(mc.ls(type='wire'))
            except:
                P.info('      No Wires found.')
        elif self.delDeformers.currentText() == 'Unselected':
            delDeformers = []
            deformers = ['lattice', 'cluster', 'wire']
            for deformer in deformers:
                obj_deformers = mc.ls(type=deformer, long=True)
                if obj_deformers:
                    for obj_deformer in obj_deformers:
                        if deformer == 'lattice':
                            allDeformers = mc.listRelatives(obj_deformer,
                                                            parent=True,
                                                            type='transform',
                                                            fullPath=True)
                            if allDeformers:
                                for obj in allDeformers:
                                    if obj not in sel:
                                        delDeformers.append(obj)
                        elif deformer == 'cluster':
                            connections = mc.listConnections(obj_deformer,
                                                             type='transform')
                            for conn in connections:
                                cls_long = mc.ls(conn, long=True)
                                if cls_long:
                                    if cls_long[0] not in sel:
                                        delDeformers.append(obj_deformer)
                        else:
                            if obj_deformer not in sel:
                                delDeformers.append(obj_deformer)
            if delDeformers:
                mc.delete(delDeformers)
            '''
            P.info('    Deleteing Un-selected Deformers...')
            for deformer in deformers :
                try :
                    mc.select( mc.ls( type=deformer ) )
                    for obj in sel :
                        mc.select( obj, d=True )
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    mc.delete()
                except : P.info( '  No un-sel deformers found' )
            #  Try deleting un-necessary implicit spheres :
            try :
                mc.select( mc.ls( type='implicitSphere' ) )
                for select in sel :
                    mc.select( select, d=True )
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    P.info( 'Deleting un-necessary implicit spheres...' )
                    mc.delete()
            except : P.info( '  No un-sel implicit spheres found' )
            #  Try deleting non-linears :
            try :
                for non_linear in non_linears :
                    mc.select( mc.ls( type=non_linear ) )
                    for select in sel :
                        mc.select( select, d=True )
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    P.info( 'Deleting un-necessary non-linears...' )
                    mc.delete()
            except : P.info( '  No un-sel non-linears found' )
        
        #  Delete Constraints :
        if conn_opt=='All' :
            P.info( 'Deleteing all constraints....' )
            mm.eval('DeleteAllConstraints')
        elif conn_opt=='Unsel' :
            P.info( 'Deleting un-sel constraints....' )
            try :
                for constraint in constraints :
                    mc.select( mc.ls( type=constraint ) )
                    for select in sel :
                        mc.select( select, d=True )
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    mc.delete()
            except :
                P.info( '  No constraints found' )
        
        #  Delete Curves :
        if curves_opt=='All' :
            try :
                mc.select( mc.ls( type='nurbsCurve' ) )
                mc.select( mc.ls( type='bezierCurve' ), add=True )
                mc.select( ms.ls( transforms=True, sl=True) )
                P.info( 'Deleteing all curves....' )
                mc.delete()
            except :
                P.info( '  No curves found' )
        elif curves_opt=='Unsel' :
            try :
                mc.select( mc.ls( type='nurbsCurve' ) )
                mc.select( mc.ls( type='bezierCurve' ), add=True )
                for select in sel :
                    mc.select( select, d=True )
                mc.select( mc.ls( transforms=True, sl=True ) )
                P.info( 'Deleting un-sel curves....' )
                mc.delete()
            except :
                P.info( '  No curves found' )
        
        #  Delete Locators :
        #TO DO -> Make sure locators don't have any connections.
        if loc_opt=='All' :
            try :
                mc.select( mc.ls( type='locator' ) )
                mc.select( ms.ls( transforms=True, sl=True ) )
                P.info( 'Deleteing all locators....' )
                mc.delete()
            except :
                P.info( '  No Locators Found' )
        elif loc_opt=='Unsel' :
            try :
                mc.select( mc.ls( type='locator' ) )
                for select in sel :
                    mc.select( select, d=True )
                mc.select( mc.ls( transforms=True, sl=True ) )
                P.info( 'Deleting un-sel locators....' )
                mc.delete()
            except :
                P.info( '  No locators found' )
        
        #  Delete Cameras :
        if cam_opt=='All' :
            P.info( 'Deleteing all cameras....' )
            mm.eval( 'DeleteAllCameras' )
        elif cam_opt=='Unsel' :
            try :
                mc.select( mc.ls( type='camera' ) )
                for select in sel :
                    mc.select( select, d=True )
                mc.select( mc.ls( transforms=True, sl=True ) )
                P.info( 'Deleting un-sel cameras....' )
                mc.delete()
            except :
                P.info( '  No cameras found' )
        
        #  Delete Imageplanes :
        if ip_opt=='All' :
            P.info( 'Deleteing all ImagePlanes....' )
            mm.eval( 'DeleteAllImagePlanes' )
        elif ip_opt=='Unsel' :
            try :
                mc.select( mc.ls( type='imagePlane' ) )
                for select in sel :
                    mc.select( select, d=True )
                mc.select( mc.ls( transforms=True, sl=True ) )
                P.info( 'Deleting un-sel ImagePlanes....' )
                mc.delete()
            except :
                P.info('  No ImagePlanes found')
            
        #  Delete Lights :
        if light_opt=='All' :
            P.info( 'Deleteing all lights....' )
            mm.eval( 'DeleteAllLights' )
            for vrayLight in vrayLights :
                try :
                    mc.select( mc.ls( type=vrayLight ) )		    
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    P.info( 'Deleting VRay lights...' )
                    mc.delete()
                except :
                    P.info( '  No '+vrayLight+' found' )
        elif light_opt=='Unsel' :
            P.info( 'Deleting un-sel lights....' )
            #  Delete Maya Lights :
            for mayaLight in mayaLights :
                try :
                    mc.select( mc.ls( type=mayaLight ) )
                    for select in sel :
                        mc.select( select, d=True )
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    P.info( '  Deleting Maya lights...' )
                    mc.delete()
                except :
                    P.info( '    No '+mayaLight+' found' )
            #  Delete VRay Lights :
            for vrayLight in vrayLights :
                try :
                    mc.select( mc.ls( type=vrayLight ) )
                    for select in sel :
                        mc.select( select, d=True )
                    mc.select( mc.ls( transforms=True, sl=True ) )
                    P.info( 'Deleting VRay lights...' )
                    mc.delete()
                except :
                    P.info( '  No '+vrayLight+' found' )
        
        #  Delete Display Layers :
        if dl_opt=='All' :
            try :
                mc.select( mc.ls( type='displayLayer' ) )
                P.info( 'Deleteing all display layers....' )
                mc.delete()
            except :
                P.info( '  No display layers found' )
        elif dl_opt=='Unsel' :
            try :
                mc.select( mc.ls( type='displayLayer' ) )
                for select in sel :
                    mc.select( select, d=True )
                mc.select( mc.ls( transforms=True, sl=True ) )
                P.info( 'Deleting un-sel display layers....' )
                mc.delete()
            except :
                P.info( '  No display layers found' )
        
        #  Delete Render Layers :
        if rl_opt=='All' :
            try :
                mc.select( mc.ls( type='renderLayer' ) )
                P.info( 'Deleteing all render layers....' )
                mc.delete()
            except :
                P.info( '  No render layers found' )
        elif rl_opt=='Unsel' :
            try :
                mc.select( mc.ls( type='renderLayer' ) )
                for select in sel :
                    mc.select( select, d=True )
                mc.select( mc.ls( transforms=True, sl=True ) )
                P.info( 'Deleting un-sel render layers....' )
                mc.delete()
            except:
                P.info( '  No render layers found' )
        
        #  Delete empty group nodes ?
        '''
        P.info('\n\nThe file is clean!\n')

        return
コード例 #17
0
                        return False
                else:
                    return prefsFile
            else:
                return prefsFile

    #  URL :
    if not os.path.exists(prefsFile):
        #  Loop until valid URL found, or Cancel pressed :
        search_for_url = True
        search_for_user = False
        while search_for_url:
            url = _inputURL()
            result = _verifyURL(url)
            if result:
                P.info('URL Valid')
                nim_URL = url
                search_for_url = False
                search_for_user = True
                break
            else:
                msg = 'The NIM API URL entered is invalid :\n %s \nTry Again?' % url
                if isGUI:
                    keepGoing = Win.popup(title=winTitle + ' - Get URL',
                                          msg=msg,
                                          type='okCancel')
                else:
                    keepGoing = raw_input(
                        'The NIM API URL entered is invalid. Try Again? (Y/N):'
                    )
                    if keepGoing == 'Y' or keepGoing == 'y':
コード例 #18
0
def get_vars(nim=None):
    'Gets NIM settings from the defaultRenderGlobals node in 3dsMax.'
    P.info(
        '3dsMax Getting information from NIM attributes on the defaultRenderGlobals node...'
    )

    #  User :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_user' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_user' )
        P.debug( 'User = %s' % value )
        nim.set_user( userName=value )
    '''
    nim_user = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_user", nim_user)
    if success:
        nim.set_user(nim_user.Get())
        P.info('Reading userName')
    else:
        P.error('Failed reading userName')

    #  User ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_userID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_userID' )
        P.debug( 'User ID = %s' % value )
        nim.set_userID( userID=value )
    '''
    nim_userID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_userID",
                                         nim_userID)
    if success:
        nim.set_userID(nim_userID.Get())
        P.error('Reading nim_userID')
    else:
        P.error('Failed reading nim_userID')

    #  Tab/Class :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_class' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_class' )
        P.debug( 'Tab = %s' % value )
        nim.set_tab( value )
    '''
    nim_class = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_class", nim_class)
    if success:
        nim.set_tab(nim_class.Get())
        P.error('Reading nim_class')
    else:
        P.error('Failed reading nim_class')

    #  Server :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_server' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_server' )
        P.debug( 'Server = %s' % value )
        nim.set_server( path=value )
    '''
    nim_server = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_server",
                                         nim_server)
    if success:
        nim.set_server(path=nim_server.Get())
        P.error('Reading nim_server')
    else:
        P.error('Failed reading nim_server')

    #  Server ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_serverID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_serverID' )
        P.debug( 'Server ID = %s' % value )
        nim.set_ID( elem='server', ID=value )
    '''
    nim_serverID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_serverID",
                                         nim_serverID)
    if success:
        nim.set_ID(elem='server', ID=nim_serverID.Get())
        P.error('Reading nim_serverID')
    else:
        P.error('Failed reading nim_serverID')

    #  Job :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_jobName' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_jobName' )
        P.debug( 'Job = %s' % value )
        nim.set_name( elem='job', name=value )
    '''
    nim_jobName = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_jobName",
                                         nim_jobName)
    if success:
        nim.set_name(elem='job', name=nim_jobName.Get())
        P.error('Reading nim_jobName')
    else:
        P.error('Failed reading nim_jobName')

    #  Job ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_jobID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_jobID' )
        P.debug( 'Job ID = %s' % value )
        nim.set_ID( elem='job', ID=value )
    '''
    nim_jobID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_jobID", nim_jobID)
    if success:
        nim.set_ID(elem='job', ID=nim_jobID.Get())
        P.error('Reading nim_jobID')
    else:
        P.error('Failed reading nim_jobID')

    #  Show :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_showName' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_showName' )
        P.debug( 'Show = %s' % value )
        nim.set_name( elem='show', name=value )
    '''
    nim_showName = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_showName",
                                         nim_showName)
    if success:
        nim.set_name(elem='show', name=nim_showName.Get())
        P.error('Reading nim_showName')
    else:
        P.error('Failed reading nim_showName')

    #  Show ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_showID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_showID' )
        P.debug( 'Show ID = %s' % value )
        nim.set_ID( elem='show', ID=value )
    '''
    nim_showID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_showID",
                                         nim_showID)
    if success:
        nim.set_ID(elem='show', ID=nim_showID.Get())
        P.error('Reading nim_showID')
    else:
        P.error('Failed reading nim_showID')

    #  Shot :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_shot' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_shot' )
        P.debug( 'Shot = %s' % value )
        nim.set_name( elem='shot', name=value )
    '''
    nim_shot = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_shot", nim_shot)
    if success:
        nim.set_name(elem='shot', name=nim_shot.Get())
        P.error('Reading nim_shot')
    else:
        P.error('Failed reading nim_shot')

    #  Shot ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_shotID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_shotID' )
        P.debug( 'Shot ID = %s' % value )
        nim.set_ID( elem='shot', ID=value )
    '''
    nim_shotID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_shotID",
                                         nim_shotID)
    if success:
        nim.set_ID(elem='shot', ID=nim_shotID.Get())
        P.error('Reading nim_shotID')
    else:
        P.error('Failed reading nim_shotID')

    #  Asset :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_asset' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_asset' )
        P.debug( 'Asset = %s' % value )
        nim.set_name( elem='asset', name=value )
    '''
    nim_asset = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_asset", nim_asset)
    if success:
        nim.set_name(elem='asset', name=nim_asset.Get())
        P.error('Reading nim_asset')
    else:
        P.error('Failed reading nim_asset')

    #  Asset ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_assetID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_assetID' )
        P.debug( 'Asset ID = %s' % value )
        nim.set_ID( elem='asset', ID=value )
    '''
    nim_assetID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_assetID",
                                         nim_assetID)
    if success:
        nim.set_ID(elem='asset', ID=nim_assetID.Get())
        P.error('Reading nim_assetID')
    else:
        P.error('Failed reading nim_assetID')

    #  File ID :
    '''
    if mc.attributeQuery( 'defaultRenderGlobals.nim_fileID' ) :
        value=mc.attributeQuery( 'nim_fileID', node='defaultRenderGlobals' )
        P.debug( 'Class = %s' % value )
        nim.set_tab( tab=value )
    '''
    #TODO: Check if Maya code is error or intentional
    nim_fileID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_fileID",
                                         nim_fileID)
    if success:
        #nim.set_ID( elem='file', ID=nim_fileID.Get() )
        #nim.set_tab( tab=nim_fileID.Get() )
        #P.error('Reading nim_fileID')
        pass
    else:
        P.error('Failed reading nim_fileID')

    #  Shot/Asset Name :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_name' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_name' )
        #  Determine what the tab is set to :
        if nim.tab()=='SHOT' :
            P.debug( 'Shot Name = %s' % value )
            #  No corresponding NIM attribute :
            #nim.set_tab( value )
        elif nim.tab()=='ASSET' :
            P.debug( 'Asset Name = %s' % value )
            #  No corresponding NIM attribute :
            #nim.set_tab( value )
    '''
    nim_name = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_name", nim_name)
    if success:
        if nim.tab() == 'SHOT':
            P.debug('Shot Name = %s' % nim_name.Get())
            #nim.set_tab( nim_name.Get() )
        elif nim.tab() == 'ASSET':
            P.debug('Asset Name = %s' % nim_name.Get())
            #nim.set_tab( nim_name.Get() )
    else:
        P.error('Failed reading nim_name')

    #  Basename :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_basename' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_basename' )
        P.debug( 'Basename = %s' % value )
        nim.set_name( elem='base', name=value )
    
    '''
    nim_basename = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_basename",
                                         nim_basename)
    if success:
        nim.set_name(elem='base', name=nim_basename.Get())
        P.error('Reading nim_basename')
    else:
        P.error('Failed reading nim_basename')

    #  Task :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_type' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_type' )
        P.debug( 'Task = %s' % value )
        nim.set_name( elem='task', name=value )
    
    '''
    nim_type = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_type", nim_type)
    if success:
        nim.set_name(elem='task', name=nim_type.Get())
        P.error('Reading nim_type')
    else:
        P.error('Failed reading nim_type')

    #  Task ID :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_typeID' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_typeID' )
        P.debug( 'Task ID = %s' % value )
        nim.set_ID( elem='task', ID=value )
    
    '''
    nim_typeID = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_typeID",
                                         nim_typeID)
    if success:
        nim.set_ID(elem='task', ID=nim_typeID.Get())
        P.error('Reading nim_typeID')
    else:
        P.error('Failed reading nim_typeID')

    #  Task Folder :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_typeFolder' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_typeFolder' )
        P.debug( 'Task Folder = %s' % value )
        nim.set_taskFolder( folder=value )
    
    '''
    nim_typeFolder = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_typeFolder",
                                         nim_typeFolder)
    if success:
        nim.set_taskFolder(folder=nim_typeFolder.Get())
        P.error('Reading nim_typeFolder')
    else:
        P.error('Failed reading nim_typeFolder')

    #  Tag :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_tag' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_tag' )
        P.debug( 'Tag = %s' % value )
        nim.set_name( elem='tag', name=value )
    
    '''
    nim_tag = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_tag", nim_tag)
    if success:
        nim.set_name(elem='tag', name=nim_tag.Get())
        P.error('Reading nim_tag')
    else:
        P.error('Failed reading nim_tag')

    #  File Type :
    '''
    if mc.objExists( 'defaultRenderGlobals.nim_fileType' ) :
        value=mc.getAttr( 'defaultRenderGlobals.nim_fileType' )
        P.debug( 'File Type = %s' % value )
        nim.set_name( elem='file', name=value )
    '''
    nim_fileType = MaxPlus.FPValue()
    success = MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_fileType",
                                         nim_fileType)
    if success:
        nim.set_name(elem='file', name=nim_fileType.Get())
        P.error('Reading nim_fileType')
    else:
        P.error('Failed reading nim_fileType')

    #  Print dictionary :
    #P.info('\nNIM Dictionary from get vars...')
    #nim.Print()

    return
コード例 #19
0
def set_vars(nim=None):
    'Add variables to 3dsMax Globals'

    P.info('\n3dsMax - Setting Globals variables...')

    makeGlobalAttrs = False
    try:
        #TEST FOR EXISTING NIM DATA
        MaxPlus.Core.EvalMAXScript("rootNodeDataCA.nim_user")
    except:
        makeGlobalAttrs = True

    if makeGlobalAttrs:
        P.info("NIM DATA Not Found.\nAdding Global Attributes")
        nimAttrCmd = 'sceneDataCADef = attributes sceneDataCADef version:1 attribID:#(0x4fb91dfa, 0x73284f9e) \n\
                        (   \n\
                            parameters main rollout:params \n\
                            ( \n\
                                nim_user type:#string ui:nim_user default:"" \n\
                                nim_userID type:#string ui:nim_userID default:"" \n\
                                nim_class type:#string ui:nim_class default:"" \n\
                                nim_server type:#string ui:nim_server default:"" \n\
                                nim_serverID type:#string ui:nim_serverID default:"" \n\
                                nim_jobName type:#string ui:nim_jobName default:"" \n\
                                nim_jobID type:#string ui:nim_jobID default:"" \n\
                                nim_showName type:#string ui:nim_showName default:"" \n\
                                nim_showID type:#string ui:nim_showID default:"" \n\
                                nim_shot type:#string ui:nim_shot default:"" \n\
                                nim_shotID type:#string ui:nim_shotID default:"" \n\
                                nim_asset type:#string ui:nim_asset default:"" \n\
                                nim_assetID type:#string ui:nim_assetID default:"" \n\
                                nim_fileID type:#string ui:nim_fileID default:"" \n\
                                nim_name type:#string ui:nim_name default:"" \n\
                                nim_basename type:#string ui:nim_basename default:"" \n\
                                nim_type type:#string ui:nim_type default:"" \n\
                                nim_typeID type:#string ui:nim_typeID default:"" \n\
                                nim_typeFolder type:#string ui:nim_typeFolder default:"" \n\
                                nim_tag type:#string ui:nim_tag default:"" \n\
                                nim_fileType type:#string ui:nim_fileType default:"" \n\
                            ) \n\
                            rollout params "Scene Data Parameters" \n\
                            (  \n\
                                edittext nim_user "NIM nim_user" \n\
                                edittext nim_userID "NIM UserID" \n\
                                edittext nim_class "NIM nim_class" \n\
                                edittext nim_server "NIM nim_server" \n\
                                edittext nim_serverID "NIM ServerID" \n\
                                edittext nim_jobName "NIM nim_jobName" \n\
                                edittext nim_jobID "NIM JobID" \n\
                                edittext nim_showName "NIM nim_showName" \n\
                                edittext nim_showID "NIM ShowID" \n\
                                edittext nim_shot "NIM nim_shot" \n\
                                edittext nim_shotID "NIM nim_shotID" \n\
                                edittext nim_asset "NIM nim_asset" \n\
                                edittext nim_assetID "NIM nim_assetID" \n\
                                edittext nim_fileID "NIM nim_fileID" \n\
                                edittext nim_name "NIM nim_name" \n\
                                edittext nim_basename "NIM nim_basename" \n\
                                edittext nim_type "NIM nim_type" \n\
                                edittext nim_typeID "NIM nim_typeID" \n\
                                edittext nim_typeFolder "NIM nim_typeFolder" \n\
                                edittext nim_tag "NIM nim_tag" \n\
                                edittext nim_fileType "NIM nim_fileType" \n\
                            ) \n\
                        ) \n\
                        thescene = (refs.dependents rootnode)[1] \n\
                        rootNodeDataCA = undefined \n\
                        if (custattributes.add rootnode sceneDataCADef) do \n\
                            rootNodeDataCA = rootnode.custAttributes[rootnode.custAttributes.count] \n\
                        sceneDataCA = undefined \n\
                        if (custattributes.add thescene sceneDataCADef) do \n\
                            sceneDataCA = thescene.custAttributes[thescene.custAttributes.count] \n'

        try:
            MaxPlus.Core.EvalMAXScript(nimAttrCmd)
            P.info("Root and Scene attributes added")
        except:
            P.error("Failed to create global attributes")
            return

    P.info("Reading Global Attributes")
    nimAttrReadCmd = 'thescene = (refs.dependents rootnode)[1] \n\
                      rootNodeDataCA = undefined \n\
                      if(rootnode.custAttributes.count != 0) do \n\
                         rootNodeDataCA = rootnode.custAttributes[rootnode.custAttributes.count] \n\
                      sceneDataCA = undefined \n\
                      if(thescene.custAttributes.count != 0) do \n\
                         sceneDataCA = thescene.custAttributes[thescene.custAttributes.count] \n'

    try:
        MaxPlus.Core.EvalMAXScript(nimAttrReadCmd)
    except:
        P.error('Failed to read global attributes')
        return

    #  User :
    userInfo = nim.userInfo()
    '''
    if not mc.attributeQuery( 'nim_user', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_user', dt='string' )
    mc.setAttr( 'defaultRenderGlobals.nim_user', userInfo['name'], type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_user="******"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_user="******"')

    #  User ID :
    '''
    if not mc.attributeQuery( 'nim_userID', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_userID', dt='string' )
    mc.setAttr( 'defaultRenderGlobals.nim_userID', userInfo['ID'], type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_userID="' +
                               str(userInfo['ID']) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_userID="' +
                               str(userInfo['ID']) + '"')

    #  Tab/Class :
    '''
    if not mc.attributeQuery( 'nim_class', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_class', dt='string' )
    mc.setAttr( 'defaultRenderGlobals.nim_class', nim.tab(), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_class="' + str(nim.tab()) +
                               '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_class="' + str(nim.tab()) +
                               '"')

    #  Server :
    '''
    if not mc.attributeQuery( 'nim_server', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_server', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_server', nim.server(), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_server="' +
                               str(nim.server()) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_server="' + str(nim.server()) +
                               '"')

    #  Server ID :
    '''
    if not mc.attributeQuery( 'nim_serverID', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_serverID', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_serverID', str(nim.ID('server')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_serverID="' +
                               str(nim.ID('server')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_serverID="' +
                               str(nim.ID('server')) + '"')

    #  Job :
    '''
    if not mc.attributeQuery( 'nim_jobName', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_jobName', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_jobName', nim.name('job'), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_jobName="' +
                               str(nim.name('job')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_jobName="' +
                               str(nim.name('job')) + '"')

    #  Job ID :
    '''
    if not mc.attributeQuery( 'nim_jobID', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_jobID', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_jobID', str(nim.ID('job')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_jobID="' +
                               str(nim.ID('job')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_jobID="' + str(nim.ID('job')) +
                               '"')

    #  Show :
    '''
    if not mc.attributeQuery( 'nim_showName', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_showName', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_showName', nim.name('show'), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_showName="' +
                               str(nim.name('show')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_showName="' +
                               str(nim.name('show')) + '"')

    #  Show ID :
    '''
    if nim.tab()=='SHOT' :
        if not mc.attributeQuery( 'nim_showID', node='defaultRenderGlobals', exists=True) :
            mc.addAttr( 'defaultRenderGlobals', longName='nim_showID', dt="string")
        mc.setAttr( 'defaultRenderGlobals.nim_showID', str(nim.ID('show')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_showID="' +
                               str(nim.ID('show')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_showID="' +
                               str(nim.ID('show')) + '"')

    #  Shot :
    '''
    if not mc.attributeQuery( 'nim_shot', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_shot', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_shot', str(nim.name('shot')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_shot="' +
                               str(nim.name('shot')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_shot="' +
                               str(nim.name('shot')) + '"')

    #  Shot ID :
    '''
    if not mc.attributeQuery( 'nim_shotID', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_shotID', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_shotID', str(nim.ID('shot')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_shotID="' +
                               str(nim.ID('shot')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_shotID="' +
                               str(nim.ID('shot')) + '"')

    #  Asset :
    '''
    if nim.tab()=='ASSET' :
        if not mc.attributeQuery( 'nim_asset', node='defaultRenderGlobals', exists=True) :
            mc.addAttr( 'defaultRenderGlobals', longName='nim_asset', dt="string")
        mc.setAttr( 'defaultRenderGlobals.nim_asset', str(nim.name('asset')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_asset="' +
                               str(nim.name('asset')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_asset="' +
                               str(nim.name('asset')) + '"')

    #  Asset ID :
    '''
    if nim.tab()=='ASSET' :
        if not mc.attributeQuery( 'nim_assetID', node='defaultRenderGlobals', exists=True) :
            mc.addAttr( 'defaultRenderGlobals', longName='nim_assetID', dt="string")
        mc.setAttr( 'defaultRenderGlobals.nim_assetID', str(nim.ID('asset')), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_assetID="' +
                               str(nim.ID('asset')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_assetID="' +
                               str(nim.ID('asset')) + '"')

    #  File ID :
    '''
    if not mc.attributeQuery( 'nim_fileID', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_fileID', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_fileID', str(nim.ID('ver')), type='string' )
    '''
    P.info("FileID: %s" % str(nim.ID('ver')))
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_fileID="' +
                               str(nim.ID('ver')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_fileID="' +
                               str(nim.ID('ver')) + '"')

    #  Shot/Asset Name :
    '''
    if not mc.attributeQuery( 'nim_name', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_name', dt="string")
    '''
    if nim.tab() == 'SHOT':
        #mc.setAttr( 'defaultRenderGlobals.nim_name', nim.name('shot'), type='string' )
        MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_name="' +
                                   str(nim.name('shot')) + '"')
        MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_name="' +
                                   str(nim.name('shot')) + '"')
    elif nim.tab() == 'ASSET':
        #mc.setAttr( 'defaultRenderGlobals.nim_name', nim.name('asset'), type='string' )
        MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_name="' +
                                   str(nim.name('asset')) + '"')
        MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_name="' +
                                   str(nim.name('asset')) + '"')

    #  Basename :
    '''
    if not mc.attributeQuery( 'nim_basename', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_basename', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_basename', nim.name('base'), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_basename="' +
                               str(nim.name('base')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_basename="' +
                               str(nim.name('base')) + '"')

    #  Task :
    '''
    if not mc.attributeQuery( 'nim_type', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_type', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_type', nim.name( elem='task' ), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_type="' +
                               str(nim.name(elem='task')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_type="' +
                               str(nim.name(elem='task')) + '"')

    #  Task ID :
    '''
    if not mc.attributeQuery( 'nim_typeID', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_typeID', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_typeID', str(nim.ID( elem='task' )), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_typeID="' +
                               str(nim.ID(elem='task')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_typeID="' +
                               str(nim.ID(elem='task')) + '"')

    #  Task Folder :
    '''
    if not mc.attributeQuery( 'nim_typeFolder', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_typeFolder', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_typeFolder', str(nim.taskFolder()), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_typeFolder="' +
                               str(nim.taskFolder()) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_typeFolder="' +
                               str(nim.taskFolder()) + '"')

    #  Tag :
    '''
    if not mc.attributeQuery( 'nim_tag', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_tag', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_tag', nim.name('tag'), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_tag="' +
                               str(nim.name('tag')) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_tag="' + str(nim.name('tag')) +
                               '"')

    #  File Type :
    '''
    if not mc.attributeQuery( 'nim_fileType', node='defaultRenderGlobals', exists=True) :
        mc.addAttr( 'defaultRenderGlobals', longName='nim_fileType', dt="string")
    mc.setAttr( 'defaultRenderGlobals.nim_fileType', nim.fileType(), type='string' )
    '''
    MaxPlus.Core.EvalMAXScript('rootNodeDataCA.nim_fileType="' +
                               str(nim.fileType()) + '"')
    MaxPlus.Core.EvalMAXScript('sceneDataCA.nim_fileType="' +
                               str(nim.fileType()) + '"')

    P.info('    Completed setting NIM attributes root node.')
    #nim.Print()

    return
コード例 #20
0
def get_vars(nim=None):
    'Gets NIM settings from the defaultRenderGlobals node in Maya.'

    mc.undoInfo(openChunk=True)

    P.info(
        'Getting information from NIM attributes on the defaultRenderGlobals node...'
    )

    #  User :
    if mc.objExists('defaultRenderGlobals.nim_user'):
        value = mc.getAttr('defaultRenderGlobals.nim_user')
        P.debug('User = %s' % value)
        nim.set_user(userName=value)
    #  User ID :
    if mc.objExists('defaultRenderGlobals.nim_userID'):
        value = mc.getAttr('defaultRenderGlobals.nim_userID')
        P.debug('User ID = %s' % value)
        nim.set_userID(userID=value)
    #  Tab/Class :
    if mc.objExists('defaultRenderGlobals.nim_class'):
        value = mc.getAttr('defaultRenderGlobals.nim_class')
        P.debug('Tab = %s' % value)
        nim.set_tab(value)
    #  Server :
    if mc.objExists('defaultRenderGlobals.nim_server'):
        value = mc.getAttr('defaultRenderGlobals.nim_server')
        P.debug('Server = %s' % value)
        nim.set_server(path=value)
    #  Server ID :
    if mc.objExists('defaultRenderGlobals.nim_serverID'):
        value = mc.getAttr('defaultRenderGlobals.nim_serverID')
        P.debug('Server ID = %s' % value)
        nim.set_ID(elem='server', ID=value)
    #  Job :
    if mc.objExists('defaultRenderGlobals.nim_jobName'):
        value = mc.getAttr('defaultRenderGlobals.nim_jobName')
        P.debug('Job = %s' % value)
        nim.set_name(elem='job', name=value)
    #  Job ID :
    if mc.objExists('defaultRenderGlobals.nim_jobID'):
        value = mc.getAttr('defaultRenderGlobals.nim_jobID')
        P.debug('Job ID = %s' % value)
        nim.set_ID(elem='job', ID=value)
    #  Show :
    if mc.objExists('defaultRenderGlobals.nim_showName'):
        value = mc.getAttr('defaultRenderGlobals.nim_showName')
        P.debug('Show = %s' % value)
        nim.set_name(elem='show', name=value)
    #  Show ID :
    if mc.objExists('defaultRenderGlobals.nim_showID'):
        value = mc.getAttr('defaultRenderGlobals.nim_showID')
        P.debug('Show ID = %s' % value)
        nim.set_ID(elem='show', ID=value)
    #  Shot :
    if mc.objExists('defaultRenderGlobals.nim_shot'):
        value = mc.getAttr('defaultRenderGlobals.nim_shot')
        P.debug('Shot = %s' % value)
        nim.set_name(elem='shot', name=value)
    #  Shot ID :
    if mc.objExists('defaultRenderGlobals.nim_shotID'):
        value = mc.getAttr('defaultRenderGlobals.nim_shotID')
        P.debug('Shot ID = %s' % value)
        nim.set_ID(elem='shot', ID=value)
    #  Asset :
    if mc.objExists('defaultRenderGlobals.nim_asset'):
        value = mc.getAttr('defaultRenderGlobals.nim_asset')
        P.debug('Asset = %s' % value)
        nim.set_name(elem='asset', name=value)
    #  Asset ID :
    if mc.objExists('defaultRenderGlobals.nim_assetID'):
        value = mc.getAttr('defaultRenderGlobals.nim_assetID')
        P.debug('Asset ID = %s' % value)
        nim.set_ID(elem='asset', ID=value)
    #  File ID :
    '''
    if mc.attributeQuery( 'defaultRenderGlobals.nim_fileID' ) :
        value=mc.attributeQuery( 'nim_fileID', node='defaultRenderGlobals' )
        P.debug( 'Class = %s' % value )
        nim.set_tab( tab=value )
    '''
    #  Shot/Asset Name :
    if mc.objExists('defaultRenderGlobals.nim_name'):
        value = mc.getAttr('defaultRenderGlobals.nim_name')
        #  Determine what the tab is set to :
        if nim.tab() == 'SHOT':
            P.debug('Shot Name = %s' % value)
            #  No corresponding NIM attribute :
            #nim.set_tab( value )
        elif nim.tab() == 'ASSET':
            P.debug('Asset Name = %s' % value)
            #  No corresponding NIM attribute :
            #nim.set_tab( value )
    #  Basename :
    if mc.objExists('defaultRenderGlobals.nim_basename'):
        value = mc.getAttr('defaultRenderGlobals.nim_basename')
        P.debug('Basename = %s' % value)
        nim.set_name(elem='base', name=value)
    #  Task :
    if mc.objExists('defaultRenderGlobals.nim_type'):
        value = mc.getAttr('defaultRenderGlobals.nim_type')
        P.debug('Task = %s' % value)
        nim.set_name(elem='task', name=value)
    #  Task ID :
    if mc.objExists('defaultRenderGlobals.nim_typeID'):
        value = mc.getAttr('defaultRenderGlobals.nim_typeID')
        P.debug('Task ID = %s' % value)
        nim.set_ID(elem='task', ID=value)
    #  Task Folder :
    if mc.objExists('defaultRenderGlobals.nim_typeFolder'):
        value = mc.getAttr('defaultRenderGlobals.nim_typeFolder')
        P.debug('Task Folder = %s' % value)
        nim.set_taskFolder(folder=value)
    #  Tag :
    if mc.objExists('defaultRenderGlobals.nim_tag'):
        value = mc.getAttr('defaultRenderGlobals.nim_tag')
        P.debug('Tag = %s' % value)
        nim.set_name(elem='tag', name=value)
    #  File Type :
    if mc.objExists('defaultRenderGlobals.nim_fileType'):
        value = mc.getAttr('defaultRenderGlobals.nim_fileType')
        P.debug('File Type = %s' % value)
        nim.set_name(elem='file', name=value)

    #  Print dictionary :
    #P.info('\nNIM Dictionary from get vars...')
    #nim.Print()
    mc.undoInfo(closeChunk=True)
    return
コード例 #21
0
                try:
                    os.mkdir(_dir)
                except Exception, e:
                    P.error('Failed creating the directory: %s' % _dir)
                    P.error('    %s' % traceback.print_exc())
                    return False

    #  Check for workspace file :
    projectConfigFileName = projectName + '.mxp'
    workspaceFile = os.path.normpath(os.path.join(path, projectConfigFileName))
    if os.path.exists(workspaceFile):
        workspaceExists = True

    #  Create workspace file :
    if not workspaceExists:
        P.info('Creating 3dsMax path configuration file...')
        workspace_text = mk_workspace(projectName, renPath)
        workspace_file = open(workspaceFile, 'w')
        workspace_file.write(workspace_text)
        workspace_file.close

        #  Write out the render path :
        if renPath and os.path.isdir(renPath):
            try:
                nim_file = open(os.path.join(path, 'nim.mel'), 'w')
                nim_file.write(renPath)
                nim_file.close
            except:
                P.info('Sorry, unable to write the nim.mel file')

    #  Set Project :
コード例 #22
0
ファイル: nim_houdini.py プロジェクト: rohtau/nim_connectors
        workspace_file.close
    
        #  Write out the render path :
        if renPath and os.path.isdir( renPath ) :
            try :
                nim_file=open( os.path.join( path, 'nim.mel' ), 'w' )
                nim_file.write( renPath )
                nim_file.close
            except : P.info( 'Sorry, unable to write the nim.mel file' )
    '''

    #  Set Project :
    try:
        pathToSet = path.replace('\\', '/') + '/'
        if os.path.isdir(pathToSet):
            # update the environment variables
            os.environ.update({"JOB": str(pathToSet)})
            # update JOB using hscript
            hou.hscript("set -g JOB = '" + str(pathToSet) + "'")
            hou.allowEnvironmentToOverwriteVariable("JOB", True)
            P.info('Current Project Set: %s\n' % pathToSet)
        else:
            P.info('Project not set!')
    except:
        pass

    return True


#  End
コード例 #23
0
def os_filePath(path='', nim=None, serverID=None):
    'Returns the platform specific path to a filepath.'
    filePath, fp_noServer, server = '', '', ''

    #P.info("os_filePath PATH: %s" % path)
    #  Error Checking :
    if not nim.ID('job'):
        P.warning('Unable to find a platform specific OS path')
        return path

    if not serverID:
        serverDict = Api.get_serverInfo(nim.server(get='ID'))
    else:
        serverDict = Api.get_serverInfo(serverID)
    #P.info("serverDict: %s" % serverDict)

    if not serverDict or not len(serverDict):
        P.warning('Unable to find a platform specific OS path')
        return path

    if nim.server():
        fp_noServer = path[len(nim.server()):]

    # The following removed - redundant
    '''
    if nim.tab()=='SHOT' :
        serverDict=Api.get_jobServers( nim.ID('job') )
    elif nim.tab()=='ASSET' :
        serverDict=Api.get_jobServers( nim.ID('job') )
    '''

    #if serverDict and len(serverDict)>0 :      # removed to only compare to single server
    if serverDict and len(
            serverDict
    ) == 1:  # failed if more than one server found in serverDict

        #  Substitute Windows Paths :
        if serverDict[0]['winPath']:
            #P.info('Reading Window Path...')
            if re.search('^' + serverDict[0]['winPath'], path):
                fp_noServer = path[len(serverDict[0]['winPath']):]
            elif re.search('^' + serverDict[0]['winPath'],
                           path.replace('\\', '/')):
                fp_noServer = path[len(serverDict[0]['winPath']):]
            elif re.search('^' + serverDict[0]['winPath'],
                           path.replace('/', '\\')):
                fp_noServer = path[len(serverDict[0]['winPath']):]

        #  Substitute Mac paths :
        if serverDict[0]['osxPath']:
            #P.info('Reading OSX Path...')
            if re.search('^' + serverDict[0]['osxPath'], path):
                fp_noServer = path[len(serverDict[0]['osxPath']):]
            elif re.search('^' + serverDict[0]['osxPath'],
                           path.replace('\\', '/')):
                fp_noServer = path[len(serverDict[0]['osxPath']):]
            elif re.search('^' + serverDict[0]['osxPath'],
                           path.replace('/', '\\')):
                fp_noServer = path[len(serverDict[0]['osxPath']):]

        #  Substitute Linux Paths :
        if serverDict[0]['path']:
            #P.info('Reading Linux Path...')
            if re.search('^' + serverDict[0]['path'], path):
                fp_noServer = path[len(serverDict[0]['path']):]
            elif re.search('^' + serverDict[0]['path'],
                           path.replace('\\', '/')):
                fp_noServer = path[len(serverDict[0]['path']):]
            elif re.search('^' + serverDict[0]['path'],
                           path.replace('/', '\\')):
                fp_noServer = path[len(serverDict[0]['path']):]

        #  Store file path :
        if _os.lower() in ['windows', 'win32']:
            server = serverDict[0]['winPath']
            path = server + fp_noServer
            filePath = path.replace('/', '\\')
            return filePath
        elif _os.lower() in ['darwin', 'mac']:
            server = serverDict[0]['osxPath']
            path = server + fp_noServer
            filePath = path.replace('\\', '/')
            return filePath
        elif _os.lower() in ['linux', 'linux2']:
            server = serverDict[0]['path']
            path = server + fp_noServer
            filePath = path.replace('\\', '/')
            return filePath
        else:
            P.info(
                'Operating system, %s, not in valid list of operating systems'
                % _os)
            return False

        P.info('Filepath set to - %s' % filePath)

    else:
        P.error('Unable to convert filepath by platform!')
        return False

    return filePath
コード例 #24
0
ファイル: nim_flame.py プロジェクト: rohtau/nim_connectors
def set_vars( nim=None ) :
	'''Set NIM Variables'''
	P.info( '\nFlame - Setting Globals variables...' )
コード例 #25
0
ファイル: nim_nuke.py プロジェクト: rohtau/nim_connectors
    def __init__(self, nodeType='read'):
        'Creates a custom NIM Read/Write node'

        if nodeType.lower() in ['write']:
            nodeType = 'Write'
            nodeName = 'NIM_WriteNode'
        elif nodeType.lower() in ['read']:
            nodeType = 'Read'
            nodeName = 'NIM_ReadNode'

        P.info('\nCreating %s node\n' % nodeType)

        #  Create node :
        node = nuke.createNode(nodeType)

        count = 1
        #  Get unique node name :
        while nuke.exists('%s_%03d' % (nodeName, count)):
            count += 1
        node.knob('name').setValue('%s_%03d' % (nodeName, count))

        #  Create a Tab :
        tab = nuke.Tab_Knob('NIM')
        node.addKnob(tab)

        self.nim = {}
        #  Initialize the main dictionary :
        self.elements = ['job', 'show', 'shot', 'task', 'base', 'ver']
        for elem in self.elements:
            elemDict = {}
            elemDict['name'] = ''
            elemDict['ID'] = None
            elemDict['IDs'] = []
            elemDict['list'] = []
            elemDict['input'] = None
            self.nim[elem] = elemDict

        #  Add custom knobs :
        self.nim['job']['input']=nuke.Enumeration_Knob( 'job_input', 'Job:', \
            ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'] )
        self.nim['show']['input']=nuke.Enumeration_Knob( 'show_input', 'Show:', \
            ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'] )
        self.nim['shot']['input']=nuke.Enumeration_Knob( 'shot_input', 'Shot:', \
            ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'] )
        self.nim['task']['input']=nuke.Enumeration_Knob( 'task_input', 'Task:', \
            ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'] )
        self.nim['base']['input']=nuke.Enumeration_Knob( 'base_input', 'Basename:', \
            ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'] )
        self.nim['ver']['input']=nuke.Enumeration_Knob( 'ver_input', 'Version', \
            ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'] )

        #  Add knobs to tab :
        for knob in [self.nim['job']['input'], self.nim['show']['input'], self.nim['shot']['input'], self.nim['task']['input'], \
            self.nim['base']['input'], self.nim['ver']['input']] :
            node.addKnob(knob)

        self.elem_populate('job')
        self.elem_populate('show')
        self.elem_populate('shot')
        self.elem_populate('task')
        self.elem_populate('base')
        self.elem_populate('ver')

        #  Hook up knobs :
        nuke.addKnobChanged(self.knob_changed)

        return
コード例 #26
0
        for projDir in projDirs:
            _dir = os.path.normpath(os.path.join(path, projDir))
            if not os.path.isdir(_dir):
                try:
                    os.mkdir(_dir)
                except Exception, e:
                    P.error('Failed creating the directory: %s' % _dir)
                    P.error('    %s' % traceback.print_exc())
                    return False
        P.info('Complete')

    #  Check for workspace file :
    workspaceFile = os.path.normpath(os.path.join(path, 'workspace.mel'))
    if os.path.exists(workspaceFile):
        workspaceExists = True
        P.info('Workspace exists!')

    #  Create workspace file :
    if not workspaceExists:
        P.info('Creating Maya workspace.mel file...')
        workspace_text = mk_workspace(renPath)
        #P.info(workspace_text)
        workspace_file = open(workspaceFile, 'w')
        workspace_file.write(workspace_text)
        workspace_file.close
        P.info('Complete')

        #  Write out the render path :
        if renPath and os.path.isdir(renPath):
            try:
                nim_file = open(os.path.join(path, 'nim.mel'), 'w')
コード例 #27
0
def verUp(nim=None,
          padding=2,
          selected=False,
          win_launch=False,
          pub=False,
          symLink=True):
    'Versions up a file - Does NOT add it to the NIM API'

    #  Variables :
    cur_filePath, cur_fileDir, cur_fileName = '', '', ''
    scenePath, assetName, shotName = '', '', ''
    server, fileBase, nimDir, fileDir, ext, verNum = '', '', '', '', '', None
    renDir, compPath = '', ''

    #  Get current file information :
    if not nim:
        #  Initialize NIM dictionary :
        nim = Nim.NIM()
        nim.ingest_prefs()
        if pub: nim.set_name(elem='filter', name='Published')
        else: nim.set_name(elem='filter', name='Work')

    #P.info("SERVER ID: %s" % str(nim.server(get='ID')))
    # Get Server OS Path from server ID
    serverOsPathInfo = Api.get_serverOSPath(nim.server(get='ID'),
                                            platform.system())
    P.info("Server OS Path: %s" % serverOsPathInfo)
    serverOSPath = serverOsPathInfo[0]['serverOSPath']
    nim.set_server(path=serverOSPath)

    #  Attempt to get current file information :
    if nim.filePath():
        cur_filePath = nim.filePath()
        cur_fileDir = nim.fileDir()
        cur_fileName = nim.fileName()

    #  Basename :
    nim.set_name(elem='base', name=Api.to_basename(nim=nim))
    basename = nim.name('base')

    #  Directory to save to :
    api_fileDir = Api.to_fileDir(nim)
    if api_fileDir and not cur_fileDir:
        fileDir = api_fileDir
    elif not api_fileDir and cur_fileDir:
        fileDir = cur_fileDir
    elif api_fileDir and cur_fileDir:
        fileDir = api_fileDir

    #  Project Directory :
    if fileDir[-6:] == 'scenes': projDir = fileDir[:-6]
    else: projDir = fileDir

    #  Convert file directory :
    #P.info("fileDir: %s" % fileDir)
    fileDir = os_filePath(path=fileDir, nim=nim)
    P.info('File Directory = %s' % fileDir)
    projDir = os_filePath(path=projDir, nim=nim)
    P.info('Project Directory = %s' % projDir)

    #  Version Number :
    baseInfo = ''
    if nim.tab() == 'SHOT':
        baseInfo = Api.get_baseVer(shotID=nim.ID('shot'),
                                   basename=nim.name('base'))
    elif nim.tab() == 'ASSET':
        baseInfo = Api.get_baseVer(assetID=nim.ID('asset'),
                                   basename=nim.name('base'))
    if baseInfo:
        ver_baseInfo = baseInfo[0]['version']
        verNum = int(ver_baseInfo) + 1
    else:
        verNum = 1
    try:
        for f in [
                f for f in os.listdir(fileDir)
                if os.path.isfile(os.path.join(fileDir, f))
        ]:
            verSrch = re.search(basename + '_v[0-9]+', f)
            if verSrch:
                numSrch = re.search('[0-9]+$', verSrch.group())
                if numSrch:
                    if int(numSrch.group()) > verNum:
                        verNum = int(numSrch.group())
    except:
        pass
    nim.set_version(version=str(verNum))

    #  Set Extension :
    ext = nim.name('fileExt')
    if not ext:
        P.debug('Getting Extension')
        ext = get_ext()

    P.debug('Extension = %s' % ext)

    #  Error Checking :
    if not fileDir or not basename:
        msg='Sorry, you must either: Save the file from the NIM File GUI, or\n'+\
            '    save the file in the appropriate folders, with the correct name.\n\n'+\
            'File NOT saved.'
        P.error(msg)
        Win.popup(title='NIM - Version Up Error', msg=msg)
        return False

    #  Construct new File Name :
    if not pub:
        new_fileName = '%s_v%s%s' % (basename, str(verNum).zfill(
            int(padding)), ext)
    elif pub:
        verNum -= 1
        new_fileName = '%s_v%s_PUB%s' % (basename, str(verNum).zfill(
            int(padding)), ext)

    #  Construct new File Path :
    temp_filePath = os.path.normpath(os.path.join(fileDir, new_fileName))
    new_filePath = os_filePath(path=temp_filePath, nim=nim)

    #  Construct Render Directory :
    if nim.tab() == 'SHOT' and nim.ID('shot'):
        pathInfo = Api.get({
            'q': 'getPaths',
            'type': 'shot',
            'ID': str(nim.ID('shot'))
        })
    elif nim.tab() == 'ASSET' and nim.ID('asset'):
        pathInfo = Api.get({
            'q': 'getPaths',
            'type': 'asset',
            'ID': str(nim.ID('asset'))
        })
    if pathInfo and type(pathInfo) == type(dict()) and 'renders' in pathInfo:
        renDir = os.path.normpath(
            os.path.join(nim.server(), pathInfo['renders']))
    else:
        #  Use old method, if path information can't be derived :
        renDir = Api.to_renPath(nim)
    renDir = os_filePath(path=renDir, nim=nim)

    #  Comp Path :
    if pathInfo and type(pathInfo) == type(dict()) and 'comps' in pathInfo:
        compPath = os.path.normpath(
            os.path.join(nim.server(), pathInfo['comps']))
        nim.set_compPath(compPath=compPath)
    compPath = os_filePath(path=compPath, nim=nim)

    P.info('\nVariables:')
    P.info('  Initial File Path = %s' % cur_filePath)
    P.info('  Basename = %s' % basename)
    P.info('  Project Directory = %s' % projDir)
    P.info('  New File Path = %s' % new_filePath)
    P.info('  Render Directory = %s' % renDir)
    P.info('  Comp Directory = %s\n' % compPath)

    #  Directories :
    #===---------------

    #  Make basename directory :
    if projDir and not os.path.isdir(projDir):
        P.info('Creating basename directory within...\n    %s' % projDir)
        og_umask = os.umask(0)
        os.makedirs(projDir)
        os.umask(og_umask)
        if os.path.isdir(projDir):
            P.info('  Successfully created the basename directory!')
        else:
            P.warning('  Unable to create basename directory')

    #  Make render directory :
    if renDir and not os.path.isdir(renDir):
        P.info('Creating render directory...\n      %s' % renDir)

        og_umask = os.umask(0)
        os.makedirs(renDir)
        os.umask(og_umask)

        if os.path.isdir(renDir):
            P.info('    Successfully created the render directory!')
        else:
            P.warning('    Unable to create project directories.')
    elif renDir:
        P.debug('Render directory already exists.\n')

    #  Make Maya Project directory :
    if os.path.isdir(projDir) and nim.app() == 'Maya':
        import nim_maya as M
        if M.makeProject(projectLocation=projDir, renderPath=renDir):
            P.info('Created Maya project directorires within...\n    %s' %
                   projDir)
        else:
            P.warning('    Unable to create Maya project directories.')
    elif nim.app() == 'Maya':
        P.warning('Didn\'t create Maya project directories.')

    #  Make 3dsMax Project directory :
    if os.path.isdir(projDir) and nim.app() == '3dsMax':
        import nim_3dsmax as Max
        if Max.mk_proj(path=projDir, renPath=renDir):
            P.info('Created 3dsMax project directorires within...\n    %s' %
                   projDir)
        else:
            P.warning('    Unable to create 3dsMax project directories.')
    elif nim.app() == '3dsMax':
        P.warning('Didn\'t create 3dsMax project directories.')

    #  Make Houdini Project directory :
    if os.path.isdir(projDir) and nim.app() == 'Houdini':
        import nim_houdini as Houdini
        if Houdini.mk_proj(path=projDir, renPath=renDir):
            P.info('Created Houdini project directorires within...\n    %s' %
                   projDir)
        else:
            P.warning('    Unable to create Houdini project directories.')
    elif nim.app() == 'Houdini':
        P.warning('Didn\'t create Houdini project directories.')

    #  Save :
    #===------
    P.info('APP = %s' % nim.app())

    #  Maya :
    if nim.app() == 'Maya':
        import maya.cmds as mc

        #  Save File :
        if not selected:
            #  Set Vars :
            import nim_maya as M
            M.set_vars(nim=nim)

            P.info('Saving file as %s \n' % new_filePath)
            mc.file(rename=new_filePath)
            if ext == '.mb':
                mc.file(save=True, type='mayaBinary')
            elif ext == '.ma':
                mc.file(save=True, type='mayaAscii')
        else:
            P.info('Saving selected items as %s \n' % new_filePath)
            if ext == '.mb':
                mc.file(new_filePath, exportSelected=True, type='mayaBinary')
            elif ext == '.ma':
                mc.file(new_filePath, exportSelected=True, type='mayaAscii')

    #  Nuke :
    elif nim.app() == 'Nuke':

        import nuke

        #  Save File :
        if not selected:
            #  Set Vars :
            import nim_nuke as N
            N.set_vars(nim=nim)
            P.info('Saving file as %s \n' % new_filePath)
            nuke.scriptSaveAs(new_filePath)
        elif selected:
            P.info('Saving selected items as %s \n' % new_filePath)
            try:
                nuke.nodeCopy(new_filePath)
            except RuntimeError:
                P.info(
                    'Failed to selected items... Possibly no items selected.')
                return False

    #  Cinema 4D :
    elif nim.app() == 'C4D':
        import c4d

        #  Set Vars :
        nim_plugin_ID = 1032427

        #  Save File :
        if not selected:
            P.info('Saving file as %s \n' % new_filePath)
            import nim_c4d as C
            C.set_vars(nim=nim, ID=nim_plugin_ID)
            doc = c4d.documents.GetActiveDocument()
            doc.SetDocumentName(new_fileName)
            doc.SetDocumentPath(fileDir)
            c4d.documents.SaveDocument(doc, str(new_filePath),
                                       c4d.SAVEDOCUMENTFLAGS_DIALOGSALLOWED,
                                       c4d.FORMAT_C4DEXPORT)
            P.info('Saving File Complete')
        #  Save Selected :
        else:
            P.info('Saving selected items as %s \n' % new_filePath)
            doc = c4d.documents.GetActiveDocument()
            sel = doc.GetActiveObjects(False)
            baseDoc = c4d.documents.IsolateObjects(doc, sel)
            c4d.documents.SaveDocument(baseDoc, str(new_filePath),
                                       c4d.SAVEDOCUMENTFLAGS_DIALOGSALLOWED,
                                       c4d.FORMAT_C4DEXPORT)

    #  Hiero :
    elif nim.app() == 'Hiero':
        import hiero.core
        projects = hiero.core.projects()
        proj = projects[0]
        curFilePath = proj.path()
        proj.saveAs(new_filePath)
        #proj=hiero.core.project( projName )
        #proj=hiero.core.Project
        #proj=self._get_current_project()

    #  3dsMax :
    if nim.app() == '3dsMax':
        import MaxPlus
        maxFM = MaxPlus.FileManager
        #  Save File :
        if not selected:
            #  Set Vars :
            import nim_3dsmax as Max
            Max.set_vars(nim=nim)
            #Save File
            P.info('Saving file as %s \n' % new_filePath)
            maxFM.Save(new_filePath)
        else:
            #Save Selected Items
            P.info('Saving selected items as %s \n' % new_filePath)
            maxFM.SaveSelected(new_filePath)

    #  Houdini :
    if nim.app() == 'Houdini':
        import hou
        #  Save File :
        if not selected:
            #  Set Vars :
            import nim_houdini as Houdini
            Houdini.set_vars(nim=nim)

            #Save File
            if _os.lower() in ['windows', 'win32']:
                new_filePath = new_filePath.replace('\\', '/')

            P.info('Saving file as %s \n' % new_filePath)
            try:
                hou.hipFile.save(file_name=str(new_filePath))
                P.info('Houdini successfully save the file.')
            except hou.OperationFailed:
                P.info('Houdini failed to save the file.')
                P.info(hou.OperationFailed.description())

            #Set $HIP var to location of current file
            if _os.lower() in ['windows', 'win32']:
                projDir = projDir.replace('\\', '/')

            hou.hscript("set -g HIP = '" + str(projDir) + "'")

            #Set $HIPNAME var to current file
            hipName = os.path.splitext(new_fileName)[0]
            hou.hscript("set -g HIPNAME = '" + str(hipName) + "'")

        else:
            #Save Selected Items
            if _os.lower() in ['windows', 'win32']:
                new_filePath = new_filePath.replace('\\', '/')
            P.info('Saving selected items as %s \n' % new_filePath)

            try:
                tmp_filePath = new_filePath + "." + time.strftime(
                    '%Y%m%d_%H%M%S') + ".tmp"
                parentNode = "hou.node('/obj/')"
                selected = hou.selectedNodes()
                selectedParent = selected[0].parent()
                selectedParent.saveItemsToFile(selected,
                                               file_name=str(tmp_filePath))
                P.info('Houdini saved items to file.')
            except hou.OperationFailed:
                P.info('Houdini failed to save selected items to file.')
                P.info(hou.OperationFailed.description())

            saveCode = '"' + "import os, time; newParent = " + parentNode + "; newParent.loadChildrenFromFile('" + tmp_filePath + "'); hou.hipFile.save('" + new_filePath + "')" + '"'
            pyCmd = os.environ["HFS"] + '/bin/hython -c ' + saveCode

            try:
                os.system(pyCmd)
            except:
                P.info('Failed to run hython for external Houini save.')

            try:
                os.remove(tmp_filePath)
            except OSError:
                pass

    #  Make a copy of the file, if publishing :
    if pub and not symLink:
        pub_fileName = basename + ext
        pub_fileDir = Api.to_nimDir(nim=nim)
        pub_filePath = os.path.join(pub_fileDir, pub_fileName)
        #  Delete any pre-existing published file :
        if os.path.isfile(pub_filePath):
            os.chmod(pub_filePath, stat.S_IWRITE)
            os.remove(pub_filePath)
        #  Copy file and make it read-only :
        shutil.copyfile(new_filePath, pub_filePath)
        os.chmod(pub_filePath, stat.S_IREAD)

    #  Print save success :
    P.info('\nFile successfully saved to...\n    %s\n' % new_filePath)

    #  [AS]  returning nim object with current dictionary settings
    #return new_filePath
    return {'filepath': new_filePath, 'nim': nim}
コード例 #28
0
def set_vars(nim=None):
    'Add variables to Maya Render Globals'

    mc.undoInfo(openChunk=True)

    P.info('\nSetting Render Globals variables...')

    #  User :
    userInfo = nim.userInfo()
    if not mc.attributeQuery(
            'nim_user', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_user', dt='string')
    mc.setAttr('defaultRenderGlobals.nim_user',
               userInfo['name'],
               type='string')
    #  User ID :
    if not mc.attributeQuery(
            'nim_userID', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_userID', dt='string')
    mc.setAttr('defaultRenderGlobals.nim_userID',
               userInfo['ID'],
               type='string')
    #  Tab/Class :
    if not mc.attributeQuery(
            'nim_class', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_class', dt='string')
    mc.setAttr('defaultRenderGlobals.nim_class', nim.tab(), type='string')
    #  Server :
    if not mc.attributeQuery(
            'nim_server', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_server', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_server', nim.server(), type='string')
    #  Server ID :
    if not mc.attributeQuery(
            'nim_serverID', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals',
                   longName='nim_serverID',
                   dt="string")
    mc.setAttr('defaultRenderGlobals.nim_serverID',
               str(nim.ID('server')),
               type='string')
    #  Job :
    if not mc.attributeQuery(
            'nim_jobName', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_jobName', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_jobName',
               nim.name('job'),
               type='string')
    #  Job ID :
    if not mc.attributeQuery(
            'nim_jobID', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_jobID', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_jobID',
               str(nim.ID('job')),
               type='string')
    #  Show :
    if not mc.attributeQuery(
            'nim_showName', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals',
                   longName='nim_showName',
                   dt="string")
    mc.setAttr('defaultRenderGlobals.nim_showName',
               nim.name('show'),
               type='string')
    #  Show ID :
    if nim.tab() == 'SHOT':
        if not mc.attributeQuery(
                'nim_showID', node='defaultRenderGlobals', exists=True):
            mc.addAttr('defaultRenderGlobals',
                       longName='nim_showID',
                       dt="string")
        mc.setAttr('defaultRenderGlobals.nim_showID',
                   str(nim.ID('show')),
                   type='string')
    #  Shot :
    if not mc.attributeQuery(
            'nim_shot', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_shot', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_shot',
               str(nim.name('shot')),
               type='string')
    #  Shot ID :
    if not mc.attributeQuery(
            'nim_shotID', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_shotID', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_shotID',
               str(nim.ID('shot')),
               type='string')
    #  Asset :
    if nim.tab() == 'ASSET':
        if not mc.attributeQuery(
                'nim_asset', node='defaultRenderGlobals', exists=True):
            mc.addAttr('defaultRenderGlobals',
                       longName='nim_asset',
                       dt="string")
        mc.setAttr('defaultRenderGlobals.nim_asset',
                   str(nim.name('asset')),
                   type='string')
    #  Asset ID :
    if nim.tab() == 'ASSET':
        if not mc.attributeQuery(
                'nim_assetID', node='defaultRenderGlobals', exists=True):
            mc.addAttr('defaultRenderGlobals',
                       longName='nim_assetID',
                       dt="string")
        mc.setAttr('defaultRenderGlobals.nim_assetID',
                   str(nim.ID('asset')),
                   type='string')
    #  File ID :
    if not mc.attributeQuery(
            'nim_fileID', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_fileID', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_fileID',
               str(nim.ID('ver')),
               type='string')
    #  Shot/Asset Name :
    if not mc.attributeQuery(
            'nim_name', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_name', dt="string")
    if nim.tab() == 'SHOT':
        mc.setAttr('defaultRenderGlobals.nim_name',
                   nim.name('shot'),
                   type='string')
    elif nim.tab() == 'ASSET':
        mc.setAttr('defaultRenderGlobals.nim_name',
                   nim.name('asset'),
                   type='string')
    #  Basename :
    if not mc.attributeQuery(
            'nim_basename', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals',
                   longName='nim_basename',
                   dt="string")
    mc.setAttr('defaultRenderGlobals.nim_basename',
               nim.name('base'),
               type='string')
    #  Task :
    if not mc.attributeQuery(
            'nim_type', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_type', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_type',
               nim.name(elem='task'),
               type='string')
    #  Task ID :
    if not mc.attributeQuery(
            'nim_typeID', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_typeID', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_typeID',
               str(nim.ID(elem='task')),
               type='string')
    #  Task Folder :
    if not mc.attributeQuery(
            'nim_typeFolder', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals',
                   longName='nim_typeFolder',
                   dt="string")
    mc.setAttr('defaultRenderGlobals.nim_typeFolder',
               str(nim.taskFolder()),
               type='string')
    #  Tag :
    if not mc.attributeQuery(
            'nim_tag', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals', longName='nim_tag', dt="string")
    mc.setAttr('defaultRenderGlobals.nim_tag', nim.name('tag'), type='string')
    #  File Type :
    if not mc.attributeQuery(
            'nim_fileType', node='defaultRenderGlobals', exists=True):
        mc.addAttr('defaultRenderGlobals',
                   longName='nim_fileType',
                   dt="string")
    mc.setAttr('defaultRenderGlobals.nim_fileType',
               nim.fileType(),
               type='string')

    P.info(
        '    Completed setting NIM attributes on the defaultRenderGlobals node.'
    )
    #nim.Print()

    mc.undoInfo(closeChunk=True)
    return