Пример #1
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')
Пример #2
0
def saveSceneForVersion():
    filePath = _pmCore.sceneName()
    fileID = _Database.getIDByFilePath(filePath)[0]
    _pmCore.saveFile()
    versionNum, _, thumbnailPath = _Database.addVersion(filePath, _os.environ.get('AM_USERNAME'))
    _makeThumbnail(128, 128, thumbnailPath)
    return fileID, versionNum, thumbnailPath
Пример #3
0
    def run(self):

        self.scan_scene()
        self.remap_paths()
        pm.saveFile()
        self.copy()
        self.make_launcher()
Пример #4
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)))
Пример #5
0
def saveScene(sceneName, directory, description, category):
    fullScenePath = _os.path.join(directory, sceneName+'.mb')
    _pmCore.renameFile(fullScenePath)
    _pmCore.saveFile()
    userName = _os.environ.get('AM_USERNAME')
    _, _, thumbNailPath = _Database.addFile(fullScenePath, sceneName, description, category, userName)
    _makeThumbnail(128, 128, thumbNailPath)
    fileID = _Database.getIDByFilePath(fullScenePath)
    return fileID[0]
    def save_scene(self):
        """
        Save scene.
        """

        #save
        pm.saveFile(force = True)

        #log
        self.logger.debug('Scene saved to: {0}'.format(self.get_maya_file()))
Пример #7
0
def shotAssemble(partField, sequenceField, shotField, listPhase, act ):
    # New scene
    pm.newFile(f = True)
    # Extract SHOT NUMBER from UI 
    codePart = partField.getText()
    codeSequence = sequenceField.getText()
    codeShot = shotField.getText()
    # Build SHOT DICTIONARY from FTrack data
    dataShotDic = dna.buildShotDic( codePart, codeSequence, 'SHOT_{0}'.format(codeShot))
    listChars = dataShotDic['characters']
    listProps = dataShotDic['props']
    listEDA = dataShotDic['eda']
    listEnv = dataShotDic['environments']
    
    # START ASSEMBLING   
    for action in act:
        if action == 'save':
            fileNameFull = '{0}{1}{2}/{3}/SHOT_{4}/{5}E{3}_S{4}_001.mb'.format(rootScene, listPhase[1], codePart, codeSequence, codeShot, listPhase[2])
            dna.exportFileLV( fileNameFull ) # Save scene
            dna.rangeSetup(codePart, codeSequence, codeShot) # PLAYBACK START/END RANGE SETUP
            dna.setRes() # Setup RESOLUTION
        elif action == 'add assets':
            dna.referenceItems(listChars, listPhase[0]) # reference ( list of CHARS, RIG-GEO triger, asset type)
            print ' <<  CHARACTERS DONE!  >>'
            dna.referenceItems(listProps, listPhase[0]) # REF PROPS 
            print ' <<  PROPS DONE!  >>'
            if listEnv:
                dna.referenceItems(listEnv, 'GEO' ) # REF ENVIRONMENT 
                print ' <<  ENVIRONMENNT DONE!  >>'
                if listEDA[0]:
                    print listEDA
                    dna.referenceItems(listEDA, listPhase[0] ) # REF EDA  
                    print ' <<  EDA DONE!  >>'
        elif action == 'create camera':
            cam = pm.camera()
            camName =  'E' + codeSequence + '_S' + codeShot
            cam[0].rename(camName)
            cam[1].rename(str(camName) + 'Shape')
            dna.camSetup(cam[1])
        elif action == 'add ML':
            for i in listChars:
                matPath = dna.buildItemFullPath(i, 'MAT')
                dna.importData(matPath) # IMPORT ML for CHAR
                print '<<  IMPORTED MATERIAL FOR: {}  >>'.format(i)
            if listEnv:
                matPath = dna.buildItemFullPath(listEnv[0], 'MAT')
                dna.importData(matPath) # IMPORT ML for ENV
                print '<<  IMPORTED MATERIAL FOR: {}  >>'.format( listEnv[0] )                         
    # SAVE SCENE
    pm.saveFile() 
    # CREATE REPORT
    print 'ASSEMBLING DONE!'
Пример #8
0
	def openMayaFile(self,filename,folder):
		f=''
		wipPath = self.wipFolderEdit.text()
		print filename, folder
		if folder == 'wip':
			f = os.path.abspath(os.path.join(wipPath,filename))
		elif folder == 'preview':
			f = os.path.abspath(os.path.join(wipPath.replace('01_wip','03_preview'),filename))
		
		if os.path.isfile(f):
			saveDlg = saveChangesDlg()
			#saveDlg.setFixedSize(800,  300)
			result = saveDlg.exec_()
			if result == 1:
				pm.saveFile()
				pm.openFile(f)
			elif result == 2:
				pm.openFile(f,f=1)
Пример #9
0
	def openMayaFile(self,filename,folder):
		f=''
		wipPath = self.wipFolderEdit.text()
		print filename, folder
		if folder == 'wip':
			f = os.path.abspath(os.path.join(wipPath,filename))
		elif folder == 'preview':
			f = os.path.abspath(os.path.join(wipPath.replace('01_wip','03_preview'),filename))
		
		if os.path.isfile(f):
			saveDlg = saveChangesDlg()
			#saveDlg.setFixedSize(800,  300)
			result = saveDlg.exec_()
			if result == 1:
				pm.saveFile()
				pm.openFile(f)
			elif result == 2:
				pm.openFile(f,f=1)
				
			pm.optionVar(stringValueAppend=('RecentFilesList', currentFile))
			pm.optionVar(stringValueAppend=('RecentFilesTypeList', 'mayaAscii'))			
