def _get_viewport_camera(): """Get the Camera transform node in the active viewport.""" model_editor = viewport_utils.get_active_model_editor() if model_editor is None: return None cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) return cam_tfm
def main(): """ Convert all selected transforms into 2D markers under a camera. """ # Get camera model_editor = utils_viewport.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = utils_viewport.get_viewport_camera(model_editor) if cam_shp is None: LOG.error('Please select an active viewport to get a camera.') return if utils_camera.is_startup_cam(cam_shp) is True: LOG.error("Cannot create Markers in 'persp' camera.") return # Get transforms nodes = maya.cmds.ls( selection=True, long=True, type='transform', ) or [] if len(nodes) == 0: LOG.warning('Please select one or more transform nodes.') return mmapi.load_plugin() try: # Turn off Maya UI maya.mel.eval('paneLayout -e -manage false $gMainPane') # Compute the Marker Data. start_frame, end_frame = utils_time.get_maya_timeline_range_outer() mkr_data_list = __convert_nodes_to_marker_data_list( cam_tfm, cam_shp, nodes, start_frame, end_frame, ) cam = mmapi.Camera(shape=cam_shp) mkr_list = mayareadfile.create_nodes( mkr_data_list, cam=cam, mkr_grp=None, with_bundles=True, ) mkr_nodes = [mkr.get_node() for mkr in mkr_list] except: raise finally: # Turn on Maya UI maya.mel.eval('paneLayout -e -manage true $gMainPane') if len(mkr_nodes) > 0: maya.cmds.select(mkr_nodes, replace=True) return
def _get_active_viewport_camera(): """Get the active viewport camera.""" cam = None model_editor = utils_viewport.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam cam_tfm, cam_shp = utils_viewport.get_viewport_camera(model_editor) node = cam_shp if node is None: msg = 'Please select an active viewport to get a camera.' LOG.error(msg) return cam if camera_utils.is_startup_cam(node) is True: msg = "Cannot create Markers in 'persp' camera." LOG.error(msg) return cam if maya.cmds.nodeType(node) == 'transform': cam = mmapi.Camera(transform=node) elif maya.cmds.nodeType(node) == 'camera': cam = mmapi.Camera(shape=node) else: LOG.error('Camera node is invalid; %r', node) return cam return cam
def _get_active_or_selected_camera(cam_node_list): active_cam_tfm = None active_cam_shp = None if len(cam_node_list) > 0: cam_node = cam_node_list[0] active_cam_tfm, active_cam_shp = camera_utils.get_camera(cam_node) else: model_editor = viewport_utils.get_active_model_editor() if model_editor is not None: active_cam_tfm, active_cam_shp = viewport_utils.get_viewport_camera( model_editor) return active_cam_tfm, active_cam_shp
def _get_camera_for_update(sel): cam = None if len(sel) == 0: # Get active viewport camera. model_editor = viewport_utils.get_active_model_editor() if model_editor is not None: cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) if cam_tfm is not None and cam_shp is not None: cam = mmapi.Camera(transform=cam_tfm, shape=cam_shp) if cam is not None and cam.is_valid(): return cam else: cam = _find_camera_from_selection(sel) return cam
def get_offset_nodes(): """ Query for Center 2D nodes. :returns: Two offset nodes (plusMinusAverage and multiplyDivide) :rtype: string, string. """ model_editor = viewport_utils.get_active_model_editor() cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) reprojection_nodes = reproject_utils.find_reprojection_nodes( cam_tfm, cam_shp) offset_node = None for node in reprojection_nodes: if 'offset_plusMinusAverage' in node: offset_node = node return offset_node, cam_shp
def main(): """ Main function toggles between screen-space Z and object :return: None """ selection = maya.cmds.ls(sl=True) if not selection: LOG.warn('Please select an object.') return active_model_editor = utils_viewport.get_active_model_editor() if not active_model_editor: LOG.warn('Please select a viewport.') return camera_tfm = utils_viewport.get_viewport_camera(active_model_editor)[0] if not camera_tfm: LOG.warn('Please select a viewport.') return manip_context = const.MANIP_CONTEXT move_manip_mode = maya.cmds.manipMoveContext(manip_context, query=True, mode=True) manip_move_super_context = const.MANIP_MOVE_SUPER_CONTEXT maya.cmds.setToolTo(manip_move_super_context) move_manip_object = const.MOVE_MANIP_MODE_OBJECT move_manip_world = const.MOVE_MANIP_MODE_WORLD move_manip_custom = const.MOVE_MANIP_MODE_CUSTOM if (move_manip_mode == move_manip_object or move_manip_mode == move_manip_world): maya.cmds.manipMoveContext(manip_context, edit=True, mode=move_manip_custom) screen_space_z(camera_tfm) LOG.info('Move tool set to Screen-Z') elif move_manip_mode == move_manip_custom: maya.cmds.manipMoveContext(manip_context, edit=True, mode=move_manip_object) LOG.info('Move tool set to Object') return
def get_active_viewport_camera(): """ Get the Camera that is attached to the active viewport. :return: The Camera object, or None. :rtype: Camera or None """ cam = None # Get the camera from the active viewport. model_editor = viewport_utils.get_active_model_editor() if model_editor is None: return cam cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) if cam_shp is None: return cam if camera_utils.is_startup_cam(cam_shp) is True: return cam cam = mmapi.Camera(shape=cam_shp) return cam
def remove(): """ Remove the centering nodes in the current active viewport. """ model_editor = viewport_utils.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) if cam_shp is None: msg = 'Please select an active 3D viewport to get a camera.' LOG.warning(msg) return reproject_utils.remove_reprojection_from_camera(cam_tfm, cam_shp) reproject_utils.reset_pan_zoom(cam_tfm, cam_shp) return
def main(): """ Aims the selected transforms at the active viewport's camera transform node. """ sel = maya.cmds.ls(sl=True, type='transform') or [] if len(sel) == 0: LOG.warning('Please select at least one object!') return # Get camera model_editor = utils_viewport.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = utils_viewport.get_viewport_camera(model_editor) if cam_shp is None: LOG.warning('Please select an active viewport to get a camera.') return lib.aim_at_target(sel, cam_tfm, remove_after=True) return
def remove(): """ Remove the centering nodes in the current active viewport. """ model_editor = viewport_utils.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) if cam_shp is None: msg = 'Please select an active 3D viewport to get a camera.' LOG.warning(msg) return try: mmapi.set_solver_running(True) mmapi.load_plugin() reproject_utils.remove_reprojection_from_camera(cam_tfm, cam_shp) reproject_utils.reset_pan_zoom(cam_tfm, cam_shp) finally: mmapi.set_solver_running(False) return
def main(): """ Convert all selected transforms into 2D markers under a camera. """ # Get camera model_editor = utils_viewport.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = utils_viewport.get_viewport_camera(model_editor) if cam_shp is None: LOG.error('Please select an active viewport to get a camera.') return if utils_camera.is_startup_cam(cam_shp) is True: LOG.error("Cannot create Markers in 'persp' camera.") return # Get transforms nodes = maya.cmds.ls( selection=True, long=True, type='transform', ) or [] if len(nodes) == 0: LOG.warning('Please select one or more transform nodes.') return mmapi.load_plugin() try: utils_viewport.viewport_turn_off() # Compute the Marker Data. start_frame, end_frame = utils_time.get_maya_timeline_range_outer() mkr_data_list = lib.convert_nodes_to_marker_data_list( cam_tfm, cam_shp, nodes, start_frame, end_frame, ) # Get Camera cam = mmapi.Camera(shape=cam_shp) # Get or create Marker Group. mkr_grp = None mkr_grp_nodes = maya.cmds.ls( cam_tfm, dag=True, long=True, type='mmMarkerGroupTransform') or [] mkr_grp_nodes = sorted(mkr_grp_nodes) if len(mkr_grp_nodes) == 0: mkr_grp = mmapi.MarkerGroup().create_node(cam=cam) else: mkr_grp = mmapi.MarkerGroup(node=mkr_grp_nodes[0]) # Create Marker nodes mkr_list = mayareadfile.create_nodes( mkr_data_list, cam=cam, mkr_grp=mkr_grp, with_bundles=True, ) mkr_nodes = [mkr.get_node() for mkr in mkr_list] finally: utils_viewport.viewport_turn_on() if len(mkr_nodes) > 0: maya.cmds.select(mkr_nodes, replace=True) return
def main(): """ Screen-Space Bake. Usage: 1) Select transform nodes. 2) Activate viewport. 3) Run tool. 4) A new locator is created under the active camera """ mmapi.load_plugin() editor = viewport_utils.get_active_model_editor() if editor is None: LOG.error('Please select an active viewport; editor=%r', editor) return cam_tfm, cam_shp = viewport_utils.get_viewport_camera(editor) if cam_tfm is None or cam_shp is None: LOG.error('Please select a camera; cam_tfm=%r cam_shp=%r', cam_tfm, cam_shp) return cam = mmapi.Camera(transform=cam_tfm, shape=cam_shp) img_width = maya.cmds.getAttr(cam_shp + '.horizontalFilmAperture') * 100.0 img_height = maya.cmds.getAttr(cam_shp + '.verticalFilmAperture') * 100.0 nodes = maya.cmds.ls( selection=True, long=True, type='transform' ) or [] if len(nodes) == 0: LOG.error('Please select transform nodes; %r', nodes) return start_frame, end_frame = utils_time.get_maya_timeline_range_inner() times = range(start_frame, end_frame+1) created_loc_tfms = [] for node in nodes: grp_node, depth_tfm, loc_tfm, loc_shp = lib.create_screen_space_locator(cam) created_loc_tfms.append(loc_tfm) # BUG: If a camera has 'camera scale' attribute set other than # 1.0, the reprojected values will not be correct. values = maya.cmds.mmReprojection( node, camera=(cam_tfm, cam_shp), time=times, asMarkerCoordinate=True, imageResolution=(int(img_width), int(img_height)), ) stop = len(values) step = 3 plug = loc_tfm + '.translateX' values_x = values[0:stop:step] animfn_x = anim_utils.create_anim_curve_node_apione( times, values_x, node_attr=plug ) plug = loc_tfm + '.translateY' values_y = values[1:stop:step] animfn_y = anim_utils.create_anim_curve_node_apione( times, values_y, node_attr=plug ) plug = depth_tfm + '.scaleX' values_z = values[2:stop:step] animfn_z = anim_utils.create_anim_curve_node_apione( times, values_z, node_attr=plug ) if len(created_loc_tfms) > 0: maya.cmds.select(created_loc_tfms, replace=True) # Trigger Maya to refresh. maya.cmds.currentTime(update=True) maya.cmds.refresh() return
def main(): """ Center the selected transform onto the camera view. .. todo:: - Allow 2D Center on selected vertices. - Support Stereo-camera setups (center both cameras, and ensure both have the same zoom). - Allow centering on multiple objects at once. We will center on the middle of all transforms. """ model_editor = viewport_utils.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = viewport_utils.get_viewport_camera(model_editor) if cam_shp is None: msg = 'Please select an active 3D viewport to get a camera.' LOG.warning(msg) return try: mmapi.set_solver_running(True) save_sel = maya.cmds.ls(selection=True, long=True) or [] # Get selection nodes = maya.cmds.ls( selection=True, long=True, type='transform', ) or [] # Filter out selected imagePlanes. nodes_tmp = list(nodes) nodes = [] for node in nodes_tmp: shps = maya.cmds.listRelatives( node, shapes=True, fullPath=True, type='imagePlane') or [] if len(shps) == 0: nodes.append(node) # Create centering node network. if len(nodes) == 0: msg = 'No objects selected, removing 2D centering.' LOG.warning(msg) mmapi.load_plugin() reproject_utils.remove_reprojection_from_camera(cam_tfm, cam_shp) reproject_utils.reset_pan_zoom(cam_tfm, cam_shp) elif len(nodes) == 1: msg = 'Applying 2D centering to %r' LOG.warning(msg, nodes) mmapi.load_plugin() reproj_nodes = reproject_utils.find_reprojection_nodes( cam_tfm, cam_shp) if len(reproj_nodes) > 0: maya.cmds.delete(reproj_nodes) reproj_node = reproject_utils.create_reprojection_on_camera( cam_tfm, cam_shp) reproject_utils.connect_transform_to_reprojection( nodes[0], reproj_node) elif len(nodes) > 1: msg = 'Please select only 1 node to center on.' LOG.error(msg) if len(save_sel) > 0: maya.cmds.select(save_sel, replace=True) finally: mmapi.set_solver_running(False) return
def main(): """ Create a new marker under the current viewport camera, or under the selected camera, if a camera is selected. """ mmapi.load_plugin() sel = maya.cmds.ls(sl=True, long=True) node_filtered = mmapi.filter_nodes_into_categories(sel) cams = node_filtered['camera'] cams = filter(utils_camera.is_not_startup_cam, cams) mkr_grps = node_filtered['markergroup'] cam = None mkr_grp = None if len(cams) > 0 and len(mkr_grps) > 0: msg = ('Please select a camera or marker group; ' 'both node types are selected.') LOG.error(msg) elif len(cams) == 0 and len(mkr_grps) == 0: # Create a Marker under the active viewport camera. model_editor = utils_viewport.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = utils_viewport.get_viewport_camera(model_editor) node = cam_shp if node is None: msg = 'Please select an active viewport to get a camera.' LOG.error(msg) return if utils_camera.is_startup_cam(node) is True: msg = "Cannot create Markers in 'persp' camera." LOG.error(msg) return if maya.cmds.nodeType(node) == 'transform': cam = mmapi.Camera(transform=node) elif maya.cmds.nodeType(node) == 'camera': cam = mmapi.Camera(shape=node) else: LOG.error('Camera node is invalid; %r', node) return elif len(cams) > 0 and len(mkr_grps) == 0: # Create a Marker under the selected camera. node = cams[0] if maya.cmds.nodeType(node) == 'transform': cam = mmapi.Camera(transform=node) elif maya.cmds.nodeType(node) == 'camera': cam = mmapi.Camera(shape=node) else: LOG.error('Camera node is invalid; %r', node) return elif len(cams) == 0 and len(mkr_grps) > 0: # Create a marker under the first selected Marker Group. node = mkr_grps[0] mkr_grp = mmapi.MarkerGroup(node=node) else: LOG.error('Should not get here.') bnd_name = mmapi.get_new_bundle_name('bundle1') bnd = mmapi.Bundle().create_node(name=bnd_name) mkr_name = mmapi.get_new_marker_name('marker1') mkr = mmapi.Marker().create_node(name=mkr_name, cam=cam, mkr_grp=mkr_grp, bnd=bnd) maya.cmds.select(mkr.get_node(), replace=True) return
def main(frame_range_mode=None, start_frame=None, end_frame=None, bundle_position_mode=None, delete_static_anim_curves=None): """ Convert all selected transforms into 2D markers under a camera. :param frame_range_mode: The type of frame range to use, see 'mmSolver.utils.constant.FRAME_RANGE_MODE_*_VALUE' for more details. :type frame_range_mode: FRAME_RANGE_MODE_*_VALUE :param start_frame: The first frame to start converting the transform to a Marker. :type start_frame: int or None :param end_frame: The last frame to end converting the transform to a Marker. :type end_frame: int or None :param bundle_position_mode: The position for the newly created Bundle (connected to the Marker). :type bundle_position_mode: None or BUNDLE_POSITION_MODE_* :param delete_static_anim_curves: When enabled, this will remove all keyframes from the bundle, if the bundle is not animated. :type delete_static_anim_curves: bool """ if frame_range_mode is None: value = configmaya.get_scene_option( const.CONFIG_FRAME_RANGE_MODE_KEY, default=const.DEFAULT_FRAME_RANGE_MODE) assert value in const.FRAME_RANGE_MODE_VALUES frame_range_mode = value if start_frame is None or end_frame is None: start_frame = configmaya.get_scene_option( const.CONFIG_FRAME_START_KEY, default=const.DEFAULT_FRAME_START) end_frame = configmaya.get_scene_option( const.CONFIG_FRAME_END_KEY, default=const.DEFAULT_FRAME_END) if bundle_position_mode is None: value = configmaya.get_scene_option( const.CONFIG_BUNDLE_POSITION_MODE_KEY, default=const.DEFAULT_BUNDLE_POSITION_MODE) bundle_position_mode = value if delete_static_anim_curves is None: value = configmaya.get_scene_option( const.CONFIG_DELETE_STATIC_ANIM_CURVES_KEY, default=const.DEFAULT_DELETE_STATIC_ANIM_CURVES) delete_static_anim_curves = value # Frame range time_utils.get_frame_range(frame_range_mode, start_frame=start_frame, end_frame=end_frame) # Get camera model_editor = utils_viewport.get_active_model_editor() if model_editor is None: msg = 'Please select an active 3D viewport.' LOG.warning(msg) return cam_tfm, cam_shp = utils_viewport.get_viewport_camera(model_editor) if cam_shp is None: LOG.error('Please select an active viewport to get a camera.') return if utils_camera.is_startup_cam(cam_shp) is True: LOG.error("Cannot create Markers in 'persp' camera.") return # Get transforms tfm_nodes = maya.cmds.ls( selection=True, long=True, type='transform', ) or [] if len(tfm_nodes) == 0: LOG.warning('Please select one or more transform nodes.') return # Must ensure the plug-in is loaded, otherwise we won't have all # the functionality required. mmapi.load_plugin() with tools_utils.tool_context(pre_update_frame=True): mkr_nodes, bnd_nodes = lib.create_markers_from_transforms( cam_tfm, cam_shp, tfm_nodes, start_frame, end_frame, bundle_position_mode, delete_static_anim_curves) if len(mkr_nodes) > 0: maya.cmds.select(mkr_nodes, replace=True) return