def MyCMD_checkFile(self):
        saveMode = self.win.QC_CBB_SaveMode.currentIndex()
        #currentFile = cmds.file(q=1, sn=1)  
        currentFile = "%s" %pm.Env().sceneName()
        projectFolder = str(self.win.QC_LB_ProjectFolder.text())
        mayaFileName = str(self.win.QC_LB_MayaFileName.text())
        SaveName = projectFolder + '\\scenes\\' + mayaFileName
        __ifSeccess = 0
        if saveMode == 0:
            try:
                #cmds.file(rename=SaveName)
                #cmds.file(force=1, save=1)
                pm.saveAs(SaveName, f=1)
                __ifSeccess = 1
            except:
                __ifSeccess = 0

        elif saveMode == 1:
            if os.path.exists(currentFile):
                try:
                    shutil.copyfile(currentFile, SaveName)
                    __ifSeccess = 1
                except:
                    __ifSeccess = 0

            else:
                QMessageBox.question(None, u'注意', u'当前文件不存在:\n' + currentFile)
        if __ifSeccess == 1:
            QMessageBox.information(None, u'成功', u'下列文件上传成功:\n' + SaveName)
            self.win.QC_LB_MayaFilePath.setText(SaveName)
        elif __ifSeccess == 0:
            QMessageBox.critical(None, u'失败', u'下列文件上传失败:\n' + SaveName)
        return
Example #2
0
	def save_file(path):
		if os.path.exists(os.path.split(path)[0]):
			pass
		else:
			os.makedirs(os.path.split(path)[0])
		pm.saveAs(path)
		print(u'文件另存为:{}'.format(path))
Example #3
0
    def save_as(self, file_to_save_to):
        # type: (workfile) -> None
        # call super for context change
        super(MayaEngine, self).save_as(file_to_save_to)

        # now save the file
        pm.saveAs(file_to_save_to["path"])
Example #4
0
 def saveAs(self):
     """
     Save the currently open as a version of this item
     :return:
     """
     fileName = self.getWorkPath(make=True)
     pm.saveAs(fileName)
Example #5
0
def start(*args):
    from maya import standalone
    standalone.initialize(name='python')
    from pymel import core
    core.openFile(args[0], f=True)
    result = None
    if args[1].endswith('.mel'):
        try:
            core.mel.eval('source \"%s\"' % args[1])
            result = True
        except Exception as error:
            warnings.warn(str(error), Warning)
            result = False
    else:
        code_dirname = os.path.dirname(args[1])
        code_name = os.path.splitext(os.path.basename(args[1]))[0]
        for module_loader, name, ispkg in pkgutil.iter_modules([code_dirname]):
            if name != code_name:
                continue
            loader = module_loader.find_module(name)
            try:
                module = loader.load_module(name)
                result = True
            except Exception as error:
                warnings.warn(str(error), Warning)
                result = False
    if not result:
        return
    if args[2] != 'None':
        core.saveAs(args[2], f=True, iv=True, pmt=True)
    standalone.uninitialize(name='python')
Example #6
0
    def setUp(self):
        self.temp = tempfile.mkdtemp(prefix='referencesTest')
        print "created temp dir: %s" % self.temp

        # Refs:
        #  sphere.ma
        #    (no refs)
        #  cube.ma
        #    :sphere => sphere.ma
        #  cone.ma
        #    :cubeInCone => cube.ma
        #      :cubeInCone:sphere => sphere.ma
        #  master.ma
        #    :sphere1 => sphere.ma
        #    :sphere2 => sphere.ma
        #    :cube1 => cube.ma
        #      :cube1:sphere => sphere.ma
        #    :cone1 => cone.ma
        #      :cone1:cubeInCone => cube.ma
        #        :cone1:cubeInCone:sphere => sphere.ma

        # create sphere file
        print "sphere file"
        #        cmds.file(new=1, f=1)
        pm.newFile(f=1)
        sphere = pm.polySphere()
        # We will use this to test failed ref edits...
        pm.addAttr(sphere, ln='zombieAttr')
        self.sphereFile = pm.saveAs(os.path.join(self.temp, 'sphere.ma'), f=1)

        # create cube file
        print "cube file"
        pm.newFile(f=1)
        pm.polyCube()
        pm.createReference(self.sphereFile, namespace='sphere')
        pm.PyNode('sphere:pSphere1').attr('translateX').set(2)
        self.cubeFile = pm.saveAs(os.path.join(self.temp, 'cube.ma'), f=1)

        # create cone file
        print "cone file"
        pm.newFile(f=1)
        pm.polyCone()
        pm.createReference(self.cubeFile, namespace='cubeInCone')
        pm.PyNode('cubeInCone:pCube1').attr('translateZ').set(2)
        pm.PyNode('cubeInCone:sphere:pSphere1').attr('translateZ').set(2)
        self.coneFile = pm.saveAs(os.path.join(self.temp, 'cone.ma'), f=1)

        print "master file"
        pm.newFile(f=1)
        self.sphereRef1 = pm.createReference(self.sphereFile,
                                             namespace='sphere1')
        pm.PyNode('sphere1:pSphere1').attr('translateY').set(2)
        self.sphereRef2 = pm.createReference(self.sphereFile,
                                             namespace='sphere2')
        pm.PyNode('sphere2:pSphere1').attr('translateY').set(4)
        self.cubeRef1 = pm.createReference(self.cubeFile, namespace='cube1')
        pm.PyNode('cube1:sphere:pSphere1').attr('translateY').set(6)
        pm.PyNode('cube1:pCube1').attr('translateY').set(6)
        self.coneRef1 = pm.createReference(self.coneFile, namespace='cone1')
        self.masterFile = pm.saveAs(os.path.join(self.temp, 'master.ma'), f=1)
Example #7
0
def saved_file(tmpdir):
    pm.newFile(force=True)

    path = os.path.join(tmpdir.dirname, "maya_test_scene.ma")

    pm.saveAs(path)
    return path
 def saveChar(self, charName):
     print 'saveChar'
     if os.path.isdir(CHARACTERS_PATH):
         currentCharacters = set(os.listdir(CHARACTERS_PATH))
         if charName not in currentCharacters:
             if os.path.isdir(os.path.join(CHARACTERS_PATH, '01_default')):
                 shutil.copytree(
                     os.path.join(CHARACTERS_PATH, '01_default'),
                     os.path.join(CHARACTERS_PATH, charName))
                 mayaFile = os.path.join(CHARACTERS_PATH, charName,
                                         '03_rigging', '05_approved',
                                         charName + '.ma')
                 pm.saveAs(mayaFile)
             else:
                 pm.warning(
                     'File not saved, couldnt find a default character directory!!!'
                 )
         else:
             mayaFile = os.path.join(CHARACTERS_PATH, charName,
                                     '03_rigging', '05_approved',
                                     charName + '.ma')
             if os.path.isfile(mayaFile):
                 pm.warning('File exists!!!')
             else:
                 pm.saveAs(mayaFile)
Example #9
0
def SNV(*args):
	sceneNameFull = pm.sceneName() # full scene name with path, version, ext
	scenePath = os.path.dirname(sceneNameFull) # scene path
	sceneNameVerExt = sceneNameFull.split('/')[-1] # scene name with version an ext
	sceneNameVer, ext = sceneNameVerExt.split('.') # get EXT
	ver = sceneNameVer.split('_')[-1] # get VERSION
	verNext = int(ver) + 1
	partQnt = len(sceneNameVer.split('_')) - 1 # get quantity of scene name parts, separated with '_'
	sceneNameParts = sceneNameVer.split('_')[0 : partQnt]
	sceneName = '' # recreate scene name from parts
	for i in range (0 , partQnt):
		sceneName += sceneNameParts[i] + '_'

	sceneNameFullNew = '{0}/{1}{2:0>3}.{3}'.format(scenePath, sceneName, verNext, ext)
	if os.path.exists(sceneNameFullNew):
		confirm = pm.confirmDialog ( title = 'File exists!', message=  'Overwrite file?' + '\r\n\r\n' + str('{0}{1:0>3}.{2}'.format( sceneName, verNext, ext)), button=['Yes','No'], defaultButton='Yes', cancelButton='No', dismissString='No' )
		if confirm == 'Yes':
			pm.saveAs(sceneNameFullNew)
			pm.mel.addRecentFile (sceneNameFullNew, 'mayaBinary')
			print 'File overrited: ' + str(sceneNameFullNew)
		else:
			sys.exit()
	else:
		pm.saveAs(sceneNameFullNew)
		pm.mel.addRecentFile (sceneNameFullNew, 'mayaBinary')
		print 'File saved: ' + str(sceneNameFullNew)
Example #10
0
    def importAnimation(self, speak=0,lib=1):
        print 'Importing Animation'
        rigFile = os.path.join(CHARACTERS_PATH,self.name,'rigging',self.name + '.ma')
        pm.openFile(rigFile,f=1)
        if lib:
            importAnimPath = ANIM_LIB_PATH
        else:
            fbxPath = os.path.split(self.fbxFile)[0]
            importAnimPath = fbxPath + '/' + 'animations/'

        animFiles = [f for f in os.listdir(importAnimPath) if f.endswith('.fbx')]
        #self.logger.info('########### Importing animations from library ############')
        for anim in animFiles:
            pm.mel.eval('FBXImportFillTimeline -v 1;')
            cmd = 'FBXImport -f "' + importAnimPath + anim+ '" -caller \"FBXMayaTranslator\" -importFormat \"fbx;v=0\"'
            pm.mel.eval(cmd)
            #self.logger.info('Imported %s ', (importAnimPath + anim))
            #pm.importFile(importAnimPath + anim, type='FBX',mergeNamespacesOnClash=0,rpr=anim.split('.')[0],options = 'v=0;',loadReferenceDepth = 'all')
            start = pm.playbackOptions(q=1,ast=1)
            end = pm.playbackOptions(q=1,aet=1)
            pm.bakeResults( 'shadowJoint',t=(start,end), simulation=True )

            self.saveAnimation(anim.split('.')[0])

            pm.openFile(rigFile,f=1)

        if speak:
            #self.logger.info('Creating speak anims ')
            for anim in speakAnims:
                pm.openFile(rigFile,f=1)
                animationFile = os.path.join(CHARACTERS_PATH,self.name,'animation',anim + '.ma')
                #self.logger.info('%s created',animationFile)
                pm.saveAs(animationFile,f=1)
 def save_file(self):
     file = pm.textField(self.asset_name, query=True, text=True)
     new_file = file + '_v' + '001'
     updated_path = os.path.join(self.save_path,
                                 new_file + ".ma").replace('\\', '/')
     pm.saveAs(updated_path, force=True)
     clear_window('incremental_save')
    def saveFile(self, mayaFalse):
        if pm.confirmDialog(title=u'SER シーン管理',
                            message=u'上書きしますか?',
                            button=[u'はい', u'いいえ'],
                            defaultButton=u'はい',
                            cancelButton=u'いいえ',
                            dismissString=u'いいえ'):
            if pm.textField(self.sceneName, q=True, text=True) in pm.sceneName(
            ):  #check if the text field option is the same as the current scene file
                print 'overwrite and save'
                pm.saveFile()  #saving before exporting
                self.saveImageCreate(False)
                self.mainBody(self.path, False)
                pm.confirmDialog(message=u'保存しました!',
                                 title=u'Prism Scene Manager')

            else:
                print 'save new file'
                pm.saveAs(pm.radioButton(pm.radioCollection(
                    self.radColle, sl=True, q=True),
                                         q=True,
                                         annotation=True) + '/' +
                          pm.textField(self.sceneName, q=True, text=True),
                          type='mayaAscii')  #saving before exporting
                pm.saveFile()  #save?
                self.saveImageCreate(False)
                self.mainBody(self.path, False)  #call mainBody once more
                pm.confirmDialog(message=u'保存しました!',
                                 title=u'Prism Scene Manager')