Пример #10
0
    def bake(self, time_range):
        # if file has never been saved
        if pm.system.sceneName() == '':
            pm.confirmDialog(title='Scene never saved',
                             message='Your scene has never been saved.\n\n'
                             'Please save your scene and try again.',
                             button=['OK'])
            return

        # if asked to skip confirmation message (0 is default)
        confirm = pm.confirmDialog(
            title='Bake animation is NOT undoable!',
            message=
            'Do you want to save before baking the animation and re-open the file after '
            'it is done? This action cannot be undone!\n\n'
            'Baking also removes animation layers.',
            button=['Save, bake and re-open', "Bake without saving", 'Cancel'],
            cancelButton='Cancel',
            dismissString='Cancel')

        if confirm == 'Cancel':
            return

        # save original file
        if confirm == 'Save, bake and re-open':
            original_file = pm.saveFile(force=True)

        # set playback range (appears that fbx uses it for the range when exporting)
        pm.playbackOptions(min=time_range[0], max=time_range[1])

        try:
            # bake keys
            self.custom_bake(time_range)
            self.remove_non_transform_curves()
            self.export_fbx(time_range)
        except Exception as e:
            pm.warning('An unknown error occured.')
            print str(e)

        # open original file
        if confirm == 'Save, bake and re-open':
            pm.openFile(original_file, force=True)
Пример #11
0
    def bake(self, time_range):
        # if file has never been saved
        if pm.system.sceneName() == '':
            pm.confirmDialog(title='Scene never saved',
                             message='Your scene has never been saved.\n\n'
                             'Please save your scene and try again.',
                             button=['OK'])
            return

        # if asked to skip confirmation message (0 is default)
        confirm = pm.confirmDialog(
            title='Bake animation is NOT undoable!',
            message=
            'Do you want to save before baking the animation and re-open the file after '
            'it is done? This action cannot be undone!\n\n'
            'Baking also removes animation layers.',
            button=[
                'Save and Bake Animation', 'Bake Without Saving', 'Cancel'
            ],
            cancelButton='Cancel',
            dismissString='Cancel')

        if confirm == 'Cancel':
            return

        # save original file
        if confirm == 'Save and Bake Animation':
            original_file = pm.saveFile(force=True)
            qApp.processEvents()

        # disable viewport
        maya.mel.eval("paneLayout -e -manage false $gMainPane")

        # set playback range (appears that fbx uses it for the range when exporting)
        pm.playbackOptions(min=time_range[0], max=time_range[1])

        try:
            # bake keys
            self.custom_bake(time_range)
            self.remove_non_transform_curves()
        except Exception as e:
            sys.stdout.write(str(e) + '\n')

        try:
            self.export_fbx(time_range)
        except Exception as e:
            sys.stdout.write(str(e) + '\n')

        # enable viewport
        maya.mel.eval("paneLayout -e -manage true $gMainPane")

        # open original file
        if confirm == 'Save and Bake Animation':
            try:
                maya.utils.processIdleEvents()
                qApp.processEvents()
                confirmOpen = pm.confirmDialog(
                    title='Open File',
                    message=
                    'The FBX file was saved. The original file will now be opened.',
                    button=['Open', 'Cancel'],
                    defaultButton='Open',
                    cancelButton='Cancel',
                    dismissString='Cancel')

                if confirmOpen == 'Open':
                    pm.openFile(original_file, force=True)
            except Exception as e:
                sys.stdout.write(str(e) + '\n')
Пример #12
0
def deleteUnknowPlugin():
    oldplugins = pm.unknownPlugin(q=True, list=True)
    if oldplugins:
        for plugin in oldplugins:
            print plugin
            try:
                pm.unknownPlugin(plugin, remove=True)
                print '%s removed succesfully' % plugin
            except:
                print 'Cannot remove %s' % plugin
    try:
        pm.delete("*BaseAnimation*")
    except:
        pass
    pm.unloadPlugin('Turtle')


if sys.argv[1:]:
    args = sys.argv[1:]
    for arg in args:
        filePath = pm.util.path(arg).abspath()
        if filePath.isfile():
            print "open", filePath
            # cmds.file(filePath.abspath(), open=True, f=True)
            pm.openFile(filePath, f=True)
            deleteUnknowPlugin()
            deleteBaseAnim()
            pm.saveFile()
            print "\n|{:_^60}|\n".format('File Save')
