def _query_selection_state(): """ Query the current selection state. Get the active point group, selected camera and connected lens. :returns: A tuple of Point Group ID, Camera ID and Lens ID. Any of the tuple members may be None if it could not be found. :rtype: (str or None, str or None, str or None) """ cam_id = None lens_id = None msg = None pgroup_id = tde4.getCurrentPGroup() if not pgroup_id: msg = 'Error: Could not get active Point Group for camera.' else: with_selection = 1 cam_ids = tde4.getCameraList(with_selection) if len(cam_ids) == 1: cam_id = cam_ids[0] lens_id = tde4.getCameraLens(cam_id) if not lens_id: msg = 'Error: Selected camera does not have a connected lens.' 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
def toMaya(params): # print "To Maya - Start" # search for camera point group... campg = checkCameraGroups() if campg is None: tde4.postQuestionRequester("Export Maya...", "Error, there is no camera point group.", "Ok") return # getParams filepath = params['file_browser'] + '.mel' cameras = params['cameras'] camerasOutSize = params['camerasOutSize'] camerasFrameStart = params['camerasFirstFrame'] # openFile tools.ensure_dir(filepath) f = open(filepath, 'w') # write header f.write("//\n") f.write("// Maya/MEL export data written by %s\n" % tde4.get3DEVersion()) f.write("//\n") f.write("// All lengths are in centimeter, all angles are in degree.\n") f.write("//\n\n") # write scene group... f.write("// create scene group...\n") f.write("string $sceneGroupName = `group -em -name \"Scene\"`;\n") # wrtie cameras exportCameras(f, cameras, camerasFrameStart, params['file_browser'], campg, camerasOutSize, params['date']) # write camera points : campg exportCameraPoints(f, campg) # write moca / Objects exportMocaObjects(f, camerasFrameStart[0]) # write global (scene node) transformation... p3d = tde4.getScenePosition3D() p3d = convertZup(p3d, yup) r3d = tde4.getSceneRotation3D() rot = convertToAngles(r3d) s = tde4.getSceneScale3D() f.write( "xform -zeroTransformPivots -rotateOrder zxy -translation %.15f %.15f %.15f -scale %.15f %.15f %.15f -rotation %.15f %.15f %.15f $sceneGroupName;\n\n" % (p3d[0], p3d[1], p3d[2], s, s, s, rot[0], rot[1], rot[2])) f.write("\n") # close file f.close()
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
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 # Generate file contents undistort = True start_frame = 1 # Backwards compatibility with 3DE4 Release 2. if uvtrack_format.SUPPORT_CAMERA_FRAME_OFFSET is True: start_frame = tde4.getCameraFrameOffset(camera) data_str = uvtrack_format.generate( point_group, camera, points, start_frame=start_frame, undistort=undistort ) # Write file. file_ext = EXT f = tempfile.NamedTemporaryFile( mode='w+b', bufsize=-1, suffix=file_ext, delete=False ) if f.closed: msg = "Error: Couldn't open file.\n%r" msg = msg % f.name tde4.postQuestionRequester(TITLE, msg, 'Ok') return f.write(data_str) f.close() # Override the user's clipboard with the temporary file path. if uvtrack_format.SUPPORT_CLIPBOARD is True: tde4.setClipboardString(f.name) else: # Cannot set the clipboard, so we'll print to the Python Console # and the user can copy it. Pretty bad workaround. print f.name return
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 except Exception, e: tde4.postQuestionRequester('Error ', str(e), ' OK ')
def _build_widgets_with_data(req, pgroup_id, cam_id, lens_id, file_data): """ Build the bottom half of the window, using the data from the mmcamera file. :param req: The 3DEqualizer window requester id. :type req: str :param pgroup_id: The Point Group ID with the active camera in it. :type pgroup_id: str :param cam_id: The Camera ID to apply data to. :type cam_id: str :param lens_id: The Lens ID to apply data to. :type lens_id: str :param file_data: Valid file data from a .mmcamera file. :type file_data: dict """ assert isinstance(file_data, dict) assert 'data' in file_data data = file_data.get('data') assert data is not None image_data = data.get('image', dict()) plate_path = image_data.get('file_path') pixel_aspect = image_data.get('pixel_aspect_ratio') camera_name = str(data.get('name')) start_frame = str(data.get('start_frame')) end_frame = str(data.get('end_frame')) attrs_data = data.get('attr', dict()) attr_names = list(attrs_data.keys()) if not start_frame or not end_frame: msg = ('File contains invalid frame range: {file_start}-{file_end}') msg = msg.format( file_start=start_frame, file_end=end_frame, ) tde4.postQuestionRequester(TITLE, msg, 'Ok') return start_frame = int(start_frame) end_frame = int(end_frame) # Detect if the parsed file data does not have any frame # information in common with the selected camera. if not plate_path: has_common_frames = False cam_start, cam_end, _ = tde4.getCameraSequenceAttr(cam_id) if str(start_frame) and str(end_frame) and str(cam_start) and str( cam_end): cam_start = int(cam_start) cam_end = int(cam_end) cam_frames = set(range(cam_start, cam_end + 1)) file_frames = set(range(start_frame, end_frame + 1)) has_common_frames = not file_frames.isdisjoint(cam_frames) if has_common_frames is False: msg = ('The file path does not contain animated' ' data in the camera\'s frame range.\n' 'File Frame Range: {file_start}-{file_end}\n' 'Camera Frame Range: {cam_start}-{cam_end}\n') msg = msg.format(file_start=start_frame, file_end=end_frame, cam_start=cam_start, cam_end=cam_end) tde4.postQuestionRequester(TITLE, msg, 'Ok') return tde4.addSeparatorWidget(req, SEP_01_WIDGET) if plate_path: plate_path = os.path.normpath(plate_path) tde4.addToggleWidget(req, PLATE_LOAD_WIDGET, PLATE_LOAD_LABEL, True) tde4.addTextFieldWidget(req, PLATE_PATH_WIDGET, PLATE_PATH_LABEL, plate_path) plate_range = '{0}-{1}'.format(start_frame, end_frame) tde4.addTextFieldWidget(req, PLATE_RANGE_WIDGET, PLATE_RANGE_LABEL, plate_range) tde4.addSeparatorWidget(req, SEP_03_WIDGET) if camera_name: tde4.addToggleWidget(req, CAMERA_NAME_WIDGET, CAMERA_NAME_LABEL, True) tde4.addTextFieldWidget(req, START_FRAME_WIDGET, START_FRAME_LABEL, str(start_frame)) tde4.addTextFieldWidget(req, END_FRAME_WIDGET, END_FRAME_LABEL, str(end_frame)) has_fbk_w = ATTR_FBK_WIDTH in attr_names has_fbk_h = ATTR_FBK_HEIGHT in attr_names if has_fbk_w or has_fbk_h: tde4.addToggleWidget(req, ATTR_FBK_SIZE_WIDGET, ATTR_FBK_SIZE_LABEL, True) has_fbk_x = ATTR_FBK_OFFSET_X in attr_names has_fbk_y = ATTR_FBK_OFFSET_Y in attr_names if has_fbk_x or has_fbk_y: tde4.addToggleWidget(req, ATTR_FBK_OFFSET_WIDGET, ATTR_FBK_OFFSET_LABEL, True) if pixel_aspect: label = '{0} ({1})'.format(PIXEL_ASPECT_LABEL, str(pixel_aspect)) tde4.addToggleWidget(req, PIXEL_ASPECT_WIDGET, label, True) has_fl = ATTR_FOCAL_LENGTH in attr_names if has_fl: samples = attrs_data.get(ATTR_FOCAL_LENGTH) is_static = mmcamera_format.detect_samples_are_static(samples) static_mode = 'static' if is_static is not True: static_mode = 'animated' label = '{0} ({1})'.format(ATTR_FOCAL_LENGTH_LABEL, static_mode) tde4.addToggleWidget(req, ATTR_FOCAL_LENGTH_WIDGET, label, True) has_tx = ATTR_TRANSLATE_X in attr_names has_ty = ATTR_TRANSLATE_Y in attr_names has_tz = ATTR_TRANSLATE_Z in attr_names if has_tx or has_ty or has_tz: label = ATTR_TRANSLATE_LABEL + ' ' label += 'X' * has_tx label += 'Y' * has_ty label += 'Z' * has_tz tde4.addToggleWidget(req, ATTR_TRANSLATE_WIDGET, label, True) has_rx = ATTR_ROTATE_X in attr_names has_ry = ATTR_ROTATE_Y in attr_names has_rz = ATTR_ROTATE_Z in attr_names if has_rx or has_ry or has_rz: label = ATTR_ROTATE_LABEL + ' ' label += 'X' * has_rx label += 'Y' * has_ry label += 'Z' * has_rz tde4.addToggleWidget(req, ATTR_ROTATE_WIDGET, label, True) return
# # main script... projectPath = tde4.getProjectPath() projectName = os.path.basename(projectPath) ShotName = projectName.split('_')[1] # # search for camera point group... campg = None pgl = tde4.getPGroupList() for pg in pgl: if tde4.getPGroupType(pg) == "CAMERA": campg = pg if campg == None: tde4.postQuestionRequester("Export Maya...", "Error, there is no camera point group.", "Ok") # # open requester... try: req = _export_requester_maya except (ValueError, NameError, TypeError): _export_requester_maya = tde4.createCustomRequester() req = _export_requester_maya tde4.addFileWidget(req, "file_browser", "Exportfile...", "*.mel") tde4.addTextFieldWidget(req, "startframe_field", "Startframe", "1") # tde4.addOptionMenuWidget(req,"mode_menu","Orientation","Y-Up", "Z-Up") tde4.addToggleWidget(req, "hide_ref_frames", "Hide Reference Frames", 0) cam = tde4.getCurrentCamera()
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 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 start, end, step = tde4.getCameraSequenceAttr(camera) start_frame = start # Backwards compatibility with 3DE4 Release 2. if SUPPORT_CAMERA_FRAME_OFFSET is True: start_frame = tde4.getCameraFrameOffset(camera) rs_enabled = False rs_distance = None # Backwards compatibility with 3DE4 Release 1. if SUPPORT_RS_ENABLED is True: rs_enabled = bool(tde4.getCameraRollingShutterEnabledFlag(camera)) if rs_enabled is True: rs_distance = get_rs_distance(camera) if (SUPPORT_PROJECT_NOTES is True and SUPPORT_RS_DISTANCE is False): set_rs_distance_into_project_notes(rs_distance) # Generate file contents data_str = generate( point_group, camera, points, start_frame=start_frame, rs_distance=rs_distance, fmt=UV_TRACK_FORMAT_VERSION_PREFERRED ) # Write file. file_ext = EXT # Prefix with the current time 'YYYY-MM-DD_HH_MM', for example # '2020-12-04_14_26'. now_str = time.strftime('%Y-%m-%d_%H_%M') prefix = 'tmp_{0}_'.format(now_str) f = tempfile.NamedTemporaryFile( mode='w', prefix=prefix, suffix=file_ext, delete=False ) if f.closed: msg = "Error: Couldn't open file.\n%r" msg = msg % f.name tde4.postQuestionRequester(TITLE, msg, 'Ok') return f.write(data_str) f.close() # Override the user's clipboard with the temporary file path. if SUPPORT_CLIPBOARD is True: tde4.setClipboardString(f.name) else: # Cannot set the clipboard, so we'll print to the Python Console # and the user can copy it. Pretty bad workaround. print(f.name) return
def main(): campg = None pgl = tde4.getPGroupList() for pg in pgl: if tde4.getPGroupType(pg) == "CAMERA": campg = pg if campg == None: tde4.postQuestionRequester("Export Maya...", "Error, there is no camera point group.", "Ok") # # open requester... try: req = _export_requester_maya except (ValueError, NameError, TypeError): _export_requester_maya = tde4.createCustomRequester() req = _export_requester_maya tde4.addFileWidget(req, "file_browser", "Exportfile...", "*.mel") tde4.addTextFieldWidget(req, "startframe_field", "Startframe", "1") # tde4.addOptionMenuWidget(req,"mode_menu","Orientation","Y-Up", "Z-Up") tde4.addToggleWidget(req, "hide_ref_frames", "Hide Reference Frames", 0) cam = tde4.getCurrentCamera() offset = tde4.getCameraFrameOffset(cam) tde4.setWidgetValue(req, "startframe_field", str(offset)) # ret = tde4.postCustomRequester(req,"Export Maya (MEL-Script)...",600,0,"Ok","Cancel") ret = 1 if ret == 1: # yup = tde4.getWidgetValue(req,"mode_menu") # if yup==2: yup = 0 yup = 1 # path = tde4.getWidgetValue(req,"file_browser") path = get_mel_filename()['path'] # frame0 = float(tde4.getWidgetValue(req,"startframe_field")) # frame0 -= 1 framerange = get_frame_range() playbackoptions = 'playbackOptions -min {0} -max {1};' playbackoptions = playbackoptions.format(framerange['first'], framerange['last']) frame0 = framerange['first'] - 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... f.write("//\n") f.write("// Maya/MEL export data written by %s\n" % tde4.get3DEVersion()) f.write("//\n") f.write( "// All lengths are in centimeter, all angles are in degree.\n" ) f.write("//\n\n") # # write scene group... groupname = """// create scene group... string $sceneGroupName = `group -em -name "mm_{name}"`; """ # f.write("// create scene group...\n") # f.write("string $sceneGroupName = `group -em -name \"Scene\"`;\n") groupname = groupname.format( name=get_mel_filename()['filename'][:-4]) f.write(groupname) # # write cameras... cl = tde4.getCameraList() index = 1 for cam in cl: camType = tde4.getCameraType(cam) noframes = tde4.getCameraNoFrames(cam) lens = tde4.getCameraLens(cam) if lens != None: name = validName(tde4.getCameraName(cam)) cam_name = 'cam_mm_' + name # name = "%s_%s_1"%(name,index) # name = "%s_%s"%(name,index) name = cam_name index += 1 fback_w = tde4.getLensFBackWidth(lens) fback_h = tde4.getLensFBackHeight(lens) p_aspect = tde4.getLensPixelAspect(lens) focal = tde4.getCameraFocalLength(cam, 1) lco_x = tde4.getLensLensCenterX(lens) lco_y = tde4.getLensLensCenterY(lens) # convert filmback to inch... fback_w = fback_w / 2.54 fback_h = fback_h / 2.54 lco_x = -lco_x / 2.54 lco_y = -lco_y / 2.54 # convert focal length to mm... focal = focal * 10.0 # create camera... f.write("\n") f.write("// create camera %s...\n" % name) f.write( "string $cameraNodes[] = `camera -name \"%s\" -hfa %.15f -vfa %.15f -fl %.15f -ncp 0.01 -fcp 10000 -shutterAngle 180 -ff \"overscan\"`;\n" % (name, fback_w, fback_h, focal)) f.write("string $cameraTransform = $cameraNodes[0];\n") f.write("string $cameraShape = $cameraNodes[1];\n") f.write( "xform -zeroTransformPivots -rotateOrder zxy $cameraTransform;\n" ) f.write( "setAttr ($cameraShape+\".horizontalFilmOffset\") %.15f;\n" % lco_x) f.write( "setAttr ($cameraShape+\".verticalFilmOffset\") %.15f;\n" % lco_y) f.write("setAttr ($cameraShape+\".renderable\") 1;\n") p3d = tde4.getPGroupPosition3D(campg, cam, 1) p3d = convertZup(p3d, yup) f.write( "xform -translation %.15f %.15f %.15f $cameraTransform;\n" % (p3d[0], p3d[1], p3d[2])) r3d = tde4.getPGroupRotation3D(campg, cam, 1) rot = convertToAngles(r3d) f.write( "xform -rotation %.15f %.15f %.15f $cameraTransform;\n" % rot) f.write("xform -scale 1 1 1 $cameraTransform;\n") """add pipeline attributes to camerashape""" # attribs = add_pipeline_attribs() ### OBSOLETE WAY attribs = add_pipeline_parms() f.write(attribs) # image plane... f.write("\n\n\n\n// create image plane...\n") f.write( "string $imagePlane = `createNode imagePlane`;\n") f.write( "cameraImagePlaneUpdate ($cameraShape, $imagePlane);\n" ) f.write( "setAttr ($imagePlane + \".offsetX\") %.15f;\n" % lco_x) f.write( "setAttr ($imagePlane + \".offsetY\") %.15f;\n" % lco_y) if camType == "SEQUENCE": f.write( "setAttr ($imagePlane+\".useFrameExtension\") 1;\n" ) else: f.write( "setAttr ($imagePlane+\".useFrameExtension\") 0;\n" ) f.write( "expression -n \"frame_ext_expression\" -s ($imagePlane+\".frameExtension=frame\");\n" ) path = tde4.getCameraPath(cam) sattr = tde4.getCameraSequenceAttr(cam) path = prepareImagePath(path, sattr[0]) f.write( "setAttr ($imagePlane + \".imageName\") -type \"string\" \"%s\";\n" % (path)) f.write("setAttr ($imagePlane + \".fit\") 4;\n") f.write( "setAttr ($imagePlane + \".displayOnlyIfCurrent\") 1;\n" ) f.write( "setAttr ($imagePlane + \".depth\") (9000/2);\n") # parent camera to scene group... f.write("\n") f.write("// parent camera to scene group...\n") f.write("parent $cameraTransform $sceneGroupName;\n") if camType == "REF_FRAME" and hide_ref: f.write( "setAttr ($cameraTransform +\".visibility\") 0;\n" ) # animate camera... if camType != "REF_FRAME": f.write("\n") f.write("// animating camera %s...\n" % name) f.write(playbackoptions) # f.write("playbackOptions -min %d -max %d;\n"%(1+frame0,noframes+frame0)) f.write("\n\n") frame = 1 while frame <= noframes: # rot/pos... p3d = tde4.getPGroupPosition3D(campg, cam, frame) p3d = convertZup(p3d, yup) r3d = tde4.getPGroupRotation3D(campg, cam, frame) rot = convertToAngles(r3d) if frame > 1: rot = [ angleMod360(rot0[0], rot[0]), angleMod360(rot0[1], rot[1]), angleMod360(rot0[2], rot[2]) ] rot0 = rot f.write( "setKeyframe -at translateX -t %d -v %.15f $cameraTransform; " % (frame + frame0, p3d[0])) f.write( "setKeyframe -at translateY -t %d -v %.15f $cameraTransform; " % (frame + frame0, p3d[1])) f.write( "setKeyframe -at translateZ -t %d -v %.15f $cameraTransform; " % (frame + frame0, p3d[2])) f.write( "setKeyframe -at rotateX -t %d -v %.15f $cameraTransform; " % (frame + frame0, rot[0])) f.write( "setKeyframe -at rotateY -t %d -v %.15f $cameraTransform; " % (frame + frame0, rot[1])) f.write( "setKeyframe -at rotateZ -t %d -v %.15f $cameraTransform; " % (frame + frame0, rot[2])) # focal length... focal = tde4.getCameraFocalLength(cam, frame) focal = focal * 10.0 f.write( "setKeyframe -at focalLength -t %d -v %.15f $cameraShape;\n" % (frame + frame0, focal)) frame += 1 # # write camera point group... f.write("\n") f.write("// create camera point group...\n") name = "cameraPGroup_%s_1" % validName( tde4.getPGroupName(campg)) f.write( "string $pointGroupName = `group -em -name \"%s\" -parent $sceneGroupName`;\n" % name) # f.write("$pointGroupName = ($sceneGroupName + \"|\" + $pointGroupName);\n") f.write("\n") # write points... l = tde4.getPointList(campg) for p in l: if tde4.isPointCalculated3D(campg, p): name = tde4.getPointName(campg, p) name = "p%s" % validName(name) p3d = tde4.getPointCalcPosition3D(campg, p) p3d = convertZup(p3d, yup) f.write("\n") f.write("// create point %s...\n" % name) f.write( "string $locator = stringArrayToString(`spaceLocator -name %s`, \"\");\n" % name) f.write("$locator = (\"|\" + $locator);\n") f.write("xform -t %.15f %.15f %.15f $locator;\n" % (p3d[0], p3d[1], p3d[2])) f.write("parent $locator $pointGroupName;\n") f.write("\n") f.write( "xform -zeroTransformPivots -rotateOrder zxy -scale 1.000000 1.000000 1.000000 $pointGroupName;\n" ) f.write("\n") # # write object/mocap point groups... camera = tde4.getCurrentCamera() noframes = tde4.getCameraNoFrames(camera) pgl = tde4.getPGroupList() index = 1 for pg in pgl: if tde4.getPGroupType(pg) == "OBJECT" and camera != None: f.write("\n") f.write("// create object point group...\n") pgname = "objectPGroup_%s_%d_1" % (validName( tde4.getPGroupName(pg)), index) index += 1 f.write( "string $pointGroupName = `group -em -name \"%s\" -parent $sceneGroupName`;\n" % pgname) f.write( "$pointGroupName = ($sceneGroupName + \"|\" + $pointGroupName);\n" ) # write points... l = tde4.getPointList(pg) for p in l: if tde4.isPointCalculated3D(pg, p): name = tde4.getPointName(pg, p) name = "p%s" % validName(name) p3d = tde4.getPointCalcPosition3D(pg, p) p3d = convertZup(p3d, yup) f.write("\n") f.write("// create point %s...\n" % name) f.write( "string $locator = stringArrayToString(`spaceLocator -name %s`, \"\");\n" % name) f.write("$locator = (\"|\" + $locator);\n") f.write( "xform -t %.15f %.15f %.15f $locator;\n" % (p3d[0], p3d[1], p3d[2])) f.write("parent $locator $pointGroupName;\n") f.write("\n") scale = tde4.getPGroupScale3D(pg) f.write( "xform -zeroTransformPivots -rotateOrder zxy -scale %.15f %.15f %.15f $pointGroupName;\n" % (scale, scale, scale)) # animate object point group... f.write("\n") f.write("// animating point group %s...\n" % pgname) frame = 1 while frame <= noframes: # rot/pos... p3d = tde4.getPGroupPosition3D(pg, camera, frame) p3d = convertZup(p3d, yup) r3d = tde4.getPGroupRotation3D(pg, camera, frame) rot = convertToAngles(r3d) if frame > 1: rot = [ angleMod360(rot0[0], rot[0]), angleMod360(rot0[1], rot[1]), angleMod360(rot0[2], rot[2]) ] rot0 = rot f.write( "setKeyframe -at translateX -t %d -v %.15f $pointGroupName; " % (frame + frame0, p3d[0])) f.write( "setKeyframe -at translateY -t %d -v %.15f $pointGroupName; " % (frame + frame0, p3d[1])) f.write( "setKeyframe -at translateZ -t %d -v %.15f $pointGroupName; " % (frame + frame0, p3d[2])) f.write( "setKeyframe -at rotateX -t %d -v %.15f $pointGroupName; " % (frame + frame0, rot[0])) f.write( "setKeyframe -at rotateY -t %d -v %.15f $pointGroupName; " % (frame + frame0, rot[1])) f.write( "setKeyframe -at rotateZ -t %d -v %.15f $pointGroupName;\n" % (frame + frame0, rot[2])) frame += 1 # mocap point groups... if tde4.getPGroupType(pg) == "MOCAP" and camera != None: f.write("\n") f.write("// create mocap point group...\n") pgname = "objectPGroup_%s_%d_1" % (validName( tde4.getPGroupName(pg)), index) index += 1 f.write( "string $pointGroupName = `group -em -name \"%s\" -parent $sceneGroupName`;\n" % pgname) f.write( "$pointGroupName = ($sceneGroupName + \"|\" + $pointGroupName);\n" ) # write points... l = tde4.getPointList(pg) for p in l: if tde4.isPointCalculated3D(pg, p): name = tde4.getPointName(pg, p) name = "p%s" % validName(name) p3d = tde4.getPointMoCapCalcPosition3D( pg, p, camera, 1) p3d = convertZup(p3d, yup) f.write("\n") f.write("// create point %s...\n" % name) f.write( "string $locator = stringArrayToString(`spaceLocator -name %s`, \"\");\n" % name) f.write("$locator = (\"|\" + $locator);\n") f.write( "xform -t %.15f %.15f %.15f $locator;\n" % (p3d[0], p3d[1], p3d[2])) for frame in range(1, noframes + 1): p3d = tde4.getPointMoCapCalcPosition3D( pg, p, camera, frame) p3d = convertZup(p3d, yup) f.write( "setKeyframe -at translateX -t %d -v %.15f $locator; " % (frame + frame0, p3d[0])) f.write( "setKeyframe -at translateY -t %d -v %.15f $locator; " % (frame + frame0, p3d[1])) f.write( "setKeyframe -at translateZ -t %d -v %.15f $locator; " % (frame + frame0, p3d[2])) f.write("parent $locator $pointGroupName;\n") f.write("\n") scale = tde4.getPGroupScale3D(pg) f.write( "xform -zeroTransformPivots -rotateOrder zxy -scale %.15f %.15f %.15f $pointGroupName;\n" % (scale, scale, scale)) # animate mocap point group... f.write("\n") f.write("// animating point group %s...\n" % pgname) frame = 1 while frame <= noframes: # rot/pos... p3d = tde4.getPGroupPosition3D(pg, camera, frame) p3d = convertZup(p3d, yup) r3d = tde4.getPGroupRotation3D(pg, camera, frame) rot = convertToAngles(r3d) if frame > 1: rot = [ angleMod360(rot0[0], rot[0]), angleMod360(rot0[1], rot[1]), angleMod360(rot0[2], rot[2]) ] rot0 = rot f.write( "setKeyframe -at translateX -t %d -v %.15f $pointGroupName; " % (frame + frame0, p3d[0])) f.write( "setKeyframe -at translateY -t %d -v %.15f $pointGroupName; " % (frame + frame0, p3d[1])) f.write( "setKeyframe -at translateZ -t %d -v %.15f $pointGroupName; " % (frame + frame0, p3d[2])) f.write( "setKeyframe -at rotateX -t %d -v %.15f $pointGroupName; " % (frame + frame0, rot[0])) f.write( "setKeyframe -at rotateY -t %d -v %.15f $pointGroupName; " % (frame + frame0, rot[1])) f.write( "setKeyframe -at rotateZ -t %d -v %.15f $pointGroupName;\n" % (frame + frame0, rot[2])) frame += 1 # # global (scene node) transformation... p3d = tde4.getScenePosition3D() p3d = convertZup(p3d, yup) r3d = tde4.getSceneRotation3D() rot = convertToAngles(r3d) s = tde4.getSceneScale3D() f.write( "xform -zeroTransformPivots -rotateOrder zxy -translation %.15f %.15f %.15f -scale %.15f %.15f %.15f -rotation %.15f %.15f %.15f $sceneGroupName;\n\n" % (p3d[0], p3d[1], p3d[2], s, s, s, rot[0], rot[1], rot[2])) f.write("\n") f.close() # tde4.postQuestionRequester("Export Maya...","Project successfully exported.","Ok") print '--> successfully exported Maya Mel' else: tde4.postQuestionRequester("Export Maya...", "Error, couldn't open file.", "Ok") return get_mel_filename()['path']