Example #13
0
def increment_and_save(current_file, entity_type="Asset", publish=0):
    scene_directory = pm.workspace.expandName(pm.workspace.fileRules["scene"])
    file_name = scene_directory.rsplit("/", 1)[1][4:]  # model_a
    if "Shot" == entity_type:
        file_name = scene_directory.rsplit("/", 1)[1]  # Shot_###
    processed_file = None

    if current_file and publish:
        processed_file = "{}/{}_processed.{}.ma".format(
            scene_directory, file_name,
            str(int(current_file.split(".")[1][1:]) + 1).zfill(4))
    elif current_file and not publish:
        pm.openFile(current_file, f=1)
        processed_file = current_file.replace("original", "processed").replace(
            "published", "scenes")
        # print ">> checked out"
    elif not current_file:
        directory = pm.util.common.path(scene_directory)
        files = directory.files(file_name + "_processed.*.ma")
        if files:
            latest_processed = max(files, key=get_version)
            old = max(files, key=get_version).split(".")[1]
            new = "{:04d}".format(int(old) + 1)
            version = ".{}.".format(new)
            processed_file = version.join(latest_processed.split(".")[::2])
        else:
            processed_file = "{}/{}_processed.0001.ma".format(
                scene_directory, file_name)
        # print ">> new:", processed_file

    pm.saveAs(processed_file)
    return processed_file
Example #14
0
 def saveChar(self,charName):
     print 'saveChar'
     if os.path.isdir(CHARACTERS_PATH):
         mayaFile = os.path.join(CHARACTERS_PATH,charName,'rigging',charName + '.ma')
         if os.path.isfile(mayaFile):
             pm.warning('File exists!!!')
         else:
             pm.saveAs(mayaFile,type='mayaAscii')
Example #15
0
    def setUp(self):
        self.temp = tempfile.mkdtemp(prefix='referencesTest')
        print "created temp dir: %s" % self.temp

        # Refs:
        #  sphere.ma
        #    (no refs)
        #  cube.ma
        #    :sphere => sphere.ma
        #  cone.ma
        #    :cubeInCone => cube.ma
        #      :cubeInCone:sphere => sphere.ma
        #  master.ma
        #    :sphere1 => sphere.ma
        #    :sphere2 => sphere.ma
        #    :cube1 => cube.ma
        #      :cube1:sphere => sphere.ma
        #    :cone1 => cone.ma
        #      :cone1:cubeInCone => cube.ma
        #        :cone1:cubeInCone:sphere => sphere.ma

        # create sphere file
        print "sphere file"
#        cmds.file(new=1, f=1)
        pm.newFile(f=1)
        sphere = pm.polySphere()
        # We will use this to test failed ref edits...
        pm.addAttr(sphere, ln='zombieAttr')
        self.sphereFile = pm.saveAs( os.path.join( self.temp, 'sphere.ma' ), f=1 )

        # create cube file
        print "cube file"
        pm.newFile(f=1)
        pm.polyCube()
        pm.createReference( self.sphereFile, namespace='sphere' )
        pm.PyNode('sphere:pSphere1').attr('translateX').set(2)
        self.cubeFile = pm.saveAs( os.path.join( self.temp, 'cube.ma' ), f=1 )

        # create cone file
        print "cone file"
        pm.newFile(f=1)
        pm.polyCone()
        pm.createReference( self.cubeFile, namespace='cubeInCone' )
        pm.PyNode('cubeInCone:pCube1').attr('translateZ').set(2)
        pm.PyNode('cubeInCone:sphere:pSphere1').attr('translateZ').set(2)
        self.coneFile = pm.saveAs( os.path.join( self.temp, 'cone.ma' ), f=1 )

        print "master file"
        pm.newFile(f=1)
        self.sphereRef1 = pm.createReference( self.sphereFile, namespace='sphere1' )
        pm.PyNode('sphere1:pSphere1').attr('translateY').set(2)
        self.sphereRef2 = pm.createReference( self.sphereFile, namespace='sphere2' )
        pm.PyNode('sphere2:pSphere1').attr('translateY').set(4)
        self.cubeRef1 = pm.createReference( self.cubeFile, namespace='cube1' )
        pm.PyNode('cube1:sphere:pSphere1').attr('translateY').set(6)
        pm.PyNode('cube1:pCube1').attr('translateY').set(6)
        self.coneRef1 = pm.createReference( self.coneFile, namespace='cone1' )
        self.masterFile = pm.saveAs(os.path.join(self.temp, 'master.ma'), f=1)
Example #16
0
 def saveAnimation(self,animFile):
     print 'Saving file'
     start = pm.playbackOptions(q=1,ast=1)
     end = pm.playbackOptions(q=1,aet=1)
     length = int(end - start)
     saveName = animFile.replace('lib',self.name) + '_' + str(length) + '.ma'
     pm.playbackOptions(aet = end-1)
     animationFile = os.path.join(CHARACTERS_PATH,self.name,'animation',saveName)
     pm.saveAs(animationFile,f=1)
Example #17
0
    def publish(self):
        originalName = pm.sceneName()

        self.publishVer += 1

        fullPath = self.getPublishPath(make=True)

        # save scene
        pm.saveAs(fullPath)
        pm.renameFile(originalName)
        self.putDataToDB()
Example #18
0
    def saveRenderFile(self, forAnim, cacheFolder, log):
        lightingFolder = pm.optionVar.get('lightingFolderString', '')
        lightingString = pm.optionVar.get('lightingString', '')
        animString = pm.optionVar.get('animString', '')

        timeUnit = pm.currentUnit(q=1, time=True)
        startTime = pm.playbackOptions(query=True, minTime=True)
        endTime = pm.playbackOptions(query=True, maxTime=True)

        print 'Saving render file asfasfasfsfasf'
        pm.newFile(force=True)
        pm.currentUnit(time=timeUnit)
        pm.currentTime(startTime, edit=True)

        pm.playbackOptions(ast=startTime)
        pm.playbackOptions(aet=endTime)
        pm.playbackOptions(minTime=startTime)
        pm.playbackOptions(maxTime=endTime)

        workspace = pm.workspace.path
        print workspace
        print forAnim

        animRoot = forAnim.replace('\\', '/').replace(workspace, '')
        lightingFile = animRoot.split('/')[-1].replace(animString,
                                                       lightingString)

        foldersToFile = animRoot.split('/')[2:-1]

        for folder in foldersToFile:
            if not os.path.isdir(os.path.join(lightingFolder, folder)):
                os.mkdir(os.path.join(lightingFolder, folder))
                lightingFolder = os.path.join(lightingFolder, folder)
            else:
                lightingFolder = os.path.join(lightingFolder, folder)

        fullPath = os.path.join(lightingFolder, lightingFile)

        f, ext = os.path.splitext(lightingFile)
        print ext
        filetype = 'mayaAscii'
        if ext == '.mb':
            filetype = 'mayaBinary'

        pm.saveAs(fullPath, f=1, type=filetype)
        for reference in self.exportReferences:
            self.importAlembic(reference[1], reference[2], cacheFolder)

        for cam in self.userCameras:
            self.importAlembicCamera(cam, cacheFolder)

        pm.saveFile()
def version_up():
    path, file = os.path.split(pm.sceneName())
    file = file.partition('.')[0][:-5]
    curdir_files = os.listdir(path)
    inc_files = []

    for item in curdir_files:
        if file in item:
            inc_files.append(item)
    inc_files.sort()
    last_ver = int(inc_files[-1].partition('.')[0][-3:])
    new_file = file + '_v' + str(last_ver + 1).zfill(3)
    updated_path = os.path.join(path, new_file + ".ma").replace('\\', '/')
    pm.saveAs(updated_path, force=True)
Example #20
0
    def publish(self):
        """
        Publish the current file on the publish directory and update version
        :return:
        """
        originalName = pm.sceneName()

        self.publishVer += 1

        fullPath = self.getPublishPath(make=True)

        # save scene
        pm.saveAs(fullPath)
        pm.renameFile(originalName)
        self.putDataToDB()
Example #21
0
    def createFailedEdits(self):
        # Animate the zombieAttrs
        for transform in [x.getParent() for x in pm.ls(type='mesh')]:
            try:
                zombie = transform.attr('zombieAttr')
            except pm.MayaAttributeError:
                continue
            zombie.setKey(t=1, v=1)
            zombie.setKey(t=2, v=2)
            zombie.setKey(t=3, v=4)

        # want to create another successful edit, so we can tell just by number of edits
        # whether we got failed, successful, or both
        #   failed = 1
        #   successful = 2
        #   both = 3
        pm.setAttr(self.sphereRef1.namespace + ':pSphere1.rotate', (30, 0, 0))

        self.masterFile = pm.saveAs(os.path.join(self.temp, 'master.ma'), f=1)

        # deleting the attr should give some failed ref edits in the master...
        pm.openFile(self.sphereFile, f=1)
        pm.SCENE.pSphere1.zombieAttr.delete()
        pm.saveFile(f=1)

        pm.openFile(self.masterFile, f=1)
        self.sphereRef1 = pm.FileReference(namespace='sphere1')
        self.sphereRef2 = pm.FileReference(namespace='sphere2')
        self.cubeRef1 = pm.FileReference(namespace='cube1')
        self.coneRef1 = pm.FileReference(namespace='cone1')
Example #22
0
    def createFailedEdits(self):
        # Animate the zombieAttrs
        for transform in [x.getParent() for x in pm.ls(type='mesh')]:
            try:
                zombie = transform.attr('zombieAttr')
            except pm.MayaAttributeError:
                continue
            zombie.setKey(t=1, v=1)
            zombie.setKey(t=2, v=2)
            zombie.setKey(t=3, v=4)

        # want to create another successful edit, so we can tell just by number of edits
        # whether we got failed, successful, or both
        #   failed = 1
        #   successful = 2
        #   both = 3
        pm.setAttr(self.sphereRef1.namespace + ':pSphere1.rotate', (30,0,0))

        self.masterFile = pm.saveAs(os.path.join(self.temp, 'master.ma'), f=1)


        # deleting the attr should give some failed ref edits in the master...
        pm.openFile(self.sphereFile, f=1)
        pm.SCENE.pSphere1.zombieAttr.delete()
        pm.saveFile(f=1)

        pm.openFile(self.masterFile, f=1)
        self.sphereRef1 = pm.FileReference(namespace='sphere1')
        self.sphereRef2 = pm.FileReference(namespace='sphere2')
        self.cubeRef1 = pm.FileReference(namespace='cube1')
        self.coneRef1 = pm.FileReference(namespace='cone1')
def batch_render(output):
    scene_name = core.sceneName()
    basename = scene_name.basename()
    if not output:
        output = scene_name.dirname()
    render_exe = get_render_cmd()
    if not os.path.isfile(render_exe):
        core.workspace(fileRule=['images', output])
        core.workspace(fileRule=['movie', output])
        core.workspace(s=True)
    temp_path = os.path.join(tempfile.gettempdir(), basename)
    if os.path.isfile(temp_path):
        try:
            os.chmod(temp_path, 0777)
        except:
            pass
        try:
            os.remove(temp_path)
        except:
            pass
    render_file = core.saveAs(temp_path, f=True, iv=True, pmt=True)
    if os.path.isfile(render_exe):
        command = '{} -r file -rd \"{}\" \"{}\"'.format(
            render_exe, output, render_file)
        os.system(command)
    else:
        core.mel.eval('BatchRender;')
    output_file = os.path.join(
        output, 'scene_preview', '%s.mov' % basename.splitext()[0])
    return output_file
Example #24
0
 def test_failed_ref_edits(self):
     # Animate the zombieAttrs
     for transform in [x.getParent() for x in pm.ls(type='mesh')]:
         try:
             zombie = transform.attr('zombieAttr')
         except pm.MayaAttributeError:
             continue
         zombie.setKey(t=1, v=1)
         zombie.setKey(t=2, v=2)
         zombie.setKey(t=3, v=4)
     self.masterFile = pm.saveAs( os.path.join( self.temp, 'master.ma' ), f=1 )
     
     pm.openFile(self.sphereFile, f=1)
     pm.SCENE.pSphere1.zombieAttr.delete()
     pm.saveFile(f=1)
     
     # deleting the attr should give some failed ref edits...
     pm.openFile(self.masterFile, f=1)
     
     sphereRefs = [x for x in pm.listReferences(recursive=True)
                   if x.path.endswith('sphere.ma')]
     for ref in sphereRefs:
         print "testing failed ref edits on: %s" % ref
         self.assertEqual(1, len(pm.referenceQuery(ref,successfulEdits=False,failedEdits=True,es=True)))
         self.assertEqual(1, len(cmds.referenceQuery(str(ref.refNode), successfulEdits=False,failedEdits=True,es=True)))
