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 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
def run(self): self.scan_scene() self.remap_paths() pm.saveFile() self.copy() self.make_launcher()
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)))
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()))
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!'
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)
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'))
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)
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')
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')
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
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)
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)
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)
def save_file(file_name, **kwargs): """ Save current file """ file_name = to_str(file_name) return pm.saveFile(file_name, **kwargs)
def saveBlueprintAndFile(self): pm.saveFile() self.blueprintModel.saveToFile()
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)
def scene_save(self): return pm.saveFile(file)
def save_file(file_path=None): return pm.saveFile()
def _save(self): pmc.saveFile()
def save(self): pm.saveFile()
def scene_save(self, file_path): return pm.saveFile(file_path)
def noEducationalLicence(): pm.FileInfo()['license'] = 'education' fileName = pm.sceneName() pm.saveFile() message_gui.info('This Maya file has been converted to an education licence')
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, [])
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()
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)
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)
def convert_to_education(): pm.FileInfo()['license'] = 'education' fileName = pm.sceneName() pm.saveFile()
# -*- coding: Shift_Jis -*- import pymel.core as pm import os # 新規シーンファイルをつくる pm.newFile() # ポリゴンの球をつくる pm.polySphere() # シーンファイルを保存するファイルパスを指定する pm.renameFile(os.getcwd() + '\\hello.ma') # シーンファイルを保存する pm.saveFile()
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)
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")
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, [])