def main(): camera = tde4.getCurrentCamera() point_group = tde4.getCurrentPGroup() if camera is None or point_group is None: msg = 'There is no current Point Group or Camera.' tde4.postQuestionRequester(TITLE, msg, 'Ok') return # check if context menu has been used, and retrieve point... point = tde4.getContextMenuObject() if point is not None: # retrieve point's parent pgroup (not necessarily being the current one!)... point_group = tde4.getContextMenuParentObject() points = tde4.getPointList(point_group, 1) else: # otherwise use regular selection... points = tde4.getPointList(point_group, 1) if len(points) == 0: msg = 'There are no selected points.' tde4.postQuestionRequester(TITLE, msg, 'Ok') return # widget default values start_frame = 1 # Backwards compatibility with 3DE4 Release 2. if uvtrack_format.SUPPORT_CAMERA_FRAME_OFFSET is True: start_frame = tde4.getCameraFrameOffset(camera) pattern = '*' + EXT # GUI req = tde4.createCustomRequester() tde4.addFileWidget(req, 'file_browser_widget', 'Filename...', pattern) tde4.addTextFieldWidget(req, 'start_frame_widget', 'Start Frame', str(start_frame)) ret = tde4.postCustomRequester(req, TITLE, 500, 0, 'Ok', 'Cancel') if ret == 1: # Query GUI Widgets path = tde4.getWidgetValue(req, 'file_browser_widget') start_frame = tde4.getWidgetValue(req, 'start_frame_widget') start_frame = int(start_frame) # Generate file contents data_str = uvtrack_format.generate( point_group, camera, points, start_frame=start_frame, fmt=uvtrack_format.UV_TRACK_FORMAT_VERSION_PREFERRED, ) # Write file. if path.find(EXT, len(path)-3) == -1: # Ensure the file path ends with the extension, if not add it. path += EXT f = open(path, 'w') if f.closed: msg = "Error, couldn't open file.\n" msg += repr(path) tde4.postQuestionRequester(TITLE, msg, 'Ok') return f.write(data_str) f.close() return
we_have_set_widget_callback_function = False # For older releases we cannot do the smart guessing... if we_have_set_widget_callback_function: widget_default_initial_frame = tde4.addOptionMenuWidget(nuke_node_req,"option_menu_default_initial_frame","Startframe is based on","Nuke Read Node Default","3DE4 Initial Frame","User-defined") tde4.setWidgetValue(nuke_node_req,"option_menu_default_initial_frame",str(value_option_menu_default_initial_frame)) tde4.setWidgetCallbackFunction(nuke_node_req,"option_menu_default_initial_frame","set_initial_frame_widget") # Without / before smart-guessing we mimick Nuke's Read Node default behaviour. tde4.addTextFieldWidget(nuke_node_req,"text_initial_frame_nuke","Startframe in Nuke",str(tde4.getCameraSequenceAttr(id_cam)[0])) # After creating all widgets we invoke the Callback once explicitly in order to initialize the text widget. if we_have_set_widget_callback_function: set_initial_frame_widget(widget_default_initial_frame,None,None) # post requester ret = tde4.postCustomRequester(nuke_node_req,'Export nuke distortion node for camera ' + tde4.getCameraName(id_cam)+' ',700,0,'Ok','Cancel ') if ret != 1: raise CancelException('Cancelled') # At this point we know that user has pressed "Ok". Check path and suffix nuke_path = tde4.getWidgetValue(nuke_node_req,'file_nuke_path') if not nuke_path: raise Exception('No path specified') if not nuke_path.endswith('.nk'): nuke_path += '.nk' # Update frame values and calculate offset between 3DE4 and Nuke. initial_frame_nuke = int(tde4.getWidgetValue(nuke_node_req,"text_initial_frame_nuke")) # export exportNukeDewarpNode(id_cam,initial_frame_nuke,nuke_path) except CancelException, e: pass
else: if len(cam_ids) == 0: msg = 'Error: Please select a camera.' elif len(cam_ids) > 1: msg = 'Error: Please select only one camera.' tde4.postQuestionRequester(TITLE, msg, 'Ok') if msg is not None: tde4.postQuestionRequester(TITLE, msg, 'Ok') return pgroup_id, cam_id, lens_id # Launch GUI when this script is run. pgroup_id, cam_id, lens_id = _query_selection_state() if pgroup_id and cam_id and lens_id: try: requester = _paste_camera_mmsolver_requester _remove_all_dynamic_widgets(requester, '', 0) file_path = tde4.getWidgetValue(requester, FILE_BROWSER_WIDGET) or None except (ValueError, NameError, TypeError): file_path = None requester = _build_gui(file_path) _paste_camera_mmsolver_requester = requester button_pressed = tde4.postCustomRequester(_paste_camera_mmsolver_requester, TITLE, WIDTH, HEIGHT, 'Paste', 'Cancel') if button_pressed == 1: # Button index pressed is 1-based; 1=='Paste', 2='Cancel'. _run_gui(_paste_camera_mmsolver_requester, pgroup_id, cam_id, lens_id)
lens = tde4.getCameraLens(cam) for id in tde4.getLensList(): focus = tde4.getLensFocalLength(id) lensmodel = tde4.getLensLDModel(id) focallength = tde4.getLensFocalLength(id) paraNumber = tde4.getLDModelNoParameters(lensmodel) for i in range(paraNumber): paraName = tde4.getLDModelParameterName(lensmodel, i) currentValue = tde4.getLensLDAdjustableParameter( id, paraName, focus, focallength) defaultValue = tde4.getLDModelParameterDefault(lensmodel, paraName) if currentValue != defaultValue: LensDistortionValid = True break ret = tde4.postCustomRequester(req, "Export Maya (MEL-Script)...", 600, 0, "Ok", "Cancel") if ret == 1: # yup = tde4.getWidgetValue(req,"mode_menu") # if yup==2: yup = 0 yup = 1 path = tde4.getWidgetValue(req, "file_browser") frame0 = float(tde4.getWidgetValue(req, "startframe_field")) frame0 -= 1 hide_ref = tde4.getWidgetValue(req, "hide_ref_frames") if path != None: if not path.endswith('.mel'): path = path + '.mel' f = open(path, "w") if not f.closed: # # write some comments...
def exportNOID(): # print 'Start exportNOID' req = buildUI() ret = tde4.postCustomRequester(req, "Export NOID - (Maya & Nuke)", 0, 0, "Export", "Cancel") if ret == 1: # Canceled by the user # get the parameters selecteds params = {} params['file_browser'] = tde4.getWidgetValue(req, "file_browser") #params['nukeVersion'] = tde4.getWidgetValue(req, "nukeVersion") #params['openNuke'] = tde4.getWidgetValue(req, "openNuke") params['cameras'] = [] params['camerasOutSize'] = [] params['camerasFirstFrame'] = list() date = strftime("%y%m%d%H%M%S", gmtime()) # YYMMDDhhmmss params['date'] = date for cameraIndex in range(tde4.getNoCameras()): cameraObj = tde4.getIndexCamera(cameraIndex) # cameraName = str(tde4.getCameraName(cameraObj)) # NO USED exprtCamWidgetName = "exportCamera" + str(cameraIndex) exprtCamWidgetExists = tde4.widgetExists(req, exprtCamWidgetName) exprtCamWidgetValue = tde4.getWidgetValue(req, exprtCamWidgetName) if exprtCamWidgetExists and exprtCamWidgetValue: camResWidgetName = camWidgetPrefix + str(cameraIndex) log.debug('camResWidgetName : ' + str(camResWidgetName)) camResWidgetValue = tde4.getWidgetValue(req, camResWidgetName) log.debug('camResWidgetValue: ' + str(camResWidgetValue)) imageWidth, imageHeight, firstFrame = camResWidgetValue.split( resSpliter) imageResolution = tools.Resolution(width=imageWidth, height=imageHeight) params['cameras'].append(cameraObj) params['camerasOutSize'].append(imageResolution) params['camerasFirstFrame'].append(firstFrame) log.debug('imageResolution : ' + str(imageResolution)) if params['cameras'] == []: message = 'Aborting, Nothing selected to Export' log.debug(message) return # debug params for paramName in params: paramValue = params[paramName] log.debug('param : ' + str(paramName)) log.debug('value : ' + str(paramValue)) # Export to Maya mayaExporter.toMaya(params) # Export to Nuke nukeFilesPath = nukeExporter.toNuke(params) # open Nuke or not # if params['openNuke']: # for nukeFilePath in nukeFilesPath: # nukeExePath = findNukeExe(int(params['nukeVersion'])) # toExecute = [nukeExePath, '-q', nukeFilePath] # # log.debug(toExecute) # # useSubProcess = True # if useSubProcess: # subprocess.Popen(toExecute, executable=nukeExePath) # else: # os.system(toExecute) tde4.postQuestionRequester('Export finished', 'All the cameras selected were exported', 'OK') else: message = 'Canceled by user' log.debug(message) message = 'End exportCGEV' log.debug(message)
def compress(cams, ui=False): errors = [] max_steps = 0 seq_cams = {} for cam in cams: cam_name = tde4.getCameraName(cam) if tde4.getCameraType(cam) != 'SEQUENCE': errors.append( 'Camera {} is not a Sequence Camera.'.format(cam_name)) continue start, end = tde4.getCameraSequenceAttr(cam)[:2] frames = abs(end - start + 1) steps = frames + frames / 100 + 2 max_steps += steps seq_cams[cam] = { 'name': cam_name, 'start': start, 'end': end, 'frames': frames, 'steps': steps } if cams: if ui: tde4.postProgressRequesterAndContinue(TITLE, 'Please wait...', max_steps, 'Ok') else: print(TITLE) else: errors.append('Please choose a camera.') steps_done = 0 for cam in seq_cams: cam_name = seq_cams[cam]['name'] msg = 'Exporting: {} (starting)'.format(cam_name) if ui: tde4.updateProgressRequester(steps_done, msg) else: print(' 0% ' + msg) start = seq_cams[cam]['start'] end = seq_cams[cam]['end'] frames = seq_cams[cam]['frames'] steps = seq_cams[cam]['steps'] path = tde4.getCameraPath(cam) if tde4.getPreferenceValue('ICOMPRESS_BCFILE_IN_DIR') == '1': # save buffer in project directory project_dir = os.path.dirname(tde4.getProjectPath()) if project_dir: # we have a project directory, it's safe to save target_path = os.path.join(project_dir, os.path.basename(path)) else: # no project directory, alert the user target_path = '' errors.append( 'Can not save buffer to project directory. Project is not saved.' ) elif tde4.getPreferenceValue('ICOMPRESS_BCFILE_IN_DIR') == '2': # save buffer in custom directory custom_dir = tde4.getPreferenceValue('ICOMPRESS_CUSTOM_DIR') target_path = os.path.join(custom_dir, os.path.basename(path)) else: # default behavior, save buffer in image path target_path = path if not path: errors.append( ("Couldn't process camera {} because it doesn't have " 'any Footage loaded.').format(cam_name)) steps_done += steps continue gamma = tde4.getCamera8BitColorGamma(cam) softclip = tde4.getCamera8BitColorSoftclip(cam) black, white = tde4.getCamera8BitColorBlackWhite(cam) exr = tde4.getCameraImportEXRDisplayWindowFlag(cam) sxr = tde4.getCameraImportSXRRightEyeFlag(cam) if sxr == 1: sxr2 = " -import_sxr_right_eye " else: sxr2 = " " if exr == 1: exr2 = " -import_exr_display_window " else: exr2 = " " proc_err = None # makeBCFile exits cleanly even if it errored, so we have to parse # its errors manually. proc = subprocess.Popen( (os.path.join(tde4.get3DEInstallPath(), 'bin', 'makeBCFile'), '-source', path, '-start', str(start), '-end', str(end), '-out', os.path.dirname(target_path), sxr2, exr2, '-black', str(black), '-white', str(white), '-gamma', str(gamma), '-softclip', str(softclip)), stdout=subprocess.PIPE, universal_newlines=True) for line in iter(proc.stdout.readline, ''): line = line.rstrip() if line.startswith('Error'): proc_err = line continue elif line.endswith('image files processed'): frame = int(line.split('/', 1)[0]) msg = 'Exporting: {} ({}/{})'.format(cam_name, frame, frames) if ui: tde4.updateProgressRequester(steps_done + frame + 1, msg) else: print('{: 3d}% {}'.format( 100 * (steps_done + frame + 1) / max_steps, msg)) if proc_err: errors.append( "Couldn't create Buffer Compression File for Camera {}.". format(cam_name)) errors.append('Message >> {}'.format(proc_err)) steps_done += steps continue msg = 'Exporting: {} (finishing)'.format(cam_name) if ui: tde4.updateProgressRequester(steps_done + frames + 2, msg) else: print('{: 3d}% {}'.format( 100 * (steps_done + frames + 2) / max_steps, msg)) bcompress = ('x'.join(target_path.split('#' * path.count('#'))) + '.3de_bcompress') if not os.path.isfile(bcompress): errors.append( "Couldn't find Buffer Compression File for Camera {}.".format( cam_name)) steps_done += steps continue if not tde4.importBufferCompressionFile(cam): errors.append( "Couldn't import Buffer Compression File for Camera {}.". format(cam_name)) # Change permissions of the Buffer Compression File, # to be nice to everyone else who might work on the shot eventually! try: os.chmod(bcompress, 0o666) except OSError: errors.append( "Couldn't set permissions of Buffer CompressionFile for Camera {}." .format(cam_name)) steps_done += steps if ui: tde4.unpostProgressRequester() if errors: req = tde4.createCustomRequester() for i, line in enumerate(errors): name = 'line{}'.format(i) tde4.addLabelWidget(req, name, line, 'ALIGN_LABEL_LEFT') tde4.setWidgetOffsets(req, name, 0, 0, 0, 0) tde4.postCustomRequester(req, TITLE, 0, 0, 'Ok') else: print('100% Done.') if errors: raise RuntimeError('\n'.join(errors))
for i, line in enumerate(errors): name = 'line{}'.format(i) tde4.addLabelWidget(req, name, line, 'ALIGN_LABEL_LEFT') tde4.setWidgetOffsets(req, name, 0, 0, 0, 0) tde4.postCustomRequester(req, TITLE, 0, 0, 'Ok') else: print('100% Done.') if errors: raise RuntimeError('\n'.join(errors)) if __name__ == '__main__': req = tde4.createCustomRequester() tde4.addOptionMenuWidget(req, 'mode', 'Export:', 'Current Camera', 'Selected Cameras', 'All Cameras') ret = tde4.postCustomRequester(req, TITLE, 300, 0, 'Export', 'Cancel') if ret == 1: mode = tde4.getWidgetValue(req, 'mode') if mode == 1: cams = [tde4.getCurrentCamera()] else: cams = tde4.getCameraList(mode < 3) compress(cams, ui=True) tde4.deleteCustomRequester(req)