Example #25
0
 def test_failed_ref_edits(self):
     # Animate the zombieAttrs
     for transform in [x.getParent() for x in pm.ls(type='mesh')]:
         try:
             zombie = transform.attr('zombieAttr')
         except pm.MayaAttributeError:
             continue
         zombie.setKey(t=1, v=1)
         zombie.setKey(t=2, v=2)
         zombie.setKey(t=3, v=4)
     self.masterFile = pm.saveAs( os.path.join( self.temp, 'master.ma' ), f=1 )
     
     pm.openFile(self.sphereFile, f=1)
     pm.SCENE.pSphere1.zombieAttr.delete()
     pm.saveFile(f=1)
     
     # deleting the attr should give some failed ref edits...
     pm.openFile(self.masterFile, f=1)
     
     sphereRefs = [x for x in pm.listReferences(recursive=True)
                   if x.path.endswith('sphere.ma')]
     for ref in sphereRefs:
         print "testing failed ref edits on: %s" % ref
         self.assertEqual(1, len(pm.referenceQuery(ref,successfulEdits=False,failedEdits=True,es=True)))
         self.assertEqual(1, len(cmds.referenceQuery(str(ref.refNode), successfulEdits=False,failedEdits=True,es=True)))
Example #26
0
def aas_save_as(file_path=None):
    # get current name
    if not file_path:
        file_path = pm.sceneName()
    if not file_path:
        pm.mel.eval("SaveSceneAs;")
        return
    file_path = str(file_path)
    # get new version
    new_version_info = get_new_version.get_new_version(file_path)
    if not new_version_info:
        pm.mel.eval("SaveSceneAs;")
        return

    # get new file name
    new_version_path = new_version_info[0]
    pm.saveAs(new_version_path, force=True)
Example #27
0
    def saveNewVersion(self):
        path, filename = os.path.split(pm.sceneName())
        name, extension = os.path.splitext(filename)
        version = name.split('_')[-1]
        newVersion = ''
        if int(version) < 9:
            newVersion = '0' + str(int(version) + 1)
        else:
            newVersion = str(int(version) + 1)

        print newVersion
        newName = filename.replace('_' + version + extension, '_' + newVersion + extension)

        pm.saveAs(os.path.join(path, newName), f=1)

        self.wipAnimTable.clearContents()
        self.bdPopulateFiles()
Example #28
0
	def createAnimFile(self):
		character = self.charNameEdit.text()
		animType = self.animTypeCombo.currentText()

		if character:
			if 'name' not in character:
				animNumber = self.getLastAnim(animType)
				fullName = character + '_' + animType + animNumber + '_01.ma'
				fullName = self.wipFolderPath + '/' + fullName
				print fullName
				if not os.path.isfile(fullName):
					pm.saveAs(fullName)
					self.bdPopulateFiles()
				else:
					pm.warning('File exist, will not overwrite')
					
			else:
				pm.warning('Enter a char name')
Example #29
0
    def createAnimFile(self):
        character = self.charNameEdit.text()
        animType = self.animTypeCombo.currentText()

        if character:
            if 'name' not in character:
                animNumber = self.getLastAnim(animType)
                fullName = character + '_' + animType + animNumber + '_01.ma'
                fullName = self.wipFolderPath + '/' + fullName
                print fullName
                if not os.path.isfile(fullName):
                    pm.saveAs(fullName)
                    self.bdPopulateFiles()
                else:
                    pm.warning('File exist, will not overwrite')

            else:
                pm.warning('Enter a char name')
Example #30
0
	def saveNewVersion(self):
		path,filename = os.path.split(pm.sceneName())
		name,extension = os.path.splitext(filename)
		version = name.split('_')[-1]
		newVersion = ''
		if int(version) < 9:
			newVersion = '0' + str(int(version) + 1)
		else:
			newVersion = str(int(version) + 1)
		
		print newVersion
		newName = filename.replace('_' + version + extension,'_' + newVersion + extension)
		
		
		pm.saveAs(os.path.join(path,newName),f=1)
		
		self.wipAnimTable.clearContents()
		self.bdPopulateFiles()
Example #31
0
def exportCmd(*args, **kwargs):
    '''
    export models with animation
    '''
    kx = kxTool.KXTool()
    kx.getSceneName()
    sceneName = kx.sceneName
    scenePath = kx.scenePath

    cachePath = "{path}/{name}/{name}_cloth.abc".format(path=scenePath.replace(
        'scenes', 'cache/alembic'),
                                                        name=sceneName)
    cacheFile = name.compileFileName(cachePath)
    fileName = name.compileFileName("{path}/{name}_cloth.mb".format(
        path=scenePath, name=sceneName))

    geos = pm.PyNode('kx_cloth_export_layer').listMembers()
    exportGeos = []
    for geo in geos:
        dup = pm.duplicate(geo, name='{0}_toCloth'.format(geo.name()))[0]
        dup.setParent(w=1)
        shapes = dup.getShapes()
        pm.delete(shapes[1:])
        pm.blendShape(geo, dup, o='world', w=(0, 1))
        exportGeos.append(dup)

    cache.exportAbcCache(exportGeos, cacheFile, useTimeline=True, verbose=True)

    pm.newFile(f=1)

    sourceGrp = pm.createNode('transform', name='source_Grp')

    abcNodeName = cache.importAbcCache(cacheFile)

    objs = pm.PyNode(abcNodeName).outputs()

    for obj in objs:
        obj.rename(obj.name().replace('_toCloth', '_anim'))
        obj.setParent(sourceGrp)

    pm.saveAs(fileName, f=1)

    return fileName
Example #32
0
    def setUp(self):
        self.temp = os.path.join(tempfile.gettempdir(), "referencesTest")
        if not os.path.isdir(self.temp):
            os.makedirs(self.temp)
        print "created temp dir: %s" % self.temp

        # Refs:
        #  sphere.ma
        #    (no refs)

        #  master.ma
        #    :sphere1 => sphere.ma
        #    :sphere2 => sphere.ma

        # create sphere file
        print "sphere file"
        #        cmds.file(new=1, f=1)
        pm.newFile(f=1)
        sphere = pm.polySphere()[0]

        pm.addAttr(sphere, ln="zombieAttr1")
        pm.addAttr(sphere, ln="zombieAttr2")
        cmds.setAttr("%s.v" % sphere, lock=1)
        cmds.setAttr("%s.zombieAttr1" % sphere, lock=1)

        self.sphereFile = pm.saveAs(os.path.join(self.temp, "sphere.ma"), f=1)

        print "master file"
        pm.newFile(f=1)
        self.sphereRef1 = pm.createReference(self.sphereFile, namespace="sphere1")
        self.sphereRef2 = pm.createReference(self.sphereFile, namespace="sphere2")
        self.sphere1 = pm.PyNode("sphere1:pSphere1")
        self.sphere2 = pm.PyNode("sphere2:pSphere1")
        self.sphere1.attr("translateY").set(2)
        self.sphere2.attr("translateY").set(4)

        self.cube = pm.polyCube()[0]
        pm.addAttr(self.cube, ln="zombieAttr1")
        pm.addAttr(self.cube, ln="zombieAttr2")
        cmds.setAttr("%s.v" % self.cube, lock=1)
        cmds.setAttr("%s.zombieAttr1" % self.cube, lock=1)

        self.masterFile = pm.saveAs(os.path.join(self.temp, "master.ma"), f=1)
 def saveChar(self, charName):
     print "saveChar"
     if os.path.isdir(CHARACTERS_PATH):
         currentCharacters = set(os.listdir(CHARACTERS_PATH))
         if charName not in currentCharacters:
             if os.path.isdir(os.path.join(CHARACTERS_PATH, "01_default")):
                 shutil.copytree(
                     os.path.join(CHARACTERS_PATH, "01_default"), os.path.join(CHARACTERS_PATH, charName)
                 )
                 mayaFile = os.path.join(CHARACTERS_PATH, charName, "03_rigging", "05_approved", charName + ".ma")
                 pm.saveAs(mayaFile)
             else:
                 pm.warning("File not saved, couldnt find a default character directory!!!")
         else:
             mayaFile = os.path.join(CHARACTERS_PATH, charName, "03_rigging", "05_approved", charName + ".ma")
             if os.path.isfile(mayaFile):
                 pm.warning("File exists!!!")
             else:
                 pm.saveAs(mayaFile)
def restore_anim(from_file, to_file):
    fbx_rig = 'c:\\repo\\StarIsland_content\\06_TimoBoll\\07_Rig\\00_TimoBoll\\01_Release\\timoboll_fbxOn_rig.ma'
    pm.openFile(from_file, force=1)
    anim_layers_data = get_anim_layer()
    anim_layers = [item[0] for item in anim_layers_data]

    start_frame = pm.playbackOptions(q=1, min=1)
    end_frame = pm.playbackOptions(q=1, max=1)

    ###### Copy mocap
    pm.select('root_jnt')
    lr.bdSelectHierarchyJnt()
    pm.copyKey()

    pm.openFile(fbx_rig, force=1)
    start_frame = pm.playbackOptions(min=start_frame)
    end_frame = pm.playbackOptions(max=end_frame)
    pm.currentTime(0)

    pm.select('root_jnt')
    lr.bdSelectHierarchyJnt()
    pm.pasteKey()
    pm.saveAs(to_file)

    select_all()
    pm.copyKey()

    ##Copy Base Anim
    pm.openFile(from_file, force=1)
    set_active_layer('BaseAnimation')
    select_all()
    pm.copyKey()

    pm.openFile(to_file, force=1)
    start_frame = pm.playbackOptions(min=start_frame)
    end_frame = pm.playbackOptions(max=end_frame)
    pm.currentTime(start_frame)

    select_all()
    pm.setKeyframe()
    pm.pasteKey()

    pm.saveFile()
def saveFile(describe):
    #按照描述保存文件
    #
    #参数describe: 需要输入描述字符串, 如: 'CHRcolor'等, 保存文件时加入到文件名中.
    #
    pnm = ProjNameMatch()
    fileName = pm.Env().sceneName().namebase
    dir = pnm.setFileName(fileName)
    dir = pm.Path(pnm.getProjDirectorys()[-1] + pnm.getProjDirectorys()[0] +
                  '/scenes')
    project_name = pnm.getResults('project_name')
    episode_number = pnm.getResults('episode_number')
    session_number = pnm.getResults('session_number')
    scene_number = pnm.getResults('scene_number')
    scene_describe = LAYER_FILENAME[describe]
    process_name = 'lr'
    version_number = 'c001'
    newFileName = '_'.join([
        project_name, episode_number, session_number, scene_number,
        scene_describe, process_name, version_number
    ])
    filePrefix = '_'.join([
        project_name, episode_number, session_number, scene_number,
        scene_describe, process_name
    ])
    versions = []
    for f in dir.files():
        subpnm = ProjNameMatch()
        if filePrefix in f.name:
            subpnm.setFileName(f.name)
            versions.append(subpnm.getResults('version_number'))
    if versions:
        versions.sort()
        version_number = 'c' + str(int(versions[-1][1:]) + 1).zfill(3)
    newFileName = '_'.join([
        project_name, episode_number, session_number, scene_number,
        scene_describe, process_name, version_number
    ])
    try:
        pm.saveAs("{0}/{1}.mb".format(dir, newFileName))
        return newFileName
    except:
        raise "save this file failure!!!"
Example #36
0
    def setUp(self):
        print "getting temp dir"
        self.temp = os.path.join(tempfile.gettempdir(), 'referencesTest')
        if not os.path.isdir(self.temp):
            os.makedirs(self.temp)
        
        # create sphere file
        print "sphere file"