Пример #13
0
	def importPalette(self, palName, version, binding= False, anim= False, asDelta= False, delta= []):
		"""
		** NOT SUPPORT NAMESPACE **
		XGen palette will imported without validator.
		[!!!] When importing [BAKED] palette, @binding set to False should be fine.
		"""
		xgenFileName = palName + '.xgen'
		xgenFile = str('/'.join([self.paletteVerDir(palName, version), xgenFileName]))
		if not os.path.isfile(xgenFile):
			self.notifyMsg('.xgen file is not exists.', 2)
			pm.error('[XGen Hub] : .xgen file is not exists. -> ' + xgenFile)
			return None
		if asDelta and not pm.sceneName():
			self.notifyMsg('Please save the scene.', 2)
			return None
		
		self.clearPreview()
		
		# check if palette exists in current scene
		if palName in xg.palettes():
			# delete current palette folder
			palDir = xg.expandFilepath(xg.getAttr('xgDataPath', palName), '')
			if os.path.isdir(palDir):
				try:
					dir_util.remove_tree(palDir)
				except:
					pm.warning('[XGen Hub] : Dir may not remove. -> ' + palDir)
			# delete current palette
			# this action might cry about 'None type object has no attr "previewer"'
			# when there is no xgen ui panel
			xg.deletePalette(palName)
		
		# IMPORT PALETTE
		palName = base.importPalette(xgenFile, delta, '')
		# update the palette with the current project
		xg.setAttr('xgProjectPath', str(pm.workspace(q= 1, rd= 1)), palName)
		dataPath = xg.paletteRootVar() + '/' + palName
		xg.setAttr('xgDataPath', dataPath, palName)
		# create imported palette folder
		paletteRoot = xg.expandFilepath(dataPath, '', True, True)
		# create all imported descriptions folder
		msxgApi.setupDescriptionFolder(paletteRoot, palName)
		# wrap into maya nodes
		palName = str(pm.mel.xgmWrapXGen(pal= palName, wp= binding, wlg= binding, gi= binding))
		# copy maps from source
		descNames = xg.descriptions(palName)
		msxgApi.setupImportedMap(xgenFile, palName, descNames, self.projPath)
		# bind grooming descriptions to geometry
		if binding:
			for desc in descNames:
				igdesc = xg.getAttr('groom', palName, desc)
				if igdesc:
					# get groom dag node
					igdesc = xg.igActivateDescription(desc)
					# bind groom to geo
					pm.mel.igBindFromXGen(desc)
					# set groom density and sampling method
					pm.setAttr(igdesc + '.density', 1)
					pm.setAttr(igdesc + '.interpStyle', 1)
					# set all groom visible on
					xg.igSetDescriptionVisibility(True)
					# sync primitives tab attritube map path with auto export path
					xg.igSyncMaps(desc)

			# import grooming as well
			self.importGrooming(palName)

		# import as anim, build hairSystem
		if anim:
			# build hairSystem
			self.linkHairSystem(palName)
			# check preset dir exists
			presetLocalDir = str(pm.internalVar(userPresetsDir= 1))
			presetRepo = self.nDynPresetPath(palName, version)
			if os.path.exists(presetRepo):
				# copy preset
				for prs in os.listdir(presetRepo):
					dstPath = presetLocalDir + prs
					prs = '/'.join([presetRepo, prs])
					shutil.copyfile(prs, dstPath)
				# load preset
				# [note] nucleus preset will not be loaded during current devlope
				presetMel = []
				for nodeType in ['hairSystem', 'nRigid']:
					presetDict = self.ioAttrPreset(nodeType, False)
					presetMel.extend(presetDict.values())
				# dump preset
				for prs in presetMel:
					if os.path.isfile(prs):
						os.remove(prs)
			else:
				pm.warning('[XGen Hub] : nDynamic attribute presets folder not found.')

		if asDelta:
			dataPath = xg.getAttr('xgDataPath', palName)
			dataPath = dataPath + ';' + self.paletteVerDir(palName, version, raw= True)
			xg.setAttr('xgDataPath', dataPath, palName)
			# save scenes
			pm.saveFile(f= 1)
			# set export delta
			pm.setAttr(palName + '.xgExportAsDelta', 1)

		pm.warning('[XGen Hub] : Collection Import Complete !')
		self.notifyMsg('Collection Import Complete !', 0)

		return palName
