Example #1
0
    def doIt(self, args):
        # gather the values from args
        argParser = om.MArgParser(self.syntax(), args)

        plugString = argParser.commandArgumentString(0)
        sel = om.MSelectionList()
        sel.add(plugString)
        self.plug = sel.getPlug(0)

        attributeMObj = self.plug.attribute()
        fnAttr = om.MFnAttribute(attributeMObj)
        if fnAttr.affectsWorldSpace:
            self.modifier = om.MDGModifier()
            # self.modifier = om.MDagModifier()
        else:
            self.modifier = om.MDGModifier()

        if not self.plug.source().isNull:
            self.displayError('{} is connected and cannot be set.'.format(
                self.plug.name()))
            return

        if argParser.isFlagSet('double') or argParser.isFlagSet('d'):
            self.plugType = 'double'
            self.value = argParser.flagArgumentDouble('d', 0)
            self.redoIt()

        elif argParser.isFlagSet('boolean') or argParser.isFlagSet('b'):
            self.plugType = 'boolean'
            self.value = argParser.flagArgumentBool('b', 0)
            self.redoIt()

        elif argParser.isFlagSet('string') or argParser.isFlagSet('s'):
            self.plugType = 'string'
            self.value = argParser.flagArgumentString('s', 0)
            self.redoIt()

        elif argParser.isFlagSet('float') or argParser.isFlagSet('f'):
            self.plugType = 'float'
            self.value = argParser.flagArgumentFloat('f', 0)
            self.redoIt()

        elif argParser.isFlagSet('int') or argParser.isFlagSet('i'):
            self.plugType = 'int'
            self.value = argParser.flagArgumentInt('i', 0)
            self.redoIt()

        elif argParser.isFlagSet('angle') or argParser.isFlagSet('a'):
            self.plugType = 'angle'
            self.value = argParser.flagArgumentMAngle('a', 0)
            self.redoIt()
Example #2
0
 def _buildCmd(self):
     dgMod = None
     if self._imported != self._node.getImportedStatus():
         if self._imported is None or not self._imported:
             if self._node._hasImportedPlug():
                 dgMod = OpenMaya.MDGModifier()
                 dgMod.removeAttribute(
                     self._node.thisMObject(),
                     self._node._getImportedPlug().attribute())
         else:
             attr = OpenMaya.MFnNumericAttribute().create(jsonTranslatorGlobals.IMPORTED_ATTRIBUTE_NAME, \
                         _IMPORTED_ATTRIBUTE_SHORT_NAME, OpenMaya.MFnNumericData.kBoolean, self._imported)
             dgMod = OpenMaya.MDGModifier()
             dgMod.addAttribute(self._node.thisMObject(), attr)
     return dgMod
Example #3
0
def removeElementPlug(plug, elementNumber, mod=None, apply=False):
    """Functional wrapper for removing a element plug(multiinstance)

    :param plug: The plug array object
    :type plug: om2.MPlug
    :param elementNumber: the element number
    :type elementNumber: int
    :param mod: If None then a om2.MDGModifier object will be created and returned else the one thats passed will be used.
    :type mod: om2.MDGModifier or None
    :param apply: If False then mod.doIt() will not be called, it is the clients reponsiblity to call doIt,
                useful for batch operations.
    :type apply: bool
    :return: The MDGModifier instance which contains the operation stack.
    :rtype: om2.MDGModifier
    """
    # keep the compound plug unlocked for elements to be deleted
    with setLockedContext(plug):
        mod = mod or om2.MDGModifier()
        # make sure the client has passed an invalid elementIndex.
        if elementNumber in plug.getExistingArrayAttributeIndices():
            # add the op to the stack and let maya handle connections for us.
            mod.removeMultiInstance(plug.elementByLogicalIndex(elementNumber),
                                    True)
        # allow the user to batch delete elements if apply is False, this is more efficient.
        if apply:
            try:
                mod.doIt()
            except RuntimeError:
                logger.error(
                    "Failed to remove element: {} from plug: {}".format(
                        str(elementNumber), plug.name()),
                    exc_info=True)
                raise
    return mod
 def createWarp(self, *args):
     terrain = mc.textFieldGrp(self.m_warpTerrainText, query=True, tx=True)
     if (terrain == "") or (self.warpControlPoints == []):
         print "Error. Missing info for the input objects"
     else:
         nodeName = mc.textFieldGrp(self.m_warpNameTextField,
                                    query=True,
                                    tx=True)
         if nodeName == "":
             nodeName = "WarpNode"
         maxCPRadius = mc.floatSliderGrp(self.m_warpMaxRadius,
                                         query=True,
                                         value=True)
         # Create the warp node
         dgModifier = om.MDGModifier()
         warpNode = dgModifier.createNode("WarpNode")
         # Get the name of the node
         dgModifier.doIt()
         nodeName = om.MFnDependencyNode(warpNode).name()
         # Connect the terrain
         mc.connectAttr(terrain + ".worldMesh[0]", nodeName + ".terrain")
         # Set the max radius
         mc.setAttr(nodeName + ".maxRadius", maxCPRadius)
         # Connect all of the control points
         numControlPoints = len(self.warpControlPoints)
         for i in range(numControlPoints):
             mc.connectAttr(self.warpControlPoints[i] + ".translate",
                            nodeName + ".controlPoints[" + str(i) + "]")
             mc.connectAttr(
                 self.warpControlPoints[i] + ".translate",
                 nodeName + ".controlPointsOriginal[" + str(i) + "]")
             mc.disconnectAttr(
                 self.warpControlPoints[i] + ".translate",
                 nodeName + ".controlPointsOriginal[" + str(i) + "]")