#        cmds.file(new=1, f=1)
        pm.newFile(f=1)
        sphere = pm.polySphere()
        # We will use this to test failed ref edits...
        pm.addAttr(sphere, ln='zombieAttr')
        self.sphereFile = pm.saveAs( os.path.join( self.temp, 'sphere.ma' ), f=1 )
        
        # create cube file
        print "cube file"
        pm.newFile(f=1)
        pm.polyCube()
        pm.createReference( self.sphereFile, namespace='sphere' )
        pm.PyNode('sphere:pSphere1').attr('translateX').set(2)
        self.cubeFile = pm.saveAs( os.path.join( self.temp, 'cube.ma' ), f=1 )
        
        # create cone file
        print "cone file"
        pm.newFile(f=1)
        pm.polyCone()
        pm.createReference( self.cubeFile, namespace='cubeInCone' )
        pm.PyNode('cubeInCone:pCube1').attr('translateZ').set(2)
        pm.PyNode('cubeInCone:sphere:pSphere1').attr('translateZ').set(2)
        self.coneFile = pm.saveAs( os.path.join( self.temp, 'cone.ma' ), f=1 )
        
        print "master file"
        pm.newFile(f=1)
        self.sphereRef1 = pm.createReference( self.sphereFile, namespace='sphere1' )
        pm.PyNode('sphere1:pSphere1').attr('translateY').set(2)
        self.sphereRef2 = pm.createReference( self.sphereFile, namespace='sphere2' )
        pm.PyNode('sphere2:pSphere1').attr('translateY').set(4)
        self.cubeRef1 = pm.createReference( self.cubeFile, namespace='cube1' )
        pm.PyNode('cube1:sphere:pSphere1').attr('translateY').set(6)
        pm.PyNode('cube1:pCube1').attr('translateY').set(6)
        self.coneRef1 = pm.createReference( self.coneFile, namespace='cone1' )
Example #37
0
    def setUp(self):
        print "getting temp dir"
        self.temp = os.path.join(tempfile.gettempdir(), 'referencesTest')
        if not os.path.isdir(self.temp):
            os.makedirs(self.temp)
        
        # create sphere file
        print "sphere file"
#        cmds.file(new=1, f=1)
        pm.newFile(f=1)
        sphere = pm.polySphere()
        # We will use this to test failed ref edits...
        pm.addAttr(sphere, ln='zombieAttr')
        self.sphereFile = pm.saveAs( os.path.join( self.temp, 'sphere.ma' ), f=1 )
        
        # create cube file
        print "cube file"
        pm.newFile(f=1)
        pm.polyCube()
        pm.createReference( self.sphereFile, namespace='sphere' )
        pm.PyNode('sphere:pSphere1').attr('translateX').set(2)
        self.cubeFile = pm.saveAs( os.path.join( self.temp, 'cube.ma' ), f=1 )
        
        # create cone file
        print "cone file"
        pm.newFile(f=1)
        pm.polyCone()
        pm.createReference( self.cubeFile, namespace='cubeInCone' )
        pm.PyNode('cubeInCone:pCube1').attr('translateZ').set(2)
        pm.PyNode('cubeInCone:sphere:pSphere1').attr('translateZ').set(2)
        self.coneFile = pm.saveAs( os.path.join( self.temp, 'cone.ma' ), f=1 )
        
        print "master file"
        pm.newFile(f=1)
        self.sphereRef1 = pm.createReference( self.sphereFile, namespace='sphere1' )
        pm.PyNode('sphere1:pSphere1').attr('translateY').set(2)
        self.sphereRef2 = pm.createReference( self.sphereFile, namespace='sphere2' )
        pm.PyNode('sphere2:pSphere1').attr('translateY').set(4)
        self.cubeRef1 = pm.createReference( self.cubeFile, namespace='cube1' )
        pm.PyNode('cube1:sphere:pSphere1').attr('translateY').set(6)
        pm.PyNode('cube1:pCube1').attr('translateY').set(6)
        self.coneRef1 = pm.createReference( self.coneFile, namespace='cone1' )
Example #38
0
def setup_scene(source, target):
    import pymel.core as pm

    pm.openFile(source)

    top_level_dag = cmds.ls(assemblies=True)
    top_level_obj = ""
    for dag in top_level_dag:
        if cmds.listRelatives(dag, shapes=True): continue
        child_dag = cmds.listRelatives(dag, children=True)
        for dag in child_dag:
            if dag.count("Main") or dag.count("_Ctrl"):
                top_level_obj = dag
        if top_level_obj: break
    if not top_level_obj:
        return db.gen_failure_msg

    pm.delete(top_level_obj)
    pm.saveAs(target)

    return db.gen_success_msg
Example #39
0
def exportCmd(*args, **kwargs):
    '''
    export models with animation
    '''
    kx = kxTool.KXTool()
    kx.getSceneName()
    sceneName = kx.sceneName
    scenePath = kx.scenePath
    
    cachePath = "{path}/{name}/{name}_cloth.abc".format(path = scenePath.replace('scenes', 'cache/alembic'), name = sceneName)
    cacheFile = name.compileFileName(cachePath)
    fileName = name.compileFileName("{path}/{name}_cloth.mb".format(path = scenePath, name = sceneName))
    
    geos = pm.PyNode('kx_cloth_export_layer').listMembers()
    exportGeos = []
    for geo in geos: 
        dup = pm.duplicate(geo, name = '{0}_toCloth'.format(geo.name()))[0]
        dup.setParent(w=1)
        shapes = dup.getShapes()
        pm.delete(shapes[1:])
        pm.blendShape(geo, dup, o = 'world', w = (0,1))
        exportGeos.append(dup)
    
    cache.exportAbcCache(exportGeos, cacheFile, useTimeline = True, verbose = True)
    
    pm.newFile(f=1)
    
    sourceGrp = pm.createNode('transform', name = 'source_Grp')
    
    abcNodeName = cache.importAbcCache(cacheFile)
    
    objs = pm.PyNode(abcNodeName).outputs()
        
    for obj in objs:
        obj.rename(obj.name().replace('_toCloth', '_anim'))
        obj.setParent(sourceGrp)
                    
    pm.saveAs(fileName, f=1)
    
    return fileName
Example #40
0
    def onSave(self, path):

        operation = self.cbSaveoperation.currentText()
        extension = self.sceneListExtension()
        self.log('Current scenes extension: {0}'.format(extension))

        if operation == 'Skip':
            self.log('saving skipped')
        elif operation == 'SaveCurrent':
            if extension == 'fbx':
                self.log('Saving {0}'.format(path))
                self.saveFbx(path)
                pm.newFile(f=1)
            else:
                self.log('Saving {0}'.format(path))
                pm.saveAs(path, f=1)
        else:
            name = self.getFileName(path)
            extension = self.sceneListExtension()
            newName = os.path.dirname(path) + '/' + name + '_new.' + extension
            self.log('Saving {0}'.format(newName))
            pm.saveAs(newName)
Example #41
0
def runInitialStartup():
    """
    @ run this function on maya start.
    Returns:
            None.
    """
    pm.select(cl=True)
    # make groups.
    topGrp = pm.PyNode('geo')
    modelGrp = pm.PyNode('test_grp')
    # get asset data from temp directory using json.
    jsonFilePath = tempfile.gettempdir() + '\\zSetAssetData.json'
    with open(os.path.join(tempfile.gettempdir(), jsonFilePath)) as fd:
        astData = json.load(fd)
    # set Values.
    pm.setAttr(topGrp + '.assetName', astData['name'])
    pm.setAttr(topGrp + '.assetName', l=True)
    pm.setAttr(topGrp + '.assetGrade', astData['grade'])
    pm.setAttr(topGrp + '.assetGrade', l=True)
    pm.setAttr(topGrp + '.assetUID', astData['uid'])
    pm.setAttr(topGrp + '.assetUID', l=True)
    modelGrp.rename(astData['name'])
    # get back to gpu folder.
    gpuPath = str()
    for each in astData['path'].split('.')[0].split('/')[:-1]:
        gpuPath += each + '/'
    if not os.path.isdir(gpuPath):
        os.makedirs(gpuPath)
        print 'path created.'
    # change gpu cache path.
    cacheFilePath = astData['path'].replace('.ma', '.abc')
    cacheNode = pm.PyNode('gpuCache')
    serverPath = bs_pathGenerator.bs_getEnvDetails()['rootPath']
    cacheFilePath = cacheFilePath.replace(serverPath, '$BSW_PROD_SERVER/')
    cacheNode.cacheFileName.set(cacheFilePath)
    # save as file.
    pm.saveAs(astData['path'])
    return topGrp
def saveFile(describe):
    # 按照描述保存文件
    #
    # 参数describe: 需要输入描述字符串, 如: 'CHRcolor'等, 保存文件时加入到文件名中.
    #
    pnm = ProjNameMatch()
    fileName = pm.Env().sceneName().namebase
    dir = pnm.setFileName(fileName)
    dir = pm.Path(pnm.getProjDirectorys()[-1] + pnm.getProjDirectorys()[0] + "/scenes")
    project_name = pnm.getResults("project_name")
    episode_number = pnm.getResults("episode_number")
    session_number = pnm.getResults("session_number")
    scene_number = pnm.getResults("scene_number")
    scene_describe = LAYER_FILENAME[describe]
    process_name = "lr"
    version_number = "c001"
    newFileName = "_".join(
        [project_name, episode_number, session_number, scene_number, scene_describe, process_name, version_number]
    )
    filePrefix = "_".join([project_name, episode_number, session_number, scene_number, scene_describe, process_name])
    versions = []
    for f in dir.files():
        subpnm = ProjNameMatch()
        if filePrefix in f.name:
            subpnm.setFileName(f.name)
            versions.append(subpnm.getResults("version_number"))
    if versions:
        versions.sort()
        version_number = "c" + str(int(versions[-1][1:]) + 1).zfill(3)
    newFileName = "_".join(
        [project_name, episode_number, session_number, scene_number, scene_describe, process_name, version_number]
    )
    try:
        pm.saveAs("{0}/{1}.mb".format(dir, newFileName))
        return newFileName
    except:
        raise "save this file failure!!!"
    def process(self, instance):

        if 'workfile' in instance.context.data:
            host = pyblish.api.current_host()
            workfile = instance.context.data['workfile']
            self.log.info("workfile '%s'" % workfile)

            if host == 'nuke':
                import nuke
                nuke.scriptSaveAs(workfile)
            elif host == 'maya':
                import pymel.core as pm
                if os.path.exists(workfile):
                    pm.system.openFile(workfile, force=True)
                else:
                    pm.saveAs(workfile, type='mayaAscii')

                proj_path = os.path.dirname(workfile)
                self.log.info("Setting Maya project to '%s'" % proj_path)
                pm.mel.setProject(proj_path)

        else:
            raise pyblish.api.ValidationError(
                "Can't find workfile in instance.context.")
Example #44
0
def duplicateAssets():
    path = pm.workspace.name + '/gfxlib/effects/'
    name = 'status_enhancement_'
    
    tempList = glob.glob(path + '*_t*_m.mb')
    
    for fl in tempList:
        path,filename = os.path.split(fl)
        #destFile = filename.replace('_m','_s')
        destFile = filename.replace('_m','_l')
        if(os.path.isfile(os.path.join(path,destFile))):
            pm.warning('File exists!')
            pm.openFile(os.path.join(path,destFile),f=1)
        else:
            shutil.copyfile(fl,os.path.join(path,destFile))
    
            pm.openFile(os.path.join(path,destFile),f=1)
            modelGrp = pm.ls('model')[0]
            #modelGrp.scaleBy((0.5,0.5,0.5))
            modelGrp.scaleBy((3.2,3.2,3.2))
            pm.makeIdentity(modelGrp,apply=True,t=0,r=0,s=1)
            pm.saveAs(os.path.join(path,destFile),f=1)
    
        pm.mel.eval('rlExportGraphicsObjectNoBrowserN3')
Example #45
0
def save(fileName=None, ext=None, applyInfo=False, mayaExts=MAYA_EXTS):
    """A wrapper for cmds.file(s=True) for convenience"""
    saveName = fileName
    if saveName is None:
        saveName = pm.sceneName()
        if 'untitled' in saveName:
            LOG.warning('The current scene has not yet been saved.')
            return None
    if ext is not None:
        if ext not in mayaExts:
            LOG.error('The provided file type `{0}` is not valid.'.format(ext))
            return None
        saveName = forceExt(saveName, ext)
    
    if applyInfo:
        setFileInfo()
    result = pm.saveAs(saveName)
    CLEANLOG.info('Result: {0}'.format(result))
Example #46
0
def createScene(fileName):
    pmc.newFile(new = True, force = True)
    basic.generate()
    pmc.saveAs("test.ma", type = "mayaAscii")
