def _OpenDialog(nodeScope=None, fileLocation=None): from Katana import UI4 import AssetAPI enabled = FarmAPI.IsSceneValid(nodeScope=nodeScope, unwantedSymbols=['_']) errorText = FarmAPI.GetErrorMessages() if len(errorText) > 0: UI4.Widgets.MessageBox.Warning('Error', ' '.join(errorText)) return if fileLocation is None: fileLocation = '' xmlFile = UI4.Util.AssetId.BrowseForAsset( fileLocation, 'Specify a filename', True, { 'fileTypes': 'xml', 'acceptDir': False, 'context': AssetAPI.kAssetContextFarm }) if not xmlFile: return nodeList = FarmAPI.GetNodeList() if not nodeList: UI4.Widgets.MessageBox.Warning('Error', 'No nodes found!') _GenerateFarmFile(nodeList, xmlFile)
def initExport(option): dependencyList = FarmAPI.GetSortedDependencyList()[0] filepath = FarmAPI.GetKatanaFileName() # TODO - validity check saved = FarmAPI.IsSceneValid(FarmAPI.NODES_ALL) if not saved: # errormsg = FarmAPI.GetErrorMessages() result = UI4.Widgets.MessageBox.Warning('Unsaved Changes', 'Save your file', acceptText='Save', cancelText='Cancel') if result == 0: # Save KatanaFile.Save(filepath) else: # cancel return # TODO - Get Katana version katanaVersion = "2.54" rendererVersion = "21.4" # get renderservice renderer = dependencyList['service'] requ_lics = '' if renderer == 'arnold': rendererVersion = RenderingAPI.RendererInfo.GetPlugin( 'ArnoldRendererInfo').getRegisteredRendererVersion() extension = '.ass' requ_lics += 'Arnold;' elif renderer == 'prman': rendererVersion = RenderingAPI.RendererInfo.GetPlugin( 'PRManRendererInfo').getRegisteredRendererVersion() renderer = 'RenderMan' extension = '.rib' requ_lics += 'RenderMan;' else: UI4.Widgets.MessageBox.Warning('Unsupported Renderer', 'Unknown Renderer') return use_yeti = dependencyList['useYetiLic'] if use_yeti: requ_lics += "Yeti" software = 'Katana' software = 'Katana' if option == 'local': software = renderer # print 'dependency list ', dependencyList fileDir = dependencyList['outputFolder'] # print 'FILEDDIR ', fileDir fileName = dependencyList['fileName'] if fileName == '': UI4.Widgets.MessageBox.Warning('Warning', 'Add a name parameter') return # tmp name for xml and katana farm file xmlFileName = getNewTempFileName(fileDir, fileName) tmpFile = open(xmlFileName, 'w') dst = tmpFile.name[:-4] + '.katana' comment_file = tmpFile.name[:-4] + '_comment.txt' comment = '' use_comment = dependencyList['useComment'] if use_comment: comment = dependencyList['comment'] with open(comment_file, 'w') as f: f.write(comment) if (option == 'local'): # check file/dir if not os.path.isdir(fileDir): if UI4.Widgets.MessageBox.Warning('Warning', 'Directory does not exist.\n' + fileDir + '\n\nCreate it?', acceptText='Yes', cancelText='No'): return else: os.mkdir(fileDir) sceneName = os.path.join(fileDir, fileName) + '_<FN4>' + extension else: sceneName = dst # sceneName = FarmAPI.GetKatanaFileName() # check framerange framerange = dependencyList['range'] if framerange is None: UI4.Widgets.MessageBox.Warning('Warning', 'Add a valid framerange') return startframe = int(framerange[0]) endframe = int(framerange[1]) if endframe <= startframe: UI4.Widgets.MessageBox.Warning('Warning', 'Add a valid framerange') return # distribution check threadCount = int(dependencyList['useThreads']) if threadCount <= 0: UI4.Widgets.MessageBox.Warning('Warning', 'You must use at least one thread') return availableThreads = multiprocessing.cpu_count() if (threadCount > availableThreads) and (option == 'local'): UI4.Widgets.MessageBox.Warning( 'Warning', 'Your machine is restricted to max.' + str(availableThreads)) return packageSize = int(dependencyList['packageSize']) if packageSize <= 0: UI4.Widgets.MessageBox.Warning('Warning', 'Add a valid packageSize') return # denoiser post script flags if int(dependencyList['useRendermanDenoiserPostScript']) == 1: filter = dependencyList['denoiseFilter'] filter_cmd = 'denoise -v variance -f {}'.format(filter) if dependencyList['useFilterOverride']: filter_override = dependencyList['denoiseFilterOverride'] for override in filter_override: filter_cmd += '+{}'.format(override) # create job newJob = rrJob() if (option == 'local'): newJob.version = rendererVersion else: newJob.version = katanaVersion newJob.rendererVersionName = renderer newJob.rendererVersion = rendererVersion newJob.software = software newJob.renderer = renderer newJob.RequiredLicenses = requ_lics #"Yeti" # TODO newJob.sceneName = sceneName newJob.sceneDatabaseDir = "" newJob.seqStart = startframe newJob.seqEnd = endframe newJob.seqStep = dependencyList['stepSize'] # TODO - get dynamic newJob.seqFileOffset = 0 newJob.seqFrameSet = "" newJob.imageWidth = 99 # TODO - get dynamic newJob.imageHeight = 99 newJob.imageDir = fileDir newJob.imageFileName = fileName + '_####_variance.exr' newJob.imageFramePadding = 4 # TODO - get dynamic newJob.imageExtension = "" # ".exr" # TODO get dynamic newJob.imagePreNumberLetter = "" newJob.imageSingleOutput = False newJob.imageStereoR = "" newJob.imageStereoL = "" newJob.sceneOS = getOSString() # TODO - get dynamic newJob.camera = "" newJob.layer = dependencyList['name'] newJob.channel = "" newJob.maxChannels = 0 newJob.channelFileName = [] newJob.channelExtension = [] newJob.isActive = False newJob.sendAppBit = "" newJob.preID = "" newJob.waitForPreID = "" if dependencyList['useRendermanDenoiserPostScript']: newJob.CustomA = filter_cmd else: newJob.CustomA = "" newJob.CustomB = "comment: {}".format(comment) newJob.CustomC = "" newJob.LocalTexturesFile = "" newJob.rrSubmitVersion = "%rrVersion%" newJob.packageSize = packageSize newJob.threadCount = threadCount newJob.renderNode = dependencyList['name'] # write xml file root = newJob.writeToXMLstart(None) job = newJob.writeToXMLJob(root) newJob.writeToXMLEnd(tmpFile, root) # copy katanna recipie shutil.copy(filepath, dst) # submit job if option == 'local': # start control session for local conversion scriptDir = os.path.dirname(os.path.realpath(__file__)) sessionScript = os.path.join(scriptDir, 'session/ControlSessions.py') subp = subprocess.Popen(['python', sessionScript, tmpFile.name, dst], close_fds=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) elif option == 'farm': os.system(getRRSubmitterPath() + " \"" + xmlFileName + "\"")