Example #5
0
def addCompoundAttribute(node, longName, shortName, attrMap, isArray=False):
    """

    :param node: the node to add the compound attribute too.
    :type node: om2.MObject
    :param longName: the compound longName
    :type longName: str
    :param shortName: the compound shortName
    :type shortName: str
    :param attrMap: [{"name":str, "type": attrtypes.kType, "isArray": bool}]
    :type attrMap: list(dict())
    :return: the MObject attached to the compound attribute
    :rtype: om2.MObject
    ::example:
    >>>attrMap = [{"name":"something", "type": attrtypes.kMFnMessageAttribute, "isArray": False}]
    >>> print attrMap
    # result <OpenMaya.MObject object at 0x00000000678CA790> #
    """
    compound = om2.MFnCompoundAttribute()
    compObj = compound.create(longName, shortName)
    compound.array = isArray
    for attrData in attrMap:
        child = addAttribute(node, shortName=attrData["name"], longName=attrData["name"], attrType=attrData["type"],
                             isArray=attrData["isArray"], apply=False)
        compound.addChild(child.object())
    mod = om2.MDGModifier()
    mod.addAttribute(node, compObj)
    mod.doIt()
    return compObj
Example #6
0
def connectWithDecompMtx(srcMobj, trgMobj):
    """
    Connect and two DAG nodes using matrixDecompose
    :param srcMobj: MObject
    :param trgMobj: MObject
    :return: None
    """
    assert srcMobj, "Please select a source"
    assert trgMobj, "Please select a target"

    dgMod = om2.MDGModifier()
    srcMFn = om2.MFnDependencyNode(srcMobj)
    trgMFn = om2.MFnDependencyNode(trgMobj)

    decompMobj = cUtils.createDGNode(tConst.DECOMPOSEMATRIX, nodeName="")

    srcPlug = srcMFn.findPlug("worldMatrix", False)
    srcWorldMtxPlug = srcPlug.elementByLogicalIndex(0)

    decompMfn = om2.MFnDependencyNode(decompMobj)
    decompMfnPlug = decompMfn.findPlug("inputMatrix", False)

    for srcAttr, trgAttr in [("outputRotate", "rotate"),
                             ("outputTranslate", "translate"),
                             ("outputScale", "scale")]:
        srcPlug = decompMfn.findPlug(srcAttr, False)
        trgPlug = trgMFn.findPlug(trgAttr, False)
        dgMod.connect(srcPlug, trgPlug)

    dgMod.connect(srcWorldMtxPlug, decompMfnPlug)

    dgMod.doIt()