Example #47
0
	def launch(self, *args, **kwargs):
		"""launch renderer command
		"""
		# do nothing if there is no window (called externally)
		if not pm.window('cgru_afanasy_wnd', ex= 1):
			return

		# get values
		separate_layers = pm.checkBox('af_separate', q=1, v=1)
		start_frame = int(pm.floatField('af_strFrmFfd', q=1, v=1))
		end_frame = int(pm.floatField('af_endFrmFfd', q=1, v=1))
		frames_per_task = pm.intField('af_frmPTask_F', q=1, v=1)
		by_frame = int(pm.floatField('af_stpFrmFfd', q=1, v=1))
		hosts_mask = pm.textField('af_hostMask_F', q=1, text=1)
		hosts_exclude = pm.textField('af_hostExcl_F', q=1, text=1)
		priority = pm.intField('af_priority_F', q=1, v=1)
		pause = pm.checkBox('af_paused', q=1, v=1)
		close = pm.checkBox('af_close', q=1, v=1)

		# check values
		if start_frame > end_frame:
			temp = end_frame
			end_frame = start_frame
			start_frame = temp

		frames_per_task = max(1, frames_per_task)
		by_frame = max(1, by_frame)

		# store field values
		pm.optionVar['af_separate_layer_ov'] = separate_layers
		pm.optionVar['af_frmPTask_F_ov'] = frames_per_task
		pm.optionVar['af_hostMask_F_ov'] = hosts_mask
		pm.optionVar['af_hostExcl_F_ov'] = hosts_exclude
		pm.optionVar['af_priority_F_ov'] = priority
		pm.optionVar['af_paused_ov'] = pause
		pm.optionVar['af_close_ov'] = close

		# get paths
		scene_name = pm.sceneName()
		datetime = '%s%s' % (
			time.strftime('%y%m%d-%H%M%S-'),
			str(time.time() - int(time.time()))[2:5]
		)

		filename = '%s.%s.mb' % (scene_name, datetime)

		project_path = pm.workspace(q=1, rootDirectory=1)

		# ############################################################################
		# maya images folder root, a default path for not separate_layers
		# changed by DavidPower
		outputs = pm.workspace(q= 1, rd= 1) + pm.workspace('images', q= 1, fre= 1)
		# ############################################################################

		job_name = os.path.basename(scene_name)

		logger.debug('%ss %se %sr' % (start_frame, end_frame, by_frame))
		logger.debug('scene        = %s' % scene_name)
		logger.debug('file         = %s' % filename)
		logger.debug('job_name     = %s' % job_name)
		logger.debug('project_path = %s' % project_path)
		logger.debug('outputs      = %s' % outputs)

		if pm.checkBox('af_close', q=1, v=1):
			pm.deleteUI('cgru_afanasy_wnd')

		cmd_buffer = [
			'"%(filename)s"',
			'%(start)s',
			'%(end)s',
			'-by %(by_frame)s',
			'-hostsmask "%(msk)s"',
			'-hostsexcl "%(exc)s"',
			'-fpt %(fpt)s',
			'-name "%(name)s"',
			'-priority %(prio)s',
			'-pwd "%(pwd)s"',
			'-proj "%(proj)s"',
			'-images "%(images)s"',
			'-deletescene'
		]

		kwargs = {
			'filename': filename,
			'start': start_frame,
			'end': end_frame,
			'by_frame': by_frame,
			'msk': hosts_mask,
			'exc': hosts_exclude,
			'fpt': frames_per_task,
			'name': job_name,
			'prio': priority,
			'pwd': project_path,
			'proj': project_path,
			'images': outputs
		}

		drg = pm.PyNode('defaultRenderGlobals')
		if drg.getAttr('currentRenderer') == 'mentalRay':
			cmd_buffer.append('-type maya_mental')

		if pause:
			cmd_buffer.append('-pause')

		#-----------------------------#
		currentRenderer = pm.PyNode('defaultRenderGlobals').getAttr('currentRenderer')
		sn = os.path.basename(cmds.file(q= 1, exn= 1)).split('.')[0]
		imgPrefix = pm.getAttr('vraySettings.fileNamePrefix') if currentRenderer == 'vray' else pm.getAttr('defaultRenderGlobals.imageFilePrefix')
		tmpPrefix = imgPrefix.replace('<Scene>', sn)
		if currentRenderer == 'vray':
			pm.setAttr('vraySettings.fileNamePrefix', tmpPrefix)
		else:
			pm.setAttr('defaultRenderGlobals.imageFilePrefix', tmpPrefix)
		#-----------------------------#

		# save file
		pm.saveAs(
			filename,
			force=1,
			type='mayaBinary'
		)

		#-----------------------------#
		if currentRenderer == 'vray':
			pm.setAttr('vraySettings.fileNamePrefix', imgPrefix)
		else:
			pm.setAttr('defaultRenderGlobals.imageFilePrefix', imgPrefix)
		#-----------------------------#

		# rename back to original name
		pm.renameFile(scene_name)

		cmdList = []

		# submit renders
		if separate_layers:
			# render each layer separately
			rlm = pm.PyNode('renderLayerManager')
			layers = [layer for layer in rlm.connections()
					  if layer.renderable.get()]

			for layer in layers:
				layer_name = layer.name()
				kwargs['name'] = '%s:%s' % (job_name, layer_name)

				# ############################################################################
				# update images path for each layers, and fix outputs if renderer is vray
				# changed by DavidPower
				kwargs['images'] = self.dpaf_outputsFix(layer)
				# ############################################################################

				kwargs['start'] = int(self.dpaf_getOverrideData('defaultRenderGlobals.startFrame', layer_name))
				kwargs['end'] = int(self.dpaf_getOverrideData('defaultRenderGlobals.endFrame', layer_name))
				kwargs['by_frame'] = int(self.dpaf_getOverrideData('defaultRenderGlobals.byFrameStep', layer_name))

				tmp_cmd_buffer = copy.copy(cmd_buffer)
				tmp_cmd_buffer.append(
					'-take %s' % layer.name()
				)

				# create one big command
				afjob_cmd = ' '.join([
					os.environ['CGRU_PYTHONEXE'],
					'"%s/python/afjob.py"' % os.environ['AF_ROOT'],
					'%s' % ' '.join(tmp_cmd_buffer) % kwargs
				])
				cmdList.append(afjob_cmd)

		else:
			# create one big command
			afjob_cmd = ' '.join([
				os.environ['CGRU_PYTHONEXE'],
				'%s/python/afjob.py' % os.environ['AF_ROOT'],
				'%s' % ' '.join(cmd_buffer) % kwargs
			])
			cmdList.append(afjob_cmd)

		# call each command separately
		for cmd in cmdList:
			print(cmdList)

			os.system(cmd)
Example #48
0
	def launch(self, *args, **kwargs):
		"""launch renderer command
		"""
		# do nothing if there is no window (called externally)
		if not self.window:
			return

		# get values
		start_frame = pm.intField('cgru_afanasy__start_frame', q=1, v=1)
		end_frame = pm.intField('cgru_afanasy__end_frame', q=1, v=1)
		frames_per_task = \
			pm.intField('cgru_afanasy__frames_per_task', q=1, v=1)
		by_frame = pm.intField('cgru_afanasy__by_frame', q=1, v=1)
		hosts_mask = pm.textField('cgru_afanasy__hosts_mask', q=1, text=True)
		hosts_exclude = pm.textField('cgru_afanasy__hosts_exclude', q=1, text=True)
		separate_layers = \
			pm.checkBox('cgru_afanasy__separate_layers', q=1, v=1)
		pause = pm.checkBox('cgru_afanasy__paused', q=1, v=1)

		# check values
		if start_frame > end_frame:
			temp = end_frame
			end_frame = start_frame
			start_frame = temp

		frames_per_task = max(1, frames_per_task)
		by_frame = max(1, by_frame)

		# store field values
		pm.optionVar['cgru_afanasy__start_frame_ov'] = start_frame
		pm.optionVar['cgru_afanasy__end_frame_ov'] = end_frame
		pm.optionVar['cgru_afanasy__frames_per_task_ov'] = frames_per_task
		pm.optionVar['cgru_afanasy__by_frame_ov'] = by_frame
		pm.optionVar['cgru_afanasy__hosts_mask_ov'] = hosts_mask
		pm.optionVar['cgru_afanasy__hosts_exclude_ov'] = hosts_exclude
		pm.optionVar['cgru_afanasy__separate_layers'] = separate_layers

		# get paths
		scene_name = pm.sceneName()
		datetime = '%s%s' % (
			time.strftime('%y%m%d-%H%M%S-'),
			str(time.time() - int(time.time()))[2:5]
		)

		filename = '%s.%s.mb' % (scene_name, datetime)

		project_path = pm.workspace(q=1, rootDirectory=1)

		outputs = ','.join(
			pm.renderSettings(fullPath=1, firstImageName=1, lastImageName=1)
		)

		job_name = os.path.basename(scene_name)

		logger.debug('%ss %se %sr' % (start_frame, end_frame, by_frame))
		logger.debug('scene        = %s' % scene_name)
		logger.debug('file         = %s' % filename)
		logger.debug('job_name     = %s' % job_name)
		logger.debug('project_path = %s' % project_path)
		logger.debug('outputs      = %s' % outputs)

		if pm.checkBox('cgru_afanasy__close', q=1, v=1):
			pm.deleteUI(self.window)

		cmd_buffer = [
			'"%(filename)s"',
			'%(start)s',
			'%(end)s',
			'-by %(by_frame)s',
			'-hostsmask %(msk)s',
			'-hostsexcl %(exc)s',
			'-fpt %(fpt)s',
			'-name "%(name)s"',
			'-pwd "%(pwd)s"',
			'-proj "%(proj)s"',
			'-images "%(images)s"',
			'-deletescene'
		]

		kwargs = {
			'filename': filename,
			'start': start_frame,
			'end': end_frame,
			'by_frame': by_frame,
			'msk': hosts_mask,
			'exc': hosts_exclude,
			'fpt': frames_per_task,
			'name': job_name,
			'pwd': project_path,
			'proj': project_path,
			'images': outputs
		}

		drg = pm.PyNode('defaultRenderGlobals')
		render_engine = drg.getAttr('currentRenderer')
		if render_engine == 'mentalRay':
			cmd_buffer.append('-type maya_mental')
		elif render_engine == 'arnold':
			cmd_buffer.append('-type maya_arnold')
			# set the verbosity level to warning+info
			aro = pm.PyNode('defaultArnoldRenderOptions')
			aro.setAttr('log_verbosity', 1)

		if pause:
			cmd_buffer.append('-pause')

		# save file
		pm.saveAs(
			filename,
			force=1,
			type='mayaBinary'
		)

		# rename back to original name
		pm.renameFile(scene_name)

		cmds = []

		# submit renders
		if separate_layers:
			# render each layer separately
			rlm = pm.PyNode('renderLayerManager')
			layers = [layer for layer in rlm.connections()
					  if layer.renderable.get()]

			for layer in layers:
				layer_name = layer.name()
				kwargs['name'] = '%s:%s' % (job_name, layer_name)

				tmp_cmd_buffer = copy.copy(cmd_buffer)
				tmp_cmd_buffer.append(
					'-take %s' % layer.name()
				)

				# create one big command
				afjob_cmd = ' '.join([
					os.environ['CGRU_PYTHONEXE'],
					'"%s/python/afjob.py"' % os.environ['AF_ROOT'],
					'%s' % ' '.join(tmp_cmd_buffer) % kwargs
				])
				cmds.append(afjob_cmd)

		else:
			# create one big command
			afjob_cmd = ' '.join([
				os.environ['CGRU_PYTHONEXE'],
				'%s/python/afjob.py' % os.environ['AF_ROOT'],
				'%s' % ' '.join(cmd_buffer) % kwargs
			])
			cmds.append(afjob_cmd)

		# call each command separately
		for cmd in cmds:
			print(cmds)

			os.system(cmd)
    def process(self, instance, context):

        if 'workfile' in instance.context.data:
            host = pyblish.api.current_host()
            workfile = instance.context.data['workfile']
            self.log.info("workfile '%s'" % workfile)

            if host == 'nuke':
                import nuke
                nuke.scriptSaveAs(workfile)
            elif host == 'maya':
                import pymel.core as pm
                if os.path.exists(workfile):
                    pm.system.openFile(workfile, force=True)
                else:

                    if context.data['ftrackData']['Project']['code'] == 'hbt':
                        from ftrack_kredenc import ft_maya
                        reload(ft_maya)
                        import maya_utils as mu
                        reload(mu)
                        try:
                            if (context.data['ftrackData']['Task']['code']).lower() in ['anim', 'animation', 'render', 'layout', 'lighting', 'light']:
                                shotId = os.getenv('FTRACK_SHOTID')
                                session = ftrack_api.Session()
                                shot = session.query('Shot where id is {}'.format(shotId)).one()
                                handles = int(shot['custom_attributes']['handles'])
                                sf = int(shot['custom_attributes']['fstart'])
                                ef = int(shot['custom_attributes']['fend'])

                                ft_maya.framerate_init()
                                pm.playbackOptions(playbackSpeed = 1.0)
                                pm.playbackOptions(ast=sf-handles, aet=ef+handles, min=sf-handles, max=ef+handles)
                                #change path by hand
                                publishArr = workfile.split('\\')
                                del publishArr[-1]
                                del publishArr[-1]
                                del publishArr[-1]
                                newPath = ("/".join(publishArr)) + "/publish/audio"
                                mu.loadSound(newPath, sf = (sf-handles), fileTypes = ['wav'])
                        except:
                            pass
                        import hbt_renderSetup
                        reload(hbt_renderSetup)
                        hbt_renderSetup.run()

                    pm.saveAs(workfile, type='mayaAscii')
                    #load sound if hbt project and has sound

                proj_path = os.path.dirname(workfile)
                self.log.info("Setting Maya project to '%s'" % proj_path)
                pm.mel.setProject(proj_path)
            elif host == 'houdini':
                import hou
                if os.path.exists(workfile):
                    hou.hipFile.open(hou.expandString(workfile).replace('\\', '/'))
                else:
                    hou.hipFile.save(hou.expandString(workfile).replace('\\', '/'))

        else:
            raise pyblish.api.ValidationError(
                "Can't find workfile in instance.context.")
