def createScene(self, fileType, catch = None): ''' Save new scene, build scene content. :param sceneType: type of created scene, Render, Animation etc :param catch: determinate if procedure were run for the firs time from this class, or it returns user reply from SNV class :return: ''' print '>> Building Render scene...' # Get sequence and shot from UI sequenceNumber = self.ui.lin_episode.text() shotNumber = self.ui.lin_shot.text() # If createRenderScene() runs first time if catch == None: # Build path to 001 version pathScene = dna.buildFilePath('001', fileType, sequenceNumber=sequenceNumber, shotNumber=shotNumber) # Start new Houdini session without saving current hou.hipFile.clear(suppress_save_prompt=True) # Check if file exists if not os.path.exists(pathScene): # Save first version if NOT EXISTS hou.hipFile.save(pathScene) hou.ui.displayMessage('File created:\n{}'.format(pathScene.split('/')[-1])) # print '>> First version of file saved!' else: # If 001 version exists, get latest existing version pathScene = dna.buildPathLatestVersion(pathScene) # Run Save Next Version dialog if EXISTS winSNV = SNV(pathScene, fileType) winSNV.show() return # If createRenderScene() runs from SNV class: return user choice, OVR or SNV elif catch == 'SNV': # Save latest version newPath = dna.buildPathNextVersion(dna.buildPathLatestVersion(dna.buildFilePath('001', fileType, sequenceNumber=sequenceNumber, shotNumber=shotNumber))) hou.hipFile.save(newPath) hou.ui.displayMessage('New version saved:\n{}'.format(newPath.split('/')[-1])) elif catch == 'OVR': # Overwrite existing file pathScene = dna.buildPathLatestVersion(dna.buildFilePath('001', fileType, sequenceNumber=sequenceNumber, shotNumber=shotNumber)) hou.hipFile.save(pathScene) hou.ui.displayMessage('File overwited:\n{}'.format(pathScene.split('/')[-1])) else: return # Build scene content self.buildSceneContent(fileType, sequenceNumber=sequenceNumber, shotNumber=shotNumber) # Save scene hou.hipFile.save() print '>> Building Render scene done!'
def saveNextVersion(): # Get current name filePath = hou.hipFile.path() # Get next version newPath = dna.buildPathNextVersion(filePath) # Check if next version exists if not os.path.exists(newPath): hou.hipFile.save(newPath) print '>> File saved with a NEXT version!' else: # If next version exists, get latest existing version newPath = dna.buildPathLatestVersion(newPath) win = SNV(newPath) win.show()
def populateShotItem(self, shotItem): ''' Build shot items from database and populate UI :param shotItem: render shot data dictionary :return: ''' sequenceNumber, shotNumber = shotItem[shotItemParams[0]], shotItem[ shotItemParams[1]] # Get shot frame range from database shotData = dna.getShotData(sequenceNumber, shotNumber) shotItem['range'] = '{0:03d} - {1:03d}'.format(dna.frameStart, shotData['sg_cut_out']) # Get latest render hip and latest render folder # Assume that in latest hip the render path set to the latest render folder # (TBD switch to published version) renderScenePath = dna.buildFilePath('001', dna.fileTypes['renderScene'], sequenceNumber=sequenceNumber, shotNumber=shotNumber) latestHIP = dna.buildPathLatestVersion(renderScenePath) pathMapHIP = dna.analyzeFliePath(latestHIP) renderSequencePath = dna.buildFilePath('001', dna.fileTypes['renderSequence'], sequenceNumber=sequenceNumber, shotNumber=shotNumber) shotItem['hip'] = pathMapHIP['fileVersion'] pathMapEXR = dna.analyzeFliePath(renderSequencePath) fileLocation = pathMapEXR['fileLocation'] # Check if folder exists, create if not if not os.path.exists(fileLocation): os.makedirs(fileLocation) latestEXR = dna.extractLatestVersionFolder(fileLocation) shotItem['exr'] = latestEXR renderFilePath = dna.buildFilePath(latestEXR, dna.fileTypes['renderSequence'], sequenceNumber=sequenceNumber, shotNumber=shotNumber) pathMapEXR = dna.analyzeFliePath(renderFilePath) latestFolderPath = pathMapEXR['fileLocation'] listExisted = glob.glob('{0}*.exr'.format(latestFolderPath)) # Clean list from partially rendered files 'E010_S060_012.1.exr.mantra_checkpoint' listCorruptedFiles = glob.glob( '{0}*.exr.mantra_checkpoint'.format(latestFolderPath)) listCorrupted = [] for file in listCorruptedFiles: file = file.replace('\\', '/').replace('.mantra_checkpoint', '') listCorrupted.append(file.split('/')[-1]) doneStart, doneEnd = self.extractFrames(listExisted, listCorrupted) if doneStart != 0: shotItem['done'] = '{0:03d} - {1:03d}'.format(doneStart, doneEnd) else: shotItem['done'] = '' # Check if sequence is not rendered completely # Otherwise set START to a blank value. This will be skipped when render if not doneEnd == shotData['sg_cut_out']: shotItem['start'] = str(doneEnd + 1) shotItem['end'] = str(shotData['sg_cut_out']) else: shotItem['start'] = '' shotItem['end'] = '' self.addShotRow(shotItem) return shotItem