Example #7
0
 def unapply(self):
     """ Restore the override. """
     dgMod = OpenMaya.MDGModifier()
     for applyNode in self.getApplyOverrides():
         applyNode.extract()
         dgMod.deleteNode(applyNode.thisMObject())
     dgMod.doIt()
 def redoIt(self):
     # Create a dg modifier
     dgModifier = om.MDGModifier()
     # Create the river node
     self.riverNode = dgModifier.createNode("RiverNode")
     dgModifier.renameNode(self.riverNode, self.name)
     # Get the name of the node
     dgModifier.doIt()
     nodeName = om.MFnDependencyNode(self.riverNode).name()
     # Create the loft node
     self.loftNode = dgModifier.createNode("loft")
     dgModifier.renameNode(self.loftNode, nodeName + "Loft")
     # Create the nurbs tesselate node
     self.nurbsTesselateNode = dgModifier.createNode("nurbsTessellate")
     dgModifier.renameNode(self.nurbsTesselateNode,
                           nodeName + "NurbsTesselate")
     # Execute the dg modifier queues to create the nodes
     dgModifier.doIt()
     # Connect attributes
     mc.connectAttr(self.curve + ".worldSpace[0]", nodeName + ".inputCurve")
     mc.connectAttr(self.mesh + ".outMesh", nodeName + ".terrain")
     mc.connectAttr(nodeName + ".curveL", nodeName + "Loft.inputCurve[0]")
     mc.connectAttr(nodeName + ".curveB", nodeName + "Loft.inputCurve[1]")
     mc.connectAttr(nodeName + ".curveR", nodeName + "Loft.inputCurve[2]")
     mc.connectAttr(nodeName + "Loft.outputSurface",
                    nodeName + "NurbsTesselate.inputSurface")
     # Set the nurbs tesselate to quads
     mc.setAttr(nodeName + "NurbsTesselate.polygonType", 1)
Example #9
0
def getContainerHyperLayout(container, create=True):
    """
    Gets the hyperlayout that is connected to the container. If the container has not got one, and create is set to True,
    a hyperlayout will be created and joined to the container.

    @param MObject container: The container object that you want to return its hyperlayout.
    @return: The hyperlayout connected to the container
    @rtype: MObject
    """
    _dgContainer = om2.MFnDependencyNode(container)
    _hyperLPlug = _dgContainer.findPlug('hyperLayout', True)
    _hyperLayoutMo = None
    # check if container has a hyperlayout, is not creates one
    if not _hyperLPlug.isConnected and not _hyperLPlug.isDestination:
        if create:
            _dgMod = om2.MDGModifier()
            _hyperLayoutMo = _dgMod.createNode('hyperLayout')
            _dgMod.doIt()
            _hyperLayoutMfn = om2.MFnDependencyNode(_hyperLayoutMo)
            _hyperLayoutMfn.setName(_dgContainer.name() + "_hyperLayout")

            _dgMod.connect(_hyperLayoutMfn.findPlug("message", True), _hyperLPlug)
            _dgMod.doIt()
    else:
        _hyperLayoutMo = _hyperLPlug.source().node()

    return _hyperLayoutMo
Example #10
0
def disconnectPlug(plug, source=True, destination=True, modifier=None):
    """Disconnect the plug connections, if 'source' is True and the 'plug' is a destination then disconnect the source
    from this plug. If 'destination' True and plug is a source then disconnect this plug from the destination.
    This function will also lock the plugs otherwise maya raises an error

    :param plug: the plug to disconnect
    :type plug: om2.MPlug
    :param source: if true disconnect from the connected source plug if it has one
    :type source: bool
    :param destination: if true disconnect from the connected destination plug if it has one
    :type destination: bool
    :return: True if succeed with the disconnection
    :rtype: bool
    :raises: maya api error
    """
    if plug.isLocked:
        plug.isLocked = False
    mod = modifier or om2.MDGModifier()
    if source and plug.isDestination:
        sourcePlug = plug.source()
        if sourcePlug.isLocked:
            sourcePlug.isLocked = False
        mod.disconnect(sourcePlug, plug)
    if destination and plug.isSource:
        for conn in plug.destinations():
            if conn.isLocked:
                conn.isLocked = False
            mod.disconnect(plug, conn)
    if not modifier:
        mod.doIt()
    return True, mod
