示例#1
0
    def test_get_as_dag_path(self):
        node = maya.cmds.createNode('transform', name='myNode1')
        node_dag = node_utils.get_as_dag_path(node)
        node = node_dag.fullPathName()
        self.assertEqual(node, '|myNode1')
        self.assertEqual(node_dag.partialPathName(), 'myNode1')

        chd1 = maya.cmds.createNode('transform', name='myNode1', parent=node)
        chd1_dag = node_utils.get_as_dag_path(chd1)
        chd1 = chd1_dag.fullPathName()
        self.assertEqual(chd1, '|myNode1|myNode1')
        self.assertEqual(chd1, chd1_dag.partialPathName())
        self.assertEqual(node_dag.childCount(), 1)

        chd2 = maya.cmds.createNode('transform', name='myNode1', parent=chd1)
        chd2_dag = node_utils.get_as_dag_path(chd2)
        chd2 = chd2_dag.fullPathName()
        self.assertEqual(chd2, '|myNode1|myNode1|myNode1')
        self.assertEqual(chd2, chd2_dag.partialPathName())
        self.assertEqual(node_dag.childCount(), 1)
        self.assertEqual(chd1_dag.childCount(), 1)

        chd3 = maya.cmds.createNode('transform', name='myChild1', parent=node)
        chd3_dag = node_utils.get_as_dag_path(chd3)
        chd3 = chd3_dag.fullPathName()
        self.assertEqual(chd3, '|myNode1|myChild1')
        self.assertEqual(chd3_dag.partialPathName(), 'myChild1')
        self.assertEqual(node_dag.childCount(), 2)

        node2 = maya.cmds.createNode('transform', name='myChild1')
        node2_dag = node_utils.get_as_dag_path(node2)
        node2 = node2_dag.fullPathName()
        self.assertEqual(node2, '|myChild1')
        self.assertEqual(node2_dag.partialPathName(), '|myChild1')
        self.assertEqual(node2_dag.childCount(), 0)
示例#2
0
    def set_shape_node(self, name):
        """
        Change the underlying Maya nodes that this Camera class will
        manipulate.

        This function will automatically set the Camera transform node
        based this shape node.

        :param name: The existing Maya node.
        :type name: str
        """
        assert isinstance(name, pycompat.TEXT_TYPE)
        assert maya.cmds.objExists(name)

        self._mfn_tfm = None
        self._mfn_shp = None

        shp_dag = node_utils.get_as_dag_path(name)
        if shp_dag is not None:
            assert shp_dag.apiType() in const.CAMERA_SHAPE_NODE_API_TYPES

            # Get transform from shape.
            tfm_dag = node_utils.get_as_dag_path(name)
            tfm_dag.pop(1)
            assert tfm_dag.apiType() in const.CAMERA_TRANSFORM_NODE_API_TYPES

            self._mfn_shp = OpenMaya.MFnDagNode(shp_dag)
            self._mfn_tfm = OpenMaya.MFnDagNode(tfm_dag)

        if self._mfn_tfm is None or self._mfn_shp is None:
            self._mfn_tfm = OpenMaya.MFnDagNode()
            self._mfn_shp = OpenMaya.MFnDagNode()

        return
示例#3
0
    def set_shape_node(self, name):
        """
        Change the underlying Maya nodes that this Camera class will
        manipulate.

        This function will automatically set the Camera transform node
        based this shape node.

        :param name: The existing Maya node.
        :type name: str
        """
        assert isinstance(name, (str, unicode))
        assert maya.cmds.objExists(name)

        self._mfn_tfm = None
        self._mfn_shp = None

        shp_dag = node_utils.get_as_dag_path(name)
        if shp_dag is not None:
            assert shp_dag.apiType() == OpenMaya.MFn.kCamera

            # Get transform from shape.
            tfm_dag = node_utils.get_as_dag_path(name)
            tfm_dag.pop(1)
            assert tfm_dag.apiType() == OpenMaya.MFn.kTransform

            self._mfn_shp = OpenMaya.MFnDagNode(shp_dag)
            self._mfn_tfm = OpenMaya.MFnDagNode(tfm_dag)

        if self._mfn_tfm is None or self._mfn_shp is None:
            self._mfn_tfm = OpenMaya.MFnDagNode()
            self._mfn_shp = OpenMaya.MFnDagNode()

        return
