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)
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
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
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
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
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
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
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
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