Пример #14
0
    def test_instance_from_meta(self):
        test_character = luna_rig.components.Character.create(
            name="test_character")
        component1 = luna_rig.AnimComponent.create(character=test_character)
        new_component = luna_rig.AnimComponent(component1.pynode.name())

        # Assertions
        # Structs
        self.assertEqual(new_component.name, "anim_component")
        self.assertEqual(new_component.side, "c")

        # Metanode
        self.assertEqual(
            str(new_component.pynode),
            "{0}_{1}_00_meta".format(new_component.side, new_component.name))
        self.assertEqual(new_component.pynode.metaType.get(),
                         luna_rig.AnimComponent.as_str())
        self.assertEqual(
            str(new_component.root),
            "{0}_{1}_00_comp".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_ctls),
            "{0}_{1}_00_ctls".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_joints),
            "{0}_{1}_00_jnts".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_parts),
            "{0}_{1}_00_parts".format(new_component.side, new_component.name))

        # Character connections
        self.assertEqual(new_component.character, test_character)

        # Meta parent attrs on hierarchy
        self.assertTrue(pm.hasAttr(new_component.root, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_ctls, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_joints, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_parts, "metaParent"))

        # Attributes on meta node
        self.assertTrue(pm.hasAttr(new_component.pynode, "rootGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "ctlsGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "jointsGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "partsGroup"))

        # Connections to metanode
        self.assertTrue(
            pm.isConnected(new_component.root.metaParent,
                           new_component.pynode.rootGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_ctls.metaParent,
                           new_component.pynode.ctlsGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_joints.metaParent,
                           new_component.pynode.jointsGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_parts.metaParent,
                           new_component.pynode.partsGroup))

        # Save test scene
        pm.renameFile(
            self.get_temp_filename(
                "anim_component_test_instance_from_meta.ma"))
        pm.saveFile(f=1)
Пример #15
0
	backupFileName = os.path.join(backupFileDir, os.path.basename(fileName) + '.backup.mb')

	backupResult = pm.exportAll(backupFileName, preserveReferences=True, force=True)
	print 'For your information there is a back up of your file before you did this operation. That file is located here:', backupResult

	#now that we have gotten past all the things that could go wrong we will make a quick grouping to the selection that we don't want the user to know about.
	try:
		pm.group(name=name)
	except:
		millis = byuutil.timestampThisYear()
		name = name + str(millis)
		pm.group(name=name)

	#get the file name for our new asset
	cycleFile = pm.exportSelected(cacheFileName, preserveReferences=True, force=True)
	pm.saveFile() #Make sure we save it so that we will have that group again when we open it.
	print 'opening', cycleFile
	pm.openFile(cycleFile, force=True)

	result = message_gui.info("Please take a look at the cycle. Make sure everything is in order. \nMake sure you have all the models that you selected. \nMake sure there aren't any extra references that you didn't select.\nIf everything looks okay then publish this cycle, open your file, (located here: " + fileName + "), and then use the red reference button to bring it into the scene.")

	#Set frameRange as specified by the user.
	pm.playbackOptions(ast=firstFrame)
	pm.playbackOptions(aet=lastFrame)
	pm.saveFile()

	user = project.get_current_username()
	comment = 'First crowd cycle publish'

	element.publish(user, cycleFile, comment)
Пример #16
0
    def publish_model_as_look_dev(cls):
        """Publishes Model versions as LookDev versions of the same task.

        Also handles references etc.
        """
        #
        # Create LookDev for Current Model Task
        #

        from stalker import Task, Version, Type, LocalSession
        from stalker.db.session import DBSession
        from anima import defaults
        from anima.env import mayaEnv

        do_db_setup()
        m = mayaEnv.Maya()

        local_session = LocalSession()
        logged_in_user = local_session.logged_in_user
        if not logged_in_user:
            raise RuntimeError('Please login to Stalker')

        model_type = Type.query.filter(Type.name=="Model").first()
        look_dev_type = \
            Type.query.filter(Type.name=="Look Development").first()

        current_version = m.get_current_version()
        model_task = current_version.task

        if model_task.type != model_type:
            raise RuntimeError('This is not a Model version')

        if not current_version.is_published:
            raise RuntimeError('Please Publish this maya scene')

        if current_version.take_name != 'Main':
            raise RuntimeError('This is not the Main take')

        # find lookDev
        look_dev = Task.query\
            .filter(Task.parent == model_task.parent)\
            .filter(Task.type == look_dev_type).first()

        if not look_dev:
            raise RuntimeError(
                'There is no LookDev task, please inform your Stalker admin'
            )

        previous_look_dev_version = \
            Version.query\
                .filter(Version.task == look_dev)\
                .filter(Version.take_name == 'Main')\
                .first()

        description = 'Auto Created By %s ' % logged_in_user.name
        take_name = defaults.version_take_name
        if not previous_look_dev_version:
            # do the trick
            pm.newFile(f=1)

            # create a new version
            new_version = Version(
                task=look_dev,
                description=description,
                take_name=take_name,
                created_by=logged_in_user
            )
            new_version.is_published = True

            m.save_as(new_version)

            # reference the model version
            pm.createReference(
                current_version.absolute_full_path,
                gl=True,
                namespace=current_version.nice_name,
                options='v=0'
            )

            pm.saveFile()
            DBSession.add(new_version)

        else:
            latest_look_dev_version = previous_look_dev_version.latest_version
            reference_resolution = m.open(latest_look_dev_version, force=True,
                                          skip_update_check=True)
            m.update_versions(reference_resolution)

            if reference_resolution['update'] \
               or reference_resolution['create']:
                # create a new version
                new_version = Version(
                    task=look_dev,
                    description=description,
                    take_name=take_name,
                    created_by=logged_in_user,
                    parent=latest_look_dev_version
                )
                new_version.is_published = True

                m.save_as(new_version)

        # reopen model scene
        m.open(current_version, force=True, skip_update_check=True)
def create_layers():
    if not pm.objExists('objs'):
        pm.confirmDialog(t='confirm',
                         m='No objs grp, please put all objects under it!',
                         b=['ok'])
        sys.exit('')

    # save origin
    current_file = pm.sceneName()
    if 'original' in current_file.basename():
        pm.saveFile()
    else:
        origin_file = current_file.dirname() + '/' + current_file.basename(
        ).stripext() + '_original' + current_file.ext
        pm.saveAs(origin_file)

    rs_ins = rs.instance()
    rs_ins.getDefaultRenderLayer().setRenderable(0)
    ar.createOptions()
    pm.setAttr("defaultArnoldDriver.ai_translator", "tif", type="string")
    # pm.setAttr('defaultArnoldDriver.mergeAOVs', 0)
    pm.setAttr('defaultRenderGlobals.imageFilePrefix',
               '<Scene>/<RenderLayer>_<RenderPass>')

    aovs.AOVInterface().addAOV('ao', aovType='rgba')
    ao = pm.createNode('aiAmbientOcclusion')
    ao.outColor >> pm.PyNode('aiAOV_ao').defaultValue

    asm = pm.createNode('aiShadowMatte')

    # rs layer
    for obj in pm.PyNode('objs').getChildren():
        # if has a rayswitch child
        flag = 1 if obj.getChildren(typ='transform') else 0

        # beauty with shadow
        print obj.name(), obj.type()

        obj.getShape().aiSubdivType.set(1)
        obj.getShape().aiSubdivIterations.set(2)

        obj.getShape().primaryVisibility.set(1)
        obj.getShape().castsShadows.set(1)
        obj.getShape().aiVisibleInDiffuseReflection.set(1)
        obj.getShape().aiVisibleInSpecularReflection.set(1)
        obj.getShape().aiVisibleInDiffuseTransmission.set(1)
        obj.getShape().aiVisibleInSpecularTransmission.set(1)
        obj.getShape().aiVisibleInVolume.set(1)
        obj.getShape().aiSelfShadows.set(1)

        rsl = rs_ins.createRenderLayer(obj.name() + '_color')

        co1 = rsl.createCollection('co1_' + obj.name())
        co1.getSelector().setPattern('*')

        skydomelight = pm.ls(typ='aiSkyDomeLight')[0]
        co1_skydome = co1.createCollection('co1_skydome_' + obj.name())
        co1_skydome.getSelector().setPattern(skydomelight)
        co1_skydome.getSelector().setFilterType(4)
        ov_skydome = co1_skydome.createOverride('ov_skydome_' + obj.name(),
                                                absOverride)
        ov_skydome.finalize('aiCastShadows')
        ov_skydome.setAttrValue(1)

        co2 = co1.createCollection('co2_' + obj.name())
        co2.getSelector().setPattern('objs')

        co3 = co2.createCollection('co3_' + obj.name())
        co3.getSelector().setFilterType(2)
        other_shapes = [i for i in pm.PyNode('objs').getChildren() if i != obj]
        other_shapes_name = ', '.join(
            [i.getShape().name() for i in other_shapes])
        co3.getSelector().setPattern(other_shapes_name)
        ov1 = co3.createOverride('ov1_' + obj.name(), absOverride)
        ov1.finalize('primaryVisibility')
        ov1.setAttrValue(0)
        ov2 = co3.createOverride('ov2_' + obj.name(), absOverride)
        ov2.finalize('castsShadows')
        ov2.setAttrValue(0)

        co4 = co2.createCollection('co4_' + obj.name())
        co4.getSelector().setFilterType(2)
        co4.getSelector().setPattern(obj.getShape().name())
        ov3 = co4.createOverride('ov3_' + obj.name(), absOverride)
        ov3.finalize('aiSelfShadows')
        ov3.setAttrValue(1)

        # shadow
        rsl = rs_ins.createRenderLayer(obj.name() + '_shadow')

        aov = rsl.aovCollectionInstance()
        sub_colle = coll.create(obj.name() + '_ao',
                                coll.AOVChildCollection.kTypeId,
                                aovName='ao')
        aov.appendChild(sub_colle)
        override = sub_colle.createAbsoluteOverride('aiAOV_ao', 'enabled')
        override.setAttrValue(0)
        override.setName(obj.name() + '_ov_ao')

        co5 = rsl.createCollection('co5_' + obj.name())
        co5.getSelector().setPattern('*')

        co5_skydome = co5.createCollection('co5_skydome_' + obj.name())
        co5_skydome.getSelector().setPattern(skydomelight)
        co5_skydome.getSelector().setFilterType(4)
        ov5_skydome = co5_skydome.createOverride('ov5_skydome_' + obj.name(),
                                                 absOverride)
        ov5_skydome.finalize('aiCastShadows')
        ov5_skydome.setAttrValue(0)

        co6 = co5.createCollection('co6_' + obj.name())
        co6.getSelector().setPattern('objs')
        co7 = co6.createCollection('co7_' + obj.name())
        co7.getSelector().setFilterType(2)
        co7.getSelector().setPattern(obj.getShape().name())
        ov4 = co7.createOverride('ov4_' + obj.name(), absOverride)
        ov4.finalize('primaryVisibility')
        ov4.setAttrValue(0)

        co8 = co6.createCollection('co8_' + obj.name())
        co8.getSelector().setFilterType(2)
        co8.getSelector().setPattern(other_shapes_name)
        # co9 = co8.createCollection('co9_'+obj.name())
        # co9.getSelector().setFilterType(5)
        # co9.getSelector().setPattern('*')
        ov6 = co8.createOverride('ov6_' + obj.name(), shaderOverride)
        ov6.setShader(asm.name())
        ov7 = co8.createOverride('ov7_' + obj.name(), absOverride)
        ov7.finalize('castsShadows')
        ov7.setAttrValue(0)
        ov8 = co8.createOverride('ov8_' + obj.name(), absOverride)
        ov8.finalize('aiSelfShadows')
        ov8.setAttrValue(0)

        if flag:
            for ii in obj.getChildren(typ='transform'):
                ii.getShape().aiSubdivType.set(1)
                ii.getShape().aiSubdivIterations.set(2)

                ii.getShape().primaryVisibility.set(0)
                ii.getShape().castsShadows.set(0)
                ii.getShape().aiVisibleInDiffuseReflection.set(0)
                ii.getShape().aiVisibleInSpecularReflection.set(0)
                ii.getShape().aiVisibleInDiffuseTransmission.set(0)
                ii.getShape().aiVisibleInSpecularTransmission.set(0)
                ii.getShape().aiVisibleInVolume.set(0)
                ii.getShape().aiSelfShadows.set(0)

                ii.getShape().aiMatte.set(1)

            coa = co2.createCollection('coa_' + obj.name())
            coa.getSelector().setFilterType(2)
            rayswitch_names = ', '.join([
                i.getShape().name() for i in obj.getChildren(typ='transform')
            ])
            coa.getSelector().setPattern(rayswitch_names)
            ova = coa.createOverride('ova_' + obj.name(), absOverride)
            ova.finalize('primaryVisibility')
            ova.setAttrValue(1)

            cob = co6.createCollection('cob_' + obj.name())
            cob.getSelector().setFilterType(2)
            cob.getSelector().setPattern(rayswitch_names)
            ovb = cob.createOverride('ovb_' + obj.name(), absOverride)
            ovb.finalize('primaryVisibility')
            ovb.setAttrValue(1)

    rsl = rs_ins.createRenderLayer('all_objs')
    co = rsl.createCollection('co_all')
    co.getSelector().setPattern('*')

    # save after script
    modify_file = current_file.dirname() + '/' + current_file.basename(
    ).stripext() + '_modify' + current_file.ext
    pm.saveAs(modify_file)
Пример #18
0
def save_file(file_name, **kwargs):
    """ Save current file """

    file_name = to_str(file_name)

    return pm.saveFile(file_name, **kwargs)
Пример #19
0
 def saveBlueprintAndFile(self):
     pm.saveFile()
     self.blueprintModel.saveToFile()
Пример #20
0
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)
Пример #21
0
 def scene_save(self):
     return pm.saveFile(file)
Пример #22
0
def save_file(file_path=None):
    return pm.saveFile()
Пример #23
0
 def _save(self):
     pmc.saveFile()
Пример #24
0
 def save(self):
     pm.saveFile()
Пример #25
0
 def scene_save(self, file_path):
     return pm.saveFile(file_path)
Пример #26
0
def noEducationalLicence():
	pm.FileInfo()['license'] = 'education'
	fileName = pm.sceneName()
	pm.saveFile()
	message_gui.info('This Maya file has been converted to an education licence')
Пример #27
0
    def test_open_updates_the_referenced_versions_list(self):
        """testing if the open method updates the Version.references list with
        the current references list from the Maya
        """

        # create a couple of versions and reference them to each other
        # and reference them to the the scene and check if maya updates the
        # Version.references list

        versionBase = Version(**self.kwargs)
        versionBase.save()

        # change the take naem
        self.kwargs["take_name"] = "Take1"
        version1 = Version(**self.kwargs)
        version1.save()

        self.kwargs["take_name"] = "Take2"
        version2 = Version(**self.kwargs)
        version2.save()

        self.kwargs["take_name"] = "Take3"
        version3 = Version(**self.kwargs)
        version3.save()

        # now create scenes with these files
        self.mEnv.save_as(version1)
        self.mEnv.save_as(version2)
        self.mEnv.save_as(version3)  # this is the dummy version

        # create a new scene
        pm.newFile(force=True)

        # check if the versionBase.references is an empty list
        self.assertTrue(versionBase.references == [])

        # reference the given versions
        self.mEnv.reference(version1)
        self.mEnv.reference(version2)

        # save it as versionBase
        self.mEnv.save_as(versionBase)

        # now check if versionBase.references is updated
        # this part is already tested in save_as
        self.assertTrue(len(versionBase.references) == 2)
        self.assertTrue(version1 in versionBase.references)
        self.assertTrue(version2 in versionBase.references)

        # now remove references
        ref_data = self.mEnv.get_referenced_versions()
        for data in ref_data:
            ref_node = data[1]
            ref_node.remove()

        # do a save (not save_as)
        pm.saveFile()

        # clean scene
        pm.newFile(force=True)

        # open the same asset
        self.mEnv.open_(versionBase, force=True)

        # and check the references is updated
        self.assertEqual(len(versionBase.references), 0)
        self.assertEqual(versionBase.references, [])
Пример #28
0
def retargetAnimation(animation=None, skeleton=None, force=False):
    """
    Creates a new maya scene that retargets the given animation onto the given skeleton scene.
    
    Returns:
        str: The newly created animation scene.
    """
    animation = animation or loadFbxDialog('Animation Source', dir=getSceneAnimationDirectory())

    # Find the skeleton scene
    if skeleton is None:
        characterAssetDir = getSceneCharacterAssetDirectory()
        if os.path.exists(os.path.join(characterAssetDir, 'skeleton.ma')):
            skeleton = os.path.join(characterAssetDir, 'skeleton.ma')
        else:
            skeleton = loadSceneDialog('Skeleton Scene', dir=characterAssetDir)

    # Create a new file and reference the skeleton
    try:
        pmc.newFile()
    except RuntimeError:
        if not force:
            result = saveScenePrompt()
            if result:
                pmc.saveFile()
        pmc.newFile(force=True)
    pmc.createReference(skeleton, ns=RIG_NAMESPACE)

    # Create a duplicate skeleton
    rigRoot = getRootJoint(RIG_NAMESPACE)
    pmc.duplicate(rigRoot)
    root = getRootJoint()

    # Bind controls to skeleton
    targets = []
    for joint in getBindSkeleton():
        rigJoint = pmc.PyNode('%s:%s' % (RIG_NAMESPACE, joint))
        for target in getRetargets(rigJoint):
            pmc.parentConstraint(joint, target, mo=True)
            targets.append(target)

    # Bind the root joint
    for target in getRetargets(rigRoot):
        pmc.parentConstraint(root, target, mo=True)
        targets.append(target)

    # Save the scene
    sceneName = animation.replace('.fbx', '.ma')
    pmc.saveAs(sceneName)

    # Import the animation
    importAnimation(animation)

    # Copy the tag attributes
    copyTagAttribiutes(root, rigRoot)

    # Bake the bind targets
    bakeAnimation(targets)

    # Delete the import skeleton
    pmc.delete(root)

    pmc.saveFile(force=True)

    # Flush undo (this process should not be undoable)
    pmc.flushUndo()
Пример #29
0
    def extract_shot(self, shot_node_name):
        shot_node = pm.ls(shot_node_name, type="shot")[0]
        shot_name = shot_node.getShotName()
        split_string = shot_node.assets.get()
        requiered_nodes = []

        if split_string is not None:
            requiered_nodes.extend(split_string.split(";"))

        #   . . . . . . . . . . . . . . . . . . . . . .

        # collect info from shot node
        camera_shape = pm.PyNode(shot_node.getCurrentCamera())
        camera_reference = \
            pm.referenceQuery(camera_shape, referenceNode=True)
        camera_node = None

        if isinstance(camera_shape, pm.nt.Camera):
            camera_node = camera_shape.getParent()
        else:
            camera_node = camera_shape

        requiered_nodes.append(camera_reference)
        top_reference_nodes = pm.listReferences(recursive=False)

        for shot_element in pm.ls(type='shot'):
            if shot_element != shot_node:
                pm.delete(shot_element)

        gpu_cache_nodes = pm.ls(type='gpuCache')
        for gpu_cache in gpu_cache_nodes:
            gpu_cache_transform = gpu_cache.getParent()
            if gpu_cache_transform.name() not in requiered_nodes:
                pm.delete(gpu_cache_transform)

        first_frame = shot_node.getStartTime()
        last_frame = shot_node.getEndTime()

        self.bake_constraints(first_frame, last_frame)

        print("finish baking constraints")

        for reference_node in top_reference_nodes:
            if reference_node.refNode.name() not in requiered_nodes:
                reference_node.remove()

        # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

        self.keyframesManager \
            .limit_animation_curves(first_frame, last_frame)

        self.keyframesManager \
            .move_animation_with_cutItem_data(first_frame, shot_node)

        # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

        camera_publish_path = self.get_publish_camera_path(shot_name)

        self.export_camera(camera_node, camera_publish_path, first_frame,
                           last_frame)

        self.publish_camera(shot_name, camera_publish_path)

        # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

        shot_publish_scene_path = self.get_publish_scene_path(
            shot_name, "maya_shot_work")
        pm.renameFile(shot_publish_scene_path)
        pm.saveFile(force=True, type='mayaAscii')

        self.publish_scene(shot_name)
        self.create_breakdown(shot_name, requiered_nodes)
Пример #30
0
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)
Пример #31
0
def convert_to_education():
    pm.FileInfo()['license'] = 'education'
    fileName = pm.sceneName()
    pm.saveFile()