示例#4
0
    def __init__(self, node=None, name=None):
        """
        Initialize a Marker, give a name to connect to an existing Maya node.

        :param node: The Maya node to connect to.
        :type node: None or str

        :param name: This is a backwards compatible kwarg for 'node'.
        :type name: None or str
        """
        if name is not None:
            msg = ("mmSolver.api.Marker(name=value), "
                   "'name' is a deprecated flag, use 'node' ")
            warnings.warn(msg)
            node = name
        if isinstance(node, basestring):
            try:
                dag = node_utils.get_as_dag_path(node)
                self._mfn = OpenMaya.MFnDagNode(dag)
            except RuntimeError as e:
                msg = 'Given Marker node name is invalid: name=%r'
                LOG.error(msg, node)
                raise e

            # Set icon
            _set_marker_icon(dag)

            # Ensure the deviation attribute exists.
            self.add_attributes()
        else:
            self._mfn = OpenMaya.MFnDagNode()
        self._MFnAnimCurve_deviation = None
        self.set_deviation_anim_curve_fn(None)
        return
示例#5
0
    def set_transform_node(self, name):
        """
        Change the underlying Maya nodes that this Camera class will
        manipulate.

        This function will automatically set the Camera shape node based
        this transform node.

        :param name: The existing Maya node.
        :type name: str
        """
        assert isinstance(name, (str, unicode))
        assert maya.cmds.objExists(name)

        self._mfn_tfm = None
        self._mfn_shp = None

        tfm_dag = node_utils.get_as_dag_path(name)
        if tfm_dag is not None:
            assert tfm_dag.apiType() in const.CAMERA_TRANSFORM_NODE_API_TYPES

            # Get camera shape from transform.
            dag = node_utils.get_as_dag_path(name)
            num_children = dag.childCount()
            if num_children > 0:
                for i in range(num_children):
                    child_obj = dag.child(i)
                    if child_obj.apiType(
                    ) in const.CAMERA_SHAPE_NODE_API_TYPES:
                        dag.push(child_obj)
                        self._mfn_shp = OpenMaya.MFnDagNode(dag)
                        break

            self._mfn_tfm = OpenMaya.MFnDagNode(tfm_dag)

        if self._mfn_tfm is None or self._mfn_shp is None:
            self._mfn_tfm = OpenMaya.MFnDagNode()
            self._mfn_shp = OpenMaya.MFnDagNode()
        return
示例#6
0
    def __init__(self, node=None):
        """
        Create a Bundle object initialised with 'node'.

        :param node: Maya node to attach this object to.
        :type node: str
        """
        if node is not None:
            assert isinstance(node, (str, unicode))
            assert maya.cmds.objExists(node)
            dag = node_utils.get_as_dag_path(node)
            if dag is not None:
                self._mfn = OpenMaya.MFnDagNode(dag)
        else:
            self._mfn = OpenMaya.MFnDagNode()
        return
示例#7
0
    def set_node(self, node):
        """
        Change the underlying Maya node that this Marker class will manipulate.

        :param node: The existing Maya node.
        :type node: str
        """
        assert isinstance(node, (str, unicode))
        dag = node_utils.get_as_dag_path(node)
        try:
            self._mfn = OpenMaya.MFnDagNode(dag)
        except RuntimeError:
            raise
        # Ensure the deviation attribute exists.
        self.add_attributes()
        return
示例#8
0
    def set_node(self, node):
        """
        This Bundle object will affect the given 'node'.

        :param node: Node to set to.
        :type node: str

        :return: Nothing.
        """
        assert isinstance(node, (str, unicode))
        assert maya.cmds.objExists(node)
        dag = node_utils.get_as_dag_path(node)
        if dag is not None:
            self._mfn = OpenMaya.MFnDagNode(dag)
        else:
            self._mfn = OpenMaya.MFnDagNode()
        return
    def set_node(self, node):
        """
        Set the MarkerGroup to use this Maya node.

        :param node: Maya node path.
        :type node: str
        """
        assert isinstance(node, pycompat.TEXT_TYPE)
        assert maya.cmds.objExists(node)
        assert api_utils.get_object_type(node) == const.OBJECT_TYPE_MARKER_GROUP

        self._mfn_tfm = None
        tfm_dag = node_utils.get_as_dag_path(node)
        if tfm_dag is not None:
            assert maya.cmds.nodeType(tfm_dag.fullPathName()) == 'mmMarkerGroupTransform'
            self._mfn_tfm = OpenMaya.MFnDagNode(tfm_dag)

        if self._mfn_tfm is None:
            self._mfn_tfm = OpenMaya.MFnDagNode()
        return
示例#10
0
def get_marker_group_above_node(node):
    """
    Get the first marker group transform node above the node.

    :param node: The node name to check above for a marker group.
    :type node: str or unicode

    :return: String of marker group found, or None.
    :rtype: str or unicode
    """
    # TODO: This function may be called many times, we should look
    # into caching some of this computation.
    mkr_grp_node = None
    dag = node_utils.get_as_dag_path(node)
    while dag.length() != 0:
        name = dag.fullPathName()
        if maya.cmds.nodeType(name) == 'mmMarkerGroupTransform':
            mkr_grp_node = name
            break
        dag.pop(1)
    return mkr_grp_node