Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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
Beispiel #14
0
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
Beispiel #15
0
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
Beispiel #16
0
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