Example #11
0
def addToContainer(mobj, containerObj):
    """
    Add an object to a container.
    @param mobj: Object you wish to add to the container
    @param om2.MObject containerObj: container that have the object added to it
    """
    _hyperLayoutDG = getContainerHyperLayout(containerObj)
    _hyperLayoutMfn = om2.MFnDependencyNode(_hyperLayoutDG)
    _hyperLayoutMessagePlug = _hyperLayoutMfn.findPlug('hyperPosition', True)
    _nextPlugIndex = _hyperLayoutMessagePlug.numElements()

    _dagMod = om2.MDGModifier()
    _mfnNode = om2.MFnDependencyNode()

    _hyperposPlug = _hyperLayoutMessagePlug.elementByLogicalIndex(_nextPlugIndex)
    _availableDependNodePlug = node.getNextAvailablePlugInPlug(_hyperposPlug, 'dependNode')
    print("NEXT AVAILABLE dependNode : {0}".format(_availableDependNodePlug))

    _mfnNode.setObject(mobj)
    _msgPlug = _mfnNode.findPlug('message', True)
    _badConnection = node.isSourceConnectedTo(_msgPlug, nodeType='hyperLayout')
    # TODO: check if you are trying to add the object to the container it is already added to
    if _availableDependNodePlug and not _badConnection:
        _dagMod.connect(_msgPlug, _availableDependNodePlug)
        _dagMod.doIt()
        _nextPlugIndex += 1
    else:
        print("ERROR: Object not added to container!")
def _setSkinInputData(inPoints, skinCluster):
    fn = om.MFnDependencyNode(skinCluster)
    inputPlug = fn.findPlug("input", True).elementByLogicalIndex(0).child(0)
    meshPlug = inputPlug.source()
    if meshPlug.isNull:
        return

    mesh = meshPlug.asMObject()
    fnMesh = om.MFnMesh(mesh)

    # this probably isnt the best way to do this, but it works fine
    fnMesh.copy(mesh)
    fnMesh.setPoints(inPoints, om.MSpace.kObject)
    outMeshPlug = fnMesh.findPlug('outMesh', True)

    source = _detachInputObjectFromSkin(skinCluster)

    dgMod = om.MDGModifier()
    dgMod.connect(outMeshPlug, inputPlug)
    dgMod.doIt()

    posePoints = _getMeshDataPoints(_getSkinOutMeshData(skinCluster))
    _attachInputObjectToSkin(source, skinCluster)

    p = fnMesh.parent(0)

    # I dont know why the api crashes when trying to delete 'p'
    cmds.delete(om.MDagPath.getAPathTo(p).fullPathName())

    return posePoints
Example #13
0
 def doIt(self, nodes=None):
     modifier = om2.MDGModifier()
     for n, name in iter(nodes):
         modifier.renameNode(n.object(), name)
     modifier.doIt()
     self._modifier = modifier
     return nodes
Example #14
0
def deleteNode(node):
    """
    Delete the node that is passed in
    @param node:
    """
    _dgMod = om2.MDGModifier()
    _dgMod.deleteNode(node)
    _dgMod.doIt()
Example #15
0
 def execute(node, attribute):
     AddDynamicAttribute.node = node
     AddDynamicAttribute.attribute = attribute
     AddDynamicAttribute.mdgModifier = OpenMaya.MDGModifier()
     cmds.addDynamicAttribute()
     AddDynamicAttribute.node = None
     AddDynamicAttribute.attribute = None
     AddDynamicAttribute.mdgModifier = None
Example #16
0
def rename(mobject, newName):
    """Renames the given mobject node, this is undoable

    :param mobject: MObject
    :param newName: str
    """
    dag = om2.MDGModifier()
    dag.renameNode(mobject, newName)
    dag.doIt()
def _attachInputObjectToSkin(inPlug, skinCluster):
    dgMod = om.MDGModifier()
    fn = om.MFnDependencyNode(skinCluster)
    inDataPlug = fn.findPlug("input", True).elementByLogicalIndex(0).child(0)
    src = inDataPlug.source()
    if not src.isNull:
        dgMod.disconnect(src, inDataPlug)
    dgMod.connect(inPlug, inDataPlug)
    dgMod.doIt()
 def undoIt(self):
     # Create a dg and dag modifier
     dgModifier = om.MDGModifier()
     # Delete the nodes
     dgModifier.deleteNode(self.riverNode)
     dgModifier.deleteNode(self.loftNode)
     dgModifier.deleteNode(self.nurbsTesselateNode)
     # Execute the dag and dg modifier queues
     dgModifier.doIt()
Example #19
0
 def __init__(self):
     om2.MPxCommand.__init__(self)
     self.dagModifier = om2.MDagModifier()
     self.dgModifier = om2.MDGModifier()
     self.selList = om2.MSelectionList()
     self.matchScale = True
     self.matchRotation = True
     self.matchTranslation = True
     self.origTransforms = []
Example #20
0
    def __init__(self):
        super(NodeConvertCmd, self).__init__()
        self.undo = True
        self.modi = api2.MDGModifier()

        self.new_src_dest_items = ct.LinkedList()
        self.old_src_dest_items = ct.LinkedList()
        self.connected_attrs = ct.LinkedList()
        self.plugs = None