Пример #32
0
# -*- coding: Shift_Jis -*-
import pymel.core as pm
import os

# 新規シーンファイルをつくる
pm.newFile()

# ポリゴンの球をつくる
pm.polySphere()

# シーンファイルを保存するファイルパスを指定する
pm.renameFile(os.getcwd() + '\\hello.ma')

# シーンファイルを保存する
pm.saveFile()
Пример #33
0
    def test_create_default(self):
        test_character = luna_rig.components.Character.create(
            name="test_character")
        new_component = luna_rig.AnimComponent.create(character=test_character)

        # Assertions
        # Metanode
        self.assertEqual(
            str(new_component.pynode),
            "{0}_{1}_00_meta".format(new_component.side, new_component.name))
        self.assertEqual(new_component.pynode.metaType.get(),
                         luna_rig.AnimComponent.as_str())
        self.assertEqual(
            str(new_component.root),
            "{0}_{1}_00_comp".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_ctls),
            "{0}_{1}_00_ctls".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_joints),
            "{0}_{1}_00_jnts".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_parts),
            "{0}_{1}_00_parts".format(new_component.side, new_component.name))
        self.assertEqual(
            str(new_component.group_noscale),
            "{0}_{1}_00_noscale".format(new_component.side,
                                        new_component.name))
        self.assertEqual(
            str(new_component.group_out),
            "{0}_{1}_00_out".format(new_component.side, new_component.name))
        self.assertEqual(new_component.tag, "")

        # Character connection
        self.assertEqual(new_component.character, test_character)

        # Meta parent attrs on hierarchy
        self.assertTrue(pm.hasAttr(new_component.root, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_ctls, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_joints, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_parts, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_out, "metaParent"))
        self.assertTrue(pm.hasAttr(new_component.group_noscale, "metaParent"))

        # Attributes on meta node
        self.assertTrue(pm.hasAttr(new_component.pynode, "rootGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "ctlsGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "jointsGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "partsGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "noScaleGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "outGroup"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "outHooks"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "inHook"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "bindJoints"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "ctlChain"))
        self.assertTrue(pm.hasAttr(new_component.pynode, "controls"))

        # Connections to metanode
        self.assertTrue(
            pm.isConnected(new_component.root.metaParent,
                           new_component.pynode.rootGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_ctls.metaParent,
                           new_component.pynode.ctlsGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_joints.metaParent,
                           new_component.pynode.jointsGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_parts.metaParent,
                           new_component.pynode.partsGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_out.metaParent,
                           new_component.pynode.outGroup))
        self.assertTrue(
            pm.isConnected(new_component.group_noscale.metaParent,
                           new_component.pynode.noScaleGroup))

        # Name, side
        self.assertEqual(new_component.name, "anim_component")
        self.assertEqual(new_component.side, "c")

        # Save test scene
        pm.renameFile(
            self.get_temp_filename("anim_component_test_create_default.ma"))
        pm.saveFile(f=1)
Пример #34
0
    def _processScene(self):
        # Set RMS Debug level
        os.environ['RMSDEBUG'] = '1'
        self.UpdateLog("Importing plugins...")

        # Load plugins
        pm.loadPlugin("AbcExport")
        pm.loadPlugin("AbcImport")

        # Loading the file.
        self.UpdateLog("Maya now opening file: \n" + self.SceneName)
        pm.openFile(self.SceneName, force=1)
        self.UpdateProgress(10)

        # Import all references.
        self._importAllReferences()
        self.UpdateProgress(20)

        # Build a list of all of the exportable geometry in the scene.
        abcExportObjs = self._selectObjs()
        self.UpdateProgress(30)

        # Get the start frame and end frame
        startFrame = pm.playbackOptions(q=1, minTime=True)
        startFrame -= 5  # Adjust to allow for preroll
        self.UpdateLog("First frame of Scene is: %s" % (startFrame))
        endFrame = pm.SCENE.defaultRenderGlobals.endFrame.get()
        endFrame = pm.playbackOptions(q=1, maxTime=True)
        self.UpdateLog("Last frame of Scene is: %s" % (endFrame))

        # Alembic export it
        self._exportABC(abcExportObjs, startFrame, endFrame, self.abcLoc)
        self.UpdateProgress(40)

        # Export Shaders
        self.UpdateLog("Writing shaders to file..." + self.outFile)
        self._exportShaders()
        self.UpdateProgress(50)

        # Store the shaders for re-application later.
        self.UpdateLog("Storing the shaders for re-application...")
        shadersDict = self._storeShaders()
        self.UpdateProgress(60)

        # Make a new file
        self.UpdateLog("Opening new file..." + self.outFile)
        pm.openFile(self.outFile, force=1)
        self.UpdateProgress(70)

        # Import ABC Cache
        try:
            self.UpdateLog("Importing ABC cache..." + self.abcLoc)
            pm.mel.eval('AbcImport -ftr -d "%s"' % (self.abcLoc))
        except:
            self.UpdateLog("I had a problem bringing the alembic in.")
        self.UpdateProgress(80)

        # Re-apply the shaders
        self.UpdateLog("Re-applying shaders...")
        self._restoreShaders(shadersDict)
        self.UpdateProgress(90)

        # Save the file
        self.UpdateLog("Saving the maya file: " + self.outFile)
        os.system("chmod 755 " + self.outFile)
        pm.saveFile(force=1)
        os.system("chmod 755 " + self.outFile)
        self.UpdateLog("File saved.")
        self.UpdateProgress(100)
        self.UpdateLog("We're good. I opened it")
        self.UpdateFinished("True")
Пример #35
0
    def test_open_updates_the_referenced_versions_list(self):
        """testing if the open method updates the Version.references list with
        the current references list from the Maya
        """

        # create a couple of versions and reference them to each other
        # and reference them to the the scene and check if maya updates the
        # Version.references list

        versionBase = Version(**self.kwargs)
        versionBase.save()

        # change the take naem
        self.kwargs["take_name"] = "Take1"
        version1 = Version(**self.kwargs)
        version1.save()

        self.kwargs["take_name"] = "Take2"
        version2 = Version(**self.kwargs)
        version2.save()

        self.kwargs["take_name"] = "Take3"
        version3 = Version(**self.kwargs)
        version3.save()

        # now create scenes with these files
        self.mEnv.save_as(version1)
        self.mEnv.save_as(version2)
        self.mEnv.save_as(version3) # this is the dummy version

        # create a new scene
        pm.newFile(force=True)

        # check if the versionBase.references is an empty list
        self.assertTrue(versionBase.references==[])

        # reference the given versions
        self.mEnv.reference(version1)
        self.mEnv.reference(version2)

        # save it as versionBase
        self.mEnv.save_as(versionBase)

        # now check if versionBase.references is updated
        # this part is already tested in save_as
        self.assertTrue(len(versionBase.references)==2)
        self.assertTrue(version1 in versionBase.references)
        self.assertTrue(version2 in versionBase.references)
        
        # now remove references
        ref_data = self.mEnv.get_referenced_versions()
        for data in ref_data:
            ref_node = data[1]
            ref_node.remove()

        # do a save (not save_as)
        pm.saveFile()
        
        # clean scene
        pm.newFile(force=True)
        
        # open the same asset
        self.mEnv.open_(versionBase, force=True)
        
        # and check the references is updated
        self.assertEqual(len(versionBase.references), 0)
        self.assertEqual(versionBase.references, [])