def saveScene(**kwargs):

    sSceneType = ""

    sCurScnPath = pm.sceneName()
    if not sCurScnPath:
        sCurScnPath = "untitled"
        sSceneName = "untitled scene"
        sSceneTypeList = ['mayaAscii', 'mayaBinary']
    else:
        sSceneName = sCurScnPath
        sExt = osp.splitext(sCurScnPath)[1].lower()

        sSceneTypeList = []
        if sExt:
            if sExt == ".ma":
                sSceneTypeList = ['mayaAscii']
            elif sExt == ".mb":
                sSceneTypeList = ['mayaBinary']

        if not sSceneTypeList:
            raise ValueError("Invalid maya scene extension: '{}'".format(sExt))
            #sSceneTypeList = mc.file(q=True, type=True)

        if len(sSceneTypeList) > 1:
            raise RuntimeError, 'Saving "{0}" : More than one type matches this file : {1}'\
                                .format(sCurScnPath, sSceneTypeList)
        else:
            sSceneType = sSceneTypeList[0]

    sWantedSceneType = kwargs.get('fileType', kwargs.get('ft', ''))

    if sWantedSceneType and (sWantedSceneType != sSceneType):

        if sWantedSceneType not in ('mayaAscii', 'mayaBinary'):
            raise ValueError('Invalid file type: "{0}"'.format(sWantedSceneType))

        sSceneType = sWantedSceneType
    else:
        if not mc.file(q=True, modified=True):
            pm.displayWarning("Current scene has NO changes to save: '{}'.".format(sSceneName))
            return sCurScnPath

    bPrompt = kwargs.get("prompt", True)
    if bPrompt:
        if kwargs.get("discard", True):
            buttonList = ("Save", "Don't Save", "Cancel")
            sDismiss = "Don't Save"
            sConfirmEnd = "?"
        else:
            buttonList = ("Save", "Cancel")
            sDismiss = "Cancel"
            sConfirmEnd = "!"

        sMsg = 'Save changes to :\n\n{0} {1}'.format(sSceneName, sConfirmEnd)
        sConfirm = pm.confirmDialog(title="DO YOU WANT TO...",
                                    message=sMsg,
                                    button=buttonList,
                                    defaultButton="Cancel",
                                    cancelButton="Cancel",
                                    dismissString=sDismiss,
                                    icon="question",
                                    )
    else:
        sConfirm = "Save"

    if sConfirm == "Cancel":
        logMsg("Cancelled !" , warning=True)
        return ""

    elif sConfirm == "Don't Save":
        return sCurScnPath

    elif sConfirm == "Save":

        bNoFileCheck = kwargs.pop("noFileCheck", True)

        if (not sCurScnPath) or sCurScnPath == "untitled":

            sFileList = chooseMayaScene(ff=sSceneTypeList)
            if not sFileList:
                return ""

            if bNoFileCheck:
                pmu.putEnv("DAVOS_FILE_CHECK", "")

            return pm.saveAs(sFileList[0], force=True)

        else:
            if bNoFileCheck:
                pmu.putEnv("DAVOS_FILE_CHECK", "")

            if kwargs.get("checkError", True):
                try:
                    assertCurrentSceneReadWithoutDataLoss()
                except AssertionError:
                    return ""

            if sSceneType:
                return pm.saveFile(force=True, type=sSceneType)
            else:
                return pm.saveFile(force=True)
Example #51
0
    def save_as(self, version):
        """The save_as action for maya environment.

        It saves the given Version instance to the Version.full_path.
        """
        # do not save if there are local files
        self.check_external_files()

        # set version extension to ma
        version.extension = '.ma'

        project = version.project

        current_workspace_path = pm.workspace.path

        # create a workspace file inside a folder called .maya_files
        # at the parent folder of the current version
        workspace_path = os.path.dirname(version.path)

        # if the new workspace path is not matching the with the previous one
        # update the external paths to absolute version
        logger.debug("current workspace: %s" % current_workspace_path)
        logger.debug("next workspace: %s" % workspace_path)

        if current_workspace_path != workspace_path:
            logger.debug("changing workspace detected!")
            logger.debug("converting paths to absolute, to be able to "
                         "preserve external paths")

            # replace external paths with absolute ones
            self.replace_external_paths(mode=1)

        # create the workspace folders
        self.create_workspace_file(workspace_path)

        # this sets the project
        pm.workspace.open(workspace_path)

        # create workspace folders
        self.create_workspace_folders(workspace_path)

        # only if the file is a new version
        if version.version_number == 1:
            # set scene fps
            self.set_fps(project.fps)

            # set render resolution
            self.set_resolution(project.width, project.height,
                                project.pixel_aspect)
            # set the render range
            if version.type.type_for == 'Shot':
                self.set_frame_range(
                    version.version_of.start_frame,
                    version.version_of.end_frame
                )

        # set the render file name and version
        self.set_render_fileName(version)

        # set the playblast file name
        self.set_playblast_file_name(version)

        # create the folder if it doesn't exists
        utils.createFolder(version.path)

        # delete the unknown nodes
        unknownNodes = pm.ls(type='unknown')
        pm.delete(unknownNodes)

        # set the file paths for external resources
        self.replace_external_paths(mode=1)

        # save the file
        pm.saveAs(
            version.full_path,
            type='mayaAscii'
        )

        # update the reference list
        self.update_references_list(version)

        # append it to the recent file list
        self.append_to_recent_files(
            version.full_path
        )

        return True