Example #21
0
def createMesh(pointArray=((0, 0, -2.5), (5, 0, -2.5), (8, 0, 0), (5, 0, 2.5),
                           (0, 0, 2.5)),
               polygons=(4, 3),
               polyConects=(4, 3, 1, 0, 3, 2, 1)):
    """
    TODO: Return transform
    Create a mesh with initialShadingGroup conected
    Args:
        pointArray: Vertex positions by index
        polygons: Number of vertex per face index
        polyConects: Index vertices that define a polygon

    Returns:
        MObject with the mesh
        MDagPAth transform
    """
    # get initial shading group
    mselectionList = OpenMaya.MSelectionList()
    mselectionList.add('initialShadingGroup')

    shadingGrp_MObj = mselectionList.getDependNode(0)
    shadingGrp_MFn = OpenMaya.MFnDependencyNode(shadingGrp_MObj)
    shGrpPlug = shadingGrp_MFn.findPlug('dagSetMembers', True)
    shGrpPlugNumElements = shGrpPlug.evaluateNumElements()
    logger.debug('createMesh: %s num elements: %s' %
                 (shGrpPlug.name(), shGrpPlugNumElements))
    # documentation: get the free element of the attr array

    existingIndices = set(shGrpPlug.getExistingArrayAttributeIndices())
    rangeExistingIndices = set(range(len(existingIndices) + 1))
    rangeExistingIndices.difference_update(existingIndices)
    shGrpPlugElement = shGrpPlug.elementByLogicalIndex(
        rangeExistingIndices.pop())
    logger.debug('createMesh: %s is element: %s' %
                 (shGrpPlugElement.name(), shGrpPlugElement.isElement))

    # create Mesh function to operate with polygonal meshes
    mFnMesh = OpenMaya.MFnMesh()

    # vertices
    mPointArray = OpenMaya.MPointArray(pointArray)

    # polyConnects. is important the order for the face normal, antihorario
    # create mesh
    mesh_Object = mFnMesh.create(mPointArray, polygons, polyConects)
    transform_Obj = OpenMaya.MDagPath().getAPathTo(mesh_Object)

    meshPlug = mFnMesh.findPlug('instObjGroups', False)
    meshPlugElement = meshPlug.elementByLogicalIndex(meshPlug.numElements())

    # connect attribute
    mdgModifier = OpenMaya.MDGModifier()
    mdgModifier.connect(meshPlugElement, shGrpPlugElement)
    mdgModifier.doIt()

    return mesh_Object, transform_Obj
Example #22
0
def deleteApplyOverrideChain(last):
    '''Delete a chain of apply override nodes.

    The argument is the last apply override node in the chain.'''

    aoObjs = [ao.thisMObject() for ao in ApplyConnectionOverride.reverseGenerator(last)]
    dgMod = OpenMaya.MDGModifier()
    for obj in aoObjs:
        dgMod.deleteNode(obj)
    dgMod.doIt()
def _detachInputObjectFromSkin(skinCluster):
    fn = om.MFnDependencyNode(skinCluster)
    inDataPlug = fn.findPlug("input", True).elementByLogicalIndex(0).child(0)
    meshPlug = inDataPlug.source()
    if meshPlug.isNull:
        return
    dgMod = om.MDGModifier()
    dgMod.disconnect(meshPlug, inDataPlug)
    dgMod.doIt()
    return om.MPlug(meshPlug)
Example #24
0
 def renameAttribute(self, name, newName):
     try:
         plug = self._mfn.findPlug(name, False)
     except RuntimeError:
         raise AttributeError("No attribute named {} on metaNode->{}".format(name, self.fullPathName()))
     with plugs.setLockedContext(plug):
         mod = om2.MDGModifier()
         mod.renameAttribute(self.mobject(), plug.attribute(), newName, newName)
         mod.doIt()
     return True
Example #25
0
 def disconnectPlugFromNode(self, source, node):
     for i in source.destinations():
         if i.node() == node:
             mod = om2.MDGModifier()
             mod.disconnect(source, i)
             mod.doIt()
             mod.removeAttribute(i.node(), i.attribute())
             mod.doIt()
             return True
     return False