Example #52
0
    def launch(self, *args, **kwargs):
        """launch renderer command
        """
        # do nothing if there is no window (called externally)
        if not self.window:
            return

        # warn the user about the ignore settings
        try:
            dAO = pm.PyNode('defaultArnoldRenderOptions')

            ignore_attrs = [
                'ignoreSubdivision',
                'ignoreDisplacement',
                'ignoreBump',
                'ignoreMotionBlur'
            ]

            attr_values = [
                (attr, dAO.getAttr(attr))
                for attr in ignore_attrs
                if dAO.getAttr(attr) is True
            ]

            if any(attr_values):
                msg_text = '<br>'.join(
                    map(
                        lambda x: '%s: %s' % (x[0], x[1]),
                        attr_values
                    )
                )

                response = pm.confirmDialog(
                    title='Ignore These Settings?',
                    message='You have ignored:<br><br>%s<br><br><b>Is that ok?</b>' % msg_text,
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return
        except pm.MayaNodeError:
            # no Arnold
            pass

        # check if rendering with persp camera
        try:
            wrong_camera_names = [
                'perspShape',
                'topShape',
                'sideShape',
                'fontShape',

                'persp1Shape',
                'perspShape1',
            ]
            renderable_cameras = [node for node in pm.ls(type='camera') if node.getAttr('renderable')]
            if any(map(lambda x: x.name() in wrong_camera_names, renderable_cameras)):
                response = pm.confirmDialog(
                    title='Rendering with Persp?',
                    message='You are rendering with <b>Persp Camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return

            if len(renderable_cameras) > 1:
                response = pm.confirmDialog(
                    title='Rendering more than one Camera?',
                    message='You are rendering <b>more than one camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return
            elif len(renderable_cameras) == 0:
                pm.confirmDialog(
                    title='No <b>Renderable</b> camera!!!',
                    message='There is no <b>renderable camera<b>!!!',
                    button=['Ok'],
                    defaultButton='Ok',
                    cancelButton='Ok',
                    dismissString='Ok'
                )
                return

        except pm.MayaNodeError:
            # no default render globals node
            pass

        drg = pm.PyNode('defaultRenderGlobals')
        render_engine = drg.getAttr('currentRenderer')
        # RENDERER SPECIFIC CHECKS

        if render_engine == 'redshift':
            # if the renderer is RedShift
            # check if unifiedDisableDivision is 1 which will take too much time
            # to render
            dro = pm.PyNode('redshiftOptions')
            if dro.unifiedDisableDivision.get() == 1:
                response = pm.confirmDialog(
                    title="Enabled **Don't Automatically Reduce Samples of Other Effects**",
                    message='It is not allowed to render with the following option is enabled:<br>'
                            '<br>'
                            "Don't Automatically Reduce Samples of Other Effects: Enabled<br>"
                            "<br>"
                            "Please DISABLE it!",
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

        elif render_engine == 'arnold':
            # check if the samples are too high
            dAO = pm.PyNode('defaultArnoldRenderOptions')


            aa_samples = dAO.AASamples.get()
            diff_samples = dAO.GIDiffuseSamples.get()
            glossy_samples = dAO.GIGlossySamples.get()
            if int(pm.about(v=1)) >= 2017:
                sss_samples = dAO.GISssSamples.get()
            else:
                sss_samples = dAO.sssBssrdfSamples.get()

            total_diff_samples = aa_samples**2 * diff_samples**2
            total_glossy_samples = aa_samples**2 * glossy_samples**2
            total_sss_samples = aa_samples**2 * sss_samples**2

            max_allowed_diff_samples = 225
            max_allowed_glossy_samples = 100
            max_allowed_sss_samples = 450

            if total_diff_samples > max_allowed_diff_samples:
                pm.confirmDialog(
                    title="Too Much Diffuse Samples!!!",
                    message='You are using too much DIFFUSE SAMPLES (>%s)<br>'
                            '<br>'
                            'Please either reduce AA samples of Diffuse '
                            'Samples!!!' % max_allowed_diff_samples,
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

            if total_glossy_samples > max_allowed_glossy_samples:
                pm.confirmDialog(
                    title="Too Much Glossy Samples!!!",
                    message='You are using too much GLOSSY SAMPLES (>%s)<br>'
                            '<br>'
                            'Please either reduce AA samples of Glossy '
                            'Samples!!!' % max_allowed_glossy_samples,
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

            if total_sss_samples > max_allowed_sss_samples:
                pm.confirmDialog(
                    title="Too Much SSS Samples!!!",
                    message='You are using too much SSS SAMPLES (>%s)<br>'
                            '<br>'
                            'Please either reduce AA samples of SSS '
                            'Samples!!!' % max_allowed_sss_samples,
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

            # check Light Samples
            # check point lights with zero radius but more than one samples
            all_point_lights = pm.ls(type='pointLight')
            ridiculous_point_lights = []
            for point_light in all_point_lights:
                if point_light.aiRadius.get() < 0.1 and point_light.aiSamples.get() > 1:
                    ridiculous_point_lights.append(point_light)

            if ridiculous_point_lights:
                pm.confirmDialog(
                    title="Unnecessary Samples on Point Lights!!!",
                    message='You are using too much SAMPLES (>1)<br>'
                            '<br>'
                            'on <b>Point lights with zero radius</b><br>'
                            '<br>'
                            'Please reduce the samples to 1',
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

            # Check area lights with more than 2 samples
            all_area_lights = pm.ls(type=['areaLight', 'aiAreaLight'])
            ridiculous_area_lights = []
            for area_light in all_area_lights:
                if area_light.aiSamples.get() > 2:
                    ridiculous_area_lights.append(area_light)

            if ridiculous_area_lights:
                pm.confirmDialog(
                    title="Unnecessary Samples on Area Lights!!!",
                    message='You are using too much SAMPLES (>2) on<br>'
                            '<br>'
                            '<b>Area Lights</b><br>'
                            '<br>'
                            'Please reduce the samples to 2',
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

            # Check directional lights with angle == 0 and samples > 1
            all_directional_lights = pm.ls(type='directionalLight')
            ridiculous_directional_lights = []
            for directional_light in all_directional_lights:
                if directional_light.aiAngle.get() == 0 and directional_light.aiSample.get() > 1:
                    ridiculous_directional_lights.append(directional_light)

            if ridiculous_directional_lights:
                pm.confirmDialog(
                    title="Unnecessary Samples on Directional Lights!!!",
                    message='You are using too much SAMPLES (>1) on <br>'
                            '<br>'
                            '<b>Directional lights with zero angle</b><br>'
                            '<br>'
                            'Please reduce the samples to 1',
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK'
                )
                return

        # get values
        start_frame = pm.intField('cgru_afanasy__start_frame', q=1, v=1)
        end_frame = pm.intField('cgru_afanasy__end_frame', q=1, v=1)
        frames_per_task = \
            pm.intField('cgru_afanasy__frames_per_task', q=1, v=1)
        by_frame = pm.intField('cgru_afanasy__by_frame', q=1, v=1)
        hosts_mask = pm.textField('cgru_afanasy__hosts_mask', q=1, text=True)
        hosts_exclude = pm.textField('cgru_afanasy__hosts_exclude', q=1, text=True)
        separate_layers = \
            pm.checkBox('cgru_afanasy__separate_layers', q=1, v=1)
        pause = pm.checkBox('cgru_afanasy__paused', q=1, v=1)
        life_time = pm.intField('cgru_afanasy__life_time', q=1, v=1)

        # check values
        if start_frame > end_frame:
            temp = end_frame
            end_frame = start_frame
            start_frame = temp

        frames_per_task = max(1, frames_per_task)
        by_frame = max(1, by_frame)

        # store without quota sign
        hosts_mask = hosts_mask.replace('"', '')
        hosts_exclude = hosts_exclude.replace('"', '')

        # store field values
        pm.optionVar['cgru_afanasy__start_frame_ov'] = start_frame
        pm.optionVar['cgru_afanasy__end_frame_ov'] = end_frame
        pm.optionVar['cgru_afanasy__frames_per_task_ov'] = frames_per_task
        pm.optionVar['cgru_afanasy__by_frame_ov'] = by_frame
        pm.optionVar['cgru_afanasy__hosts_mask_ov'] = hosts_mask
        pm.optionVar['cgru_afanasy__hosts_exclude_ov'] = hosts_exclude
        pm.optionVar['cgru_afanasy__separate_layers_ov'] = separate_layers
        pm.optionVar['cgru_afanasy__life_time_ov'] = life_time

        # get paths
        scene_name = pm.sceneName()
        datetime = '%s%s' % (
            time.strftime('%y%m%d-%H%M%S-'),
            str(time.time() - int(time.time()))[2:5]
        )

        filename = '%s.%s.mb' % (scene_name, datetime)

        project_path = pm.workspace(q=1, rootDirectory=1)

        outputs = \
            pm.renderSettings(fullPath=1, firstImageName=1, lastImageName=1)

        # job_name = os.path.basename(scene_name)
        job_name = self.generate_job_name()

        logger.debug('%ss %se %sr' % (start_frame, end_frame, by_frame))
        logger.debug('scene        = %s' % scene_name)
        logger.debug('file         = %s' % filename)
        logger.debug('job_name     = %s' % job_name)
        logger.debug('project_path = %s' % project_path)
        logger.debug('outputs      = %s' % outputs)

        if pm.checkBox('cgru_afanasy__close', q=1, v=1):
            pm.deleteUI(self.window)



        job = af.Job(job_name)

        stored_log_level = None
        if render_engine == 'arnold':
            # set the verbosity level to warning+info
            aro = pm.PyNode('defaultArnoldRenderOptions')
            stored_log_level = aro.getAttr('log_verbosity')
            aro.setAttr('log_verbosity', 1)
            # set output to console
            aro.setAttr("log_to_console", 1)
        elif render_engine == 'redshift':
            # set the verbosity level to detailed+info
            redshift = pm.PyNode('redshiftOptions')
            stored_log_level = redshift.logLevel.get()
            redshift.logLevel.set(2)

        # save file
        pm.saveAs(
            filename,
            force=1,
            type='mayaBinary'
        )

        # rename back to original name
        pm.renameFile(scene_name)

        # create the render command
        mrc = MayaRenderCommandBuilder(
            name=job_name, file_full_path=filename,
            render_engine=render_engine, project=project_path,
            by_frame=by_frame
        )

        # submit renders
        blocks = []
        if separate_layers:
            # render each layer separately
            rlm = pm.PyNode('renderLayerManager')
            layers = [layer for layer in rlm.connections()
                      if layer.renderable.get()]

            for layer in layers:
                mrc_layer = copy.copy(mrc)
                layer_name = layer.name()
                mrc_layer.name = layer_name
                mrc_layer.render_layer = layer_name

                # create a new block for this layer
                block = af.Block(
                    layer_name,
                    renderer_to_block_type.get(render_engine, 'maya')
                )

                block.setFiles(
                    afcommon.patternFromDigits(
                        afcommon.patternFromStdC(
                            afcommon.patternFromPaths(outputs[0], outputs[1])
                        )
                    ).split(';')
                )
                block.setNumeric(
                    start_frame, end_frame, frames_per_task, by_frame
                )
                block.setCommand(mrc_layer.build_command())

                blocks.append(block)
        else:
            # create only one block
            block = af.Block(
                'All Layers',
                renderer_to_block_type.get(render_engine, 'maya')
            )

            block.setFiles(
                afcommon.patternFromDigits(
                    afcommon.patternFromStdC(
                        afcommon.patternFromPaths(outputs[0], outputs[1])
                    )
                ).split(';')
            )
            block.setNumeric(
                start_frame, end_frame, frames_per_task, by_frame
            )
            block.setCommand(mrc.build_command())

            blocks.append(block)

        job.setFolder('input', os.path.dirname(filename))
        job.setFolder('output', os.path.dirname(outputs[0]))
        job.setHostsMask(hosts_mask)
        job.setHostsMaskExclude(hosts_exclude)
        if life_time > 0:
            job.setTimeLife(life_time * 3600)

        job.setCmdPost('deletefiles "%s"' % os.path.abspath(filename))
        if pause:
            job.offline()

        # add blocks
        job.blocks.extend(blocks)

        status, data = job.send()
        if not status:
            pm.PopupError('Something went wrong!')
        print('data: %s' % data)

        # restore log level
        if render_engine == 'arnold':
            aro = pm.PyNode('defaultArnoldRenderOptions')
            aro.setAttr('log_verbosity', stored_log_level)
            # disable set output to console
            aro.setAttr("log_to_console", 0)
        elif render_engine == 'redshift':
            redshift = pm.PyNode('redshiftOptions')
            redshift.logLevel.set(stored_log_level)
Example #53
0
print "difference =", c.translate.get() - s.translate.get()  # basic vector operation

s2 = s.duplicate()[0]

# move the new sphere relatively along the z axis
s2.setTranslation([0,0,-2], relative=1)

# cycle through and move some verts.
# we're moving each verts a relative amount based on its vertex number
num = s2.numVertices()
for i, vert in enumerate(s2.verts):
	pm.move( vert, [ i / float(num), 0, 0 ], r=1)


# save the current scene scene
currScene = pm.saveAs( 'pymel_test_main.ma')

# the parent property gives the parent directory of the current scene.
# the / (slash or divide) operator serves as an os independent way of concatenating paths
# it is a shortut to os.path.join
exportScene = currScene.parent / 'pymel_test_ref.ma'

# if a file already exists where we want to export, delete it first
if exportScene.exists():
	print "removing existing pymel export scene"
	exportScene.remove()

print "exporting new scene:", exportScene
pm.exportSelected( exportScene, f=1 )

# delete the original group
def saveScene():
    saveFilePath = pm.textField('path_TFG2', q=True, text=True )
    pm.saveAs(saveFilePath)
Example #55
0
def export(fileNameFull, fileExt): # Export FILE (mb, ABC, ASS, XGen etc)
    if fileExt == 'mb':
        pm.saveAs(fileNameFull)
        pm.mel.addRecentFile (fileNameFull, "mayaBinary")
Example #56
0
    def launch(self, *args, **kwargs):
        """launch renderer command
        """
        # do nothing if there is no window (called externally)
        if not self.window:
            return

        # warn the user about the ignore settings
        try:
            dAO = pm.PyNode('defaultArnoldRenderOptions')

            ignore_attrs = [
                'ignoreSubdivision',
                'ignoreDisplacement',
                'ignoreBump',
                'ignoreMotionBlur'
            ]

            attr_values = [dAO.getAttr(attr) for attr in ignore_attrs]

            if any(attr_values):
                msg_text = '<br>'.join(
                    map(
                        lambda x, y: '%s: %s' % (x, y),
                        ignore_attrs,
                        attr_values
                    )
                )

                response = pm.confirmDialog(
                    title='Ignore These Settings?',
                    message='You have ignored:<br><br>%s<br><br><b>Is that ok?</b>' % msg_text,
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return
        except pm.MayaNodeError:
            # no Arnold
            pass

        # check if rendering with persp camera
        try:
            wrong_camera_names = [
                'perspShape',
                'topShape',
                'sideShape',
                'fontShape',

                'persp1Shape',
                'perspShape1',
            ]
            renderable_cameras = [node for node in pm.ls(type='camera') if node.getAttr('renderable')]
            if any(map(lambda x: x.name() in wrong_camera_names, renderable_cameras)):
                response = pm.confirmDialog(
                    title='Rendering with Persp?',
                    message='You are rendering with <b>Persp Camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return

            if len(renderable_cameras) > 1:
                response = pm.confirmDialog(
                    title='Rendering more than one Camera?',
                    message='You are rendering <b>more than one camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return

        except pm.MayaNodeError:
            # no default render globals node
            pass

        # get values
        start_frame = pm.intField('cgru_afanasy__start_frame', q=1, v=1)
        end_frame = pm.intField('cgru_afanasy__end_frame', q=1, v=1)
        frames_per_task = \
            pm.intField('cgru_afanasy__frames_per_task', q=1, v=1)
        by_frame = pm.intField('cgru_afanasy__by_frame', q=1, v=1)
        hosts_mask = pm.textField('cgru_afanasy__hosts_mask', q=1, text=True)
        hosts_exclude = pm.textField('cgru_afanasy__hosts_exclude', q=1, text=True)
        separate_layers = \
            pm.checkBox('cgru_afanasy__separate_layers', q=1, v=1)
        pause = pm.checkBox('cgru_afanasy__paused', q=1, v=1)

        # check values
        if start_frame > end_frame:
            temp = end_frame
            end_frame = start_frame
            start_frame = temp

        frames_per_task = max(1, frames_per_task)
        by_frame = max(1, by_frame)

        # store field values
        pm.optionVar['cgru_afanasy__start_frame_ov'] = start_frame
        pm.optionVar['cgru_afanasy__end_frame_ov'] = end_frame
        pm.optionVar['cgru_afanasy__frames_per_task_ov'] = frames_per_task
        pm.optionVar['cgru_afanasy__by_frame_ov'] = by_frame
        pm.optionVar['cgru_afanasy__hosts_mask_ov'] = hosts_mask
        pm.optionVar['cgru_afanasy__hosts_exclude_ov'] = hosts_exclude
        pm.optionVar['cgru_afanasy__separate_layers'] = separate_layers

        # get paths
        scene_name = pm.sceneName()
        datetime = '%s%s' % (
            time.strftime('%y%m%d-%H%M%S-'),
            str(time.time() - int(time.time()))[2:5]
        )

        filename = '%s.%s.mb' % (scene_name, datetime)

        project_path = pm.workspace(q=1, rootDirectory=1)

        outputs = ','.join(
            pm.renderSettings(fullPath=1, firstImageName=1, lastImageName=1)
        )

        job_name = os.path.basename(scene_name)

        logger.debug('%ss %se %sr' % (start_frame, end_frame, by_frame))
        logger.debug('scene        = %s' % scene_name)
        logger.debug('file         = %s' % filename)
        logger.debug('job_name     = %s' % job_name)
        logger.debug('project_path = %s' % project_path)
        logger.debug('outputs      = %s' % outputs)

        if pm.checkBox('cgru_afanasy__close', q=1, v=1):
            pm.deleteUI(self.window)

        cmd_buffer = [
            '"%(filename)s"',
            '%(start)s',
            '%(end)s',
            '-by %(by_frame)s',
            '-hostsmask %(msk)s',
            '-hostsexcl %(exc)s',
            '-fpt %(fpt)s',
            '-name "%(name)s"',
            '-pwd "%(pwd)s"',
            '-proj "%(proj)s"',
            '-images "%(images)s"',
            '-deletescene'
        ]

        kwargs = {
            'filename': filename,
            'start': start_frame,
            'end': end_frame,
            'by_frame': by_frame,
            'msk': hosts_mask,
            'exc': hosts_exclude,
            'fpt': frames_per_task,
            'name': job_name,
            'pwd': project_path,
            'proj': project_path,
            'images': outputs
        }

        drg = pm.PyNode('defaultRenderGlobals')
        render_engine = drg.getAttr('currentRenderer')
        if render_engine == 'mentalRay':
            cmd_buffer.append('-type maya_mental')
        elif render_engine == 'arnold':
            cmd_buffer.append('-type maya_arnold')
            # set the verbosity level to warnin+info
            aro = pm.PyNode('defaultArnoldRenderOptions')
            aro.setAttr('log_verbosity', 1)

        if pause:
            cmd_buffer.append('-pause')

        # set output to console
        dARO = pm.PyNode('defaultArnoldRenderOptions')
        dARO.setAttr("log_to_console", 1)

        # save file
        pm.saveAs(
            filename,
            force=1,
            type='mayaBinary'
        )

        # rename back to original name
        pm.renameFile(scene_name)

        # disable set output to console
        dARO.setAttr("log_to_console", 0)

        cmds = []

        # submit renders
        if separate_layers:
            # render each layer separately
            rlm = pm.PyNode('renderLayerManager')
            layers = [layer for layer in rlm.connections()
                      if layer.renderable.get()]

            for layer in layers:
                layer_name = layer.name()
                kwargs['name'] = '%s:%s' % (job_name, layer_name)

                tmp_cmd_buffer = copy.copy(cmd_buffer)
                tmp_cmd_buffer.append(
                    '-take %s' % layer.name()
                )

                # create one big command
                afjob_cmd = ' '.join([
                    os.environ['CGRU_PYTHONEXE'],
                    '"%s/python/afjob.py"' % os.environ['AF_ROOT'],
                    '%s' % ' '.join(tmp_cmd_buffer) % kwargs
                ])
                cmds.append(afjob_cmd)

        else:
            # create one big command
            afjob_cmd = ' '.join([
                os.environ['CGRU_PYTHONEXE'],
                '%s/python/afjob.py' % os.environ['AF_ROOT'],
                '%s' % ' '.join(cmd_buffer) % kwargs
            ])
            cmds.append(afjob_cmd)

        # call each command separately
        for cmd in cmds:
            print(cmds)

            os.system(cmd)
Example #57
0
    def launch(self, *args, **kwargs):
        """launch renderer command
        """
        # do nothing if there is no window (called externally)
        if not self.window:
            return

        # warn the user about the ignore settings
        try:
            dAO = pm.PyNode('defaultArnoldRenderOptions')

            ignore_attrs = [
                'ignoreSubdivision',
                'ignoreDisplacement',
                'ignoreBump',
                'ignoreMotionBlur'
            ]

            attr_values = [
                (attr, dAO.getAttr(attr))
                for attr in ignore_attrs
                if dAO.getAttr(attr) is True
            ]

            if any(attr_values):
                msg_text = '<br>'.join(
                    map(
                        lambda x: '%s: %s' % (x[0], x[1]),
                        attr_values
                    )
                )

                response = pm.confirmDialog(
                    title='Ignore These Settings?',
                    message='You have ignored:<br><br>%s<br><br><b>Is that ok?</b>' % msg_text,
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return
        except pm.MayaNodeError:
            # no Arnold
            pass

        # check if rendering with persp camera
        try:
            wrong_camera_names = [
                'perspShape',
                'topShape',
                'sideShape',
                'fontShape',

                'persp1Shape',
                'perspShape1',
            ]
            renderable_cameras = [node for node in pm.ls(type='camera') if node.getAttr('renderable')]
            if any(map(lambda x: x.name() in wrong_camera_names, renderable_cameras)):
                response = pm.confirmDialog(
                    title='Rendering with Persp?',
                    message='You are rendering with <b>Persp Camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return

            if len(renderable_cameras) > 1:
                response = pm.confirmDialog(
                    title='Rendering more than one Camera?',
                    message='You are rendering <b>more than one camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No'
                )

                if response == 'No':
                    return
            elif len(renderable_cameras) == 0:
                pm.confirmDialog(
                    title='No <b>Renderable</b> camera!!!',
                    message='There is no <b>renderable camera<b>!!!',
                    button=['Ok'],
                    defaultButton='Ok',
                    cancelButton='Ok',
                    dismissString='Ok'
                )
                return

        except pm.MayaNodeError:
            # no default render globals node
            pass

        # get values
        start_frame = pm.intField('cgru_afanasy__start_frame', q=1, v=1)
        end_frame = pm.intField('cgru_afanasy__end_frame', q=1, v=1)
        frames_per_task = \
            pm.intField('cgru_afanasy__frames_per_task', q=1, v=1)
        by_frame = pm.intField('cgru_afanasy__by_frame', q=1, v=1)
        hosts_mask = pm.textField('cgru_afanasy__hosts_mask', q=1, text=True)
        hosts_exclude = pm.textField('cgru_afanasy__hosts_exclude', q=1, text=True)
        separate_layers = \
            pm.checkBox('cgru_afanasy__separate_layers', q=1, v=1)
        pause = pm.checkBox('cgru_afanasy__paused', q=1, v=1)
        life_time = pm.intField('cgru_afanasy__life_time', q=1, v=1)

        # check values
        if start_frame > end_frame:
            temp = end_frame
            end_frame = start_frame
            start_frame = temp

        frames_per_task = max(1, frames_per_task)
        by_frame = max(1, by_frame)

        # store without quota sign
        hosts_mask = hosts_mask.replace('"', '')
        hosts_exclude = hosts_exclude.replace('"', '')

        # store field values
        pm.optionVar['cgru_afanasy__start_frame_ov'] = start_frame
        pm.optionVar['cgru_afanasy__end_frame_ov'] = end_frame
        pm.optionVar['cgru_afanasy__frames_per_task_ov'] = frames_per_task
        pm.optionVar['cgru_afanasy__by_frame_ov'] = by_frame
        pm.optionVar['cgru_afanasy__hosts_mask_ov'] = hosts_mask
        pm.optionVar['cgru_afanasy__hosts_exclude_ov'] = hosts_exclude
        pm.optionVar['cgru_afanasy__separate_layers_ov'] = separate_layers
        pm.optionVar['cgru_afanasy__life_time_ov'] = life_time

        # get paths
        scene_name = pm.sceneName()
        datetime = '%s%s' % (
            time.strftime('%y%m%d-%H%M%S-'),
            str(time.time() - int(time.time()))[2:5]
        )

        filename = '%s.%s.mb' % (scene_name, datetime)

        project_path = pm.workspace(q=1, rootDirectory=1)

        # get output paths, set the RenderPass token to Beauty,
        # this will at least guarantee to get something
        outputs = \
            pm.renderSettings(
                fullPath=1, firstImageName=1, lastImageName=1,
                leaveUnmatchedTokens=1, customTokenString="RenderPass=Beauty"
            )

        job_name = os.path.basename(scene_name)

        logger.debug('%ss %se %sr' % (start_frame, end_frame, by_frame))
        logger.debug('scene        = %s' % scene_name)
        logger.debug('file         = %s' % filename)
        logger.debug('job_name     = %s' % job_name)
        logger.debug('project_path = %s' % project_path)
        logger.debug('outputs      = %s' % outputs)

        if pm.checkBox('cgru_afanasy__close', q=1, v=1):
            pm.deleteUI(self.window)

        drg = pm.PyNode('defaultRenderGlobals')
        render_engine = drg.getAttr('currentRenderer')

        job = af.Job(job_name)

        stored_log_level = None
        if render_engine == 'arnold':
            # set the verbosity level to warning+info
            aro = pm.PyNode('defaultArnoldRenderOptions')
            stored_log_level = aro.getAttr('log_verbosity')
            aro.setAttr('log_verbosity', 1)
            # set output to console
            aro.setAttr("log_to_console", 1)
        elif render_engine == 'redshift':
            # set the verbosity level to detailed+info
            redshift = pm.PyNode('redshiftOptions')
            stored_log_level = redshift.logLevel.get()
            redshift.logLevel.set(2)

        # save file
        pm.saveAs(
            filename,
            force=1,
            type='mayaBinary'
        )

        # rename back to original name
        pm.renameFile(scene_name)

        # create the render command
        mrc = MayaRenderCommandBuilder(
            name=job_name, file_full_path=filename,
            render_engine=render_engine, project=project_path,
            by_frame=by_frame
        )

        # submit renders
        blocks = []
        if separate_layers:
            # render each layer separately
            rlm = pm.PyNode('renderLayerManager')
            layers = [layer for layer in rlm.connections()
                      if layer.renderable.get()]

            for layer in layers:
                mrc_layer = copy.copy(mrc)
                layer_name = layer.name()
                mrc_layer.name = layer_name
                mrc_layer.render_layer = layer_name

                # create a new block for this layer
                block = af.Block(
                    layer_name,
                    renderer_to_block_type.get(render_engine, 'maya')
                )

                block.setFiles(
                    afcommon.patternFromDigits(
                        afcommon.patternFromStdC(
                            afcommon.patternFromPaths(outputs[0], outputs[1])
                        )
                    ).split(';')
                )
                block.setNumeric(
                    start_frame, end_frame, frames_per_task, by_frame
                )
                block.setCommand(mrc_layer.build_command())

                blocks.append(block)
        else:
            # create only one block
            block = af.Block(
                'All Layers',
                renderer_to_block_type.get(render_engine, 'maya')
            )

            block.setFiles(
                afcommon.patternFromDigits(
                    afcommon.patternFromStdC(
                        afcommon.patternFromPaths(outputs[0], outputs[1])
                    )
                ).split(';')
            )
            block.setNumeric(
                start_frame, end_frame, frames_per_task, by_frame
            )
            block.setCommand(mrc.build_command())

            blocks.append(block)

        job.setFolder('input', os.path.dirname(filename))
        job.setFolder('output', os.path.dirname(outputs[0]))
        job.setHostsMask(hosts_mask)
        job.setHostsMaskExclude(hosts_exclude)
        if life_time > 0:
            job.setTimeLife(life_time * 3600)

        job.setCmdPost('deletefiles "%s"' % os.path.abspath(filename))
        if pause:
            job.offline()

        # add blocks
        job.blocks.extend(blocks)

        status, data = job.send()
        if not status:
            pm.PopupError('Something went wrong!')
        print('data: %s' % data)

        # restore log level
        if render_engine == 'arnold':
            aro = pm.PyNode('defaultArnoldRenderOptions')
            aro.setAttr('log_verbosity', stored_log_level)
            # disable set output to console
            aro.setAttr("log_to_console", 0)
        elif render_engine == 'redshift':
            redshift = pm.PyNode('redshiftOptions')
            redshift.logLevel.set(stored_log_level)