Example #26
0
 def __exit__(self, exc_type, exc_val, exc_tb):
     mod = om2.MDGModifier()
     weightPlug = self.blendshapeNode.findPlug("weight", False)
     for plugIdx, value, in self.plugs:
         mod.newPlugValueFloat(weightPlug.elementByLogicalIndex(plugIdx),
                               value)
     for connectedPlug in self.connectedPlugs:
         for source in connectedPlug[1]:
             mod.connect(source, connectedPlug[0])
     mod.doIt()
	def undoIt(self):
		dgModifier = om.MDGModifier()
		dagModifier = om.MDagModifier()
		dgModifier.deleteNode(self.caveNode)
		dgModifier.deleteNode(self.loftNode)
		dgModifier.deleteNode(self.loftTessellateNode)
		dgModifier.deleteNode(self.planarNode)
		dgModifier.deleteNode(self.planarTesselateNode)
		dagModifier.deleteNode(self.loftMeshTransformNode)
		dgModifier.doIt()
		dagModifier.doIt()
Example #28
0
 def removeAllParents(self):
     parentPlug = self._mfn.findPlug(MPARENT_ATTR_NAME, False)
     mod = om2.MDGModifier()
     with plugs.setLockedContext(parentPlug):
         for index in iter(parentPlug.getExistingArrayAttributeIndices()):
             childrenElement = parentPlug.elementByLogicalIndex(index)
             if childrenElement.isConnected:
                 mod.disconnect(childrenElement.source(), childrenElement)
                 mod.removeMultiInstance(childrenElement, False)
     mod.doIt()
     return True
    def undoIt(self):
        if len(self.transformNodesList) == 0 and len(
                self.inputComponentsList) == 0:
            return

        for i in range(len(self.transformNodesList)):
            MSelectionList = OpenMaya.MSelectionList()
            MSelectionList.add(self.transformNodesList[i])
            MSelectionList.add(self.inputMeshList[i])

            MTransformNodeObj = MSelectionList.getDependNode(0)
            MInputMeshObj = MSelectionList.getDependNode(1)
            inputComponentsListStr = self.inputComponentsList[i]

            inputMeshDGFn = OpenMaya.MFnDependencyNode(MInputMeshObj)

            # Creates poseScope Node
            poseScopeDagNodeFn = OpenMaya.MFnDagNode()
            poseScopeDagNodeObj = poseScopeDagNodeFn.create('mnt_poseScope')
            poseScopeNodePath = OpenMaya.MFnDagNode(
                poseScopeDagNodeObj).getPath().extendToShape()
            poseScopeNode = OpenMaya.MFnDependencyNode(
                poseScopeNodePath.node())
            poseScopeNode.findPlug('colorR', False).setDouble(1.0)
            poseScopeNode.findPlug('colorG', False).setDouble(0.75)
            poseScopeNode.findPlug('colorB', False).setDouble(0.0)
            poseScopeNode.findPlug('opacity', False).setFloat(0.1)
            # ______________________

            # Parents poseScope shape to transformNode
            transformDagNode = OpenMaya.MFnDagNode(MTransformNodeObj)
            transformDagNode.addChild(poseScopeNodePath.node(), 0, False)
            OpenMaya.MGlobal.deleteNode(poseScopeDagNodeObj)
            # ________________________________________

            # Recreates group Node
            DGModifier = OpenMaya.MDGModifier()
            groupNodeObj = DGModifier.createNode('mnt_groupNode')
            groupNodeDGNode = OpenMaya.MFnDependencyNode(groupNodeObj)
            groupNodeDGNode.findPlug('mode', False).setInt(1)
            groupNodeDGNode.findPlug('componentsList', False).setString(
                self.inputComponentsList[i])
            # ____________________

            # Creates node connections
            DGModifier.connect(
                groupNodeDGNode.findPlug('outputsComponent', False),
                poseScopeNode.findPlug('inputFaceComponents', False))
            DGModifier.connect(inputMeshDGFn.findPlug('outMesh', False),
                               poseScopeNode.findPlug('inputMesh', False))
            DGModifier.doIt()
            # ________________________

        return
Example #30
0
 def removeParent(self):
     parent = self.metaParent()
     if parent is None:
         return False
     mod = om2.MDGModifier()
     source = parent.findPlug(MCHILDREN_ATTR_NAME, False)
     destination = self.findPlug(MPARENT_ATTR_NAME, False)
     with plugs.setLockedContext(source):
         destination.isLocked = False
         mod.disconnect(source, destination)
         mod.doIt()
     return True