Ejemplo n.º 1
0
def ar_multiPointConstraint(maintainOffset, sel=None):
    """
    @ point constraint all selected item with last selected object.
    Args:
        maintainOffset (bool): set maintain offset on or off.
        sel (list): objects has to be constraint.

    Returns:
            bool.
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage('warning', 'no objects selected...')
        return False
    if maintainOffset:
        for i in range(len(sel) - 1):
            parentObj = sel[len(sel) - 1]
            cmds.pointConstraint(parentObj, sel[i], mo=True)
    else:
        for i in range(len(sel) - 1):
            parentObj = sel[len(sel) - 1]
            cmds.pointConstraint(parentObj, sel[i])
    ar_qui.ar_displayMessage('success', 'constraint done')
    return True
Ejemplo n.º 2
0
def ar_addScrunch(attribute, controllers, axis='ry'):
    """
    @ add scrunch connections on controllers upper group.
    Args:
        attribute (str): attribute with object name.
        controllers (list): list of one finger controllers in order of start to end.
        axis (str): sample of axis, 'rx' or 'ry' or 'rz'.

    Returns:
            bool.
    """
    for a in range(len(controllers)):
        controllers[a] = pm.PyNode(controllers[a])
        if a == 0:
            pma = pm.createNode('plusMinusAverage',
                                ss=True,
                                n='pma_' + controllers[a])
            pm.connectAttr(attribute, pma + '.input1D[0]', f=True)
            md = pm.createNode('multiplyDivide',
                               ss=True,
                               n='md_' + controllers[a])
            pm.connectAttr(pma + '.output1D', md + '.input1X', f=True)
            cmds.setAttr(md + '.input2X', -1)
            parentGrp = controllers[a].getParent()
            pm.connectAttr(md + '.outputX', parentGrp + '.' + axis, f=True)
        else:
            pma = pm.createNode('plusMinusAverage',
                                ss=True,
                                n='pma_' + controllers[a])
            pm.connectAttr(attribute, pma + '.input1D[0]', f=True)
            parentGrp = controllers[a].getParent()
            pm.connectAttr(pma + '.output1D', parentGrp + '.' + axis, f=True)
    ar_qui.ar_displayMessage(
        'success', '---- "%s" ----    connections done.....' % attribute)
    return True
Ejemplo n.º 3
0
 def connectLipSetup(self):
     if not _hierarchyChecker(self.namespaceName):
         pm.windows.confirmDialog(
             title='Hierarchy Error',
             message=
             'Hierarchy has some error please\nplease opens script editor for details.',
             button=['Yes', 'No'],
             defaultButton='Yes',
             cancelButton='No',
             dismissString='No')
         ar_qui.ar_displayDialogue('error', 'Hierarchy is not proper.')
         ar_qui.ar_displayMessage('error', 'Hierarchy is not proper.')
         return False
     # connect all rivet to "self.face_geo" geometry.
     for each in self.lipCtrlGrps:
         allHist = pm.listHistory(each, pdo=True)
         for hist in allHist:
             if hist.nodeType() == 'pointOnCurveInfo':
                 crvFrmMshEdg = hist.inputCurve.connections(
                 )[0].create.connections()[0]
                 inputShape = self.face_geo.getShapes(ni=True)[0]
                 inputShape.worldMesh[0].connect(crvFrmMshEdg.inputMesh,
                                                 f=True)
     # add blendshape.
     for each in self.lip_geos:
         ar_blendshape.ar_addBlendShape(each, self.face_geo, value=1)
Ejemplo n.º 4
0
def ar_addFingerAttributeConnections(attribute, controllers, axis='rx'):
    """
    @ add twist connections on controllers upper group.
    Args:
        attribute (str): attribute with object name.
        controllers (list): list of one finger controllers in order of start to end.
        axis (str): sample of axis, 'rx' or 'ry' or 'rz'.

    Returns:
            bool.
    """
    for a in range(len(controllers)):
        controllers[a] = pm.PyNode(controllers[a])
        parentGrp = controllers[a].getParent()
        # if connection is in translate and translate is in minus then add multiply divide,
        # and reverse its connections.
        if axis.startswith('t'):
            offGroup = pm.PyNode('FKOffset' + controllers[a][2:])
            if offGroup.tx.get() < 0:
                mdnNode = pm.createNode('multiplyDivide',
                                        ss=True,
                                        n='mdn_' + controllers[a] + '_Reverse')
                pm.connectAttr(attribute, mdnNode + '.input1X')
                pm.connectAttr(mdnNode + '.outputX', parentGrp + "." + axis)
                mdnNode.input2X.set(-1)
            else:
                pm.connectAttr(attribute, parentGrp + "." + axis)
        else:
            pm.connectAttr(attribute, parentGrp + "." + axis)
    ar_qui.ar_displayMessage(
        'success', '---- "%s" ----    connections done.....' % attribute)
    return True
Ejemplo n.º 5
0
def ar_identifyInpOutShapes(source):
    """
    @ identify shapes who has inputs and output connection.
    Args:
        source (str): transform of object.

    Returns:
            inpShape, outShape.
    """
    # get inputs from source.
    source = pm.PyNode(source)
    inpShape = str()
    outShape = str()
    sourceShapes = source.getShapes()
    if len(sourceShapes) == 2:
        for each in sourceShapes:
            if each.isIntermediateObject():
                outShape = each
            else:
                inpShape = each
    else:
        ar_qui.ar_displayMessage(
            'warning',
            'source mesh has more than two shapes or only one shape...')
        return False
    return str(inpShape), str(outShape)
Ejemplo n.º 6
0
def ar_zeroOut(sel=None):
    """
    @ zeroOut all the selected objects.
    Args:
        sel (list): objects for zero out.

    Returns:
            groups.
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage('warning',
                                 'Please select at least on object...')
    else:
        groups = list()
        for i in range(len(sel)):
            name = sel[i] + 'ZERO'
            if cmds.objExists(name):
                ar_qui.ar_displayMessage(
                    'error',
                    '%s is already exist please rename it and zeroOut again..'
                    % name)
                return False
            else:
                grp = cmds.group(em=True, w=True, n=name)
                par = cmds.listRelatives(sel[i], p=True)
                cmds.delete(cmds.parentConstraint(sel[i], grp))
                cmds.parent(sel[i], grp)
                if not par:
                    pass
                else:
                    cmds.parent(grp, par[0])
            groups.append(grp)
        return groups
Ejemplo n.º 7
0
def ar_addPlacementController():
    """
    @ add placement Controller in asp rig.
    Returns:
            controller.
    """
    if not pm.objExists('Group'):
        ar_qui.ar_displayMessage('error', 'Group Not Found..')
        return False
    if not pm.objExists('Main'):
        ar_qui.ar_displayMessage('error', 'Main Controller not Found..')
        return False
    mainCtl = pm.PyNode('Main')
    ctlGroup = pm.createNode('transform', n='PlacementExtra_C', ss=True)
    ctl = pm.modeling.circle(nr=[0, 1, 0], r=1, ch=False, n='Placement_C')[0]
    pm.parent(ctl, ctlGroup)
    allCvs = pm.ls(mainCtl + '.cv[*]', fl=True)
    for i, each in enumerate(allCvs):
        pm.setAttr(ctl + '.cv[' + str(i) + '].xValue', pm.xform(each, q=True, ws=True, t=True)[0])
        pm.setAttr(ctl + '.cv[' + str(i) + '].yValue', pm.xform(each, q=True, ws=True, t=True)[1])
        pm.setAttr(ctl + '.cv[' + str(i) + '].zValue', pm.xform(each, q=True, ws=True, t=True)[2])
    ctl.s.set(1.2, 1.2, 1.2)
    pm.makeIdentity(ctl, apply=True, t=1, r=1, s=1, n=0, pn=1)
    # parenting.
    pm.parent(ctlGroup, 'Group')
    pm.parent(mainCtl, ctl)
    ar_gen.ar_overrideColor(15, sel=[ctl])
    pm.select(cl=True)
    return ctl
Ejemplo n.º 8
0
def ar_findDuplicates():
    """
    @ brief Check for nodes with duplicate name and add them to errors node.
    Returns:
            bool.
    """
    duplicateNames = list()
    for node in pm.ls():
        if "|" in str(node):
            if not node.isInstanced():
                duplicateNames.append(str(node))
            else:
                if len(pm.ls(node)) > 1:
                    duplicateNames.append(str(node))
    if not duplicateNames:
        ar_qui.ar_displayMessage('success', 'No duplicates in scene...')
        return True
    pm.select(cl=True)
    if pm.objExists('SET_duplicate_names'):
        pm.delete('SET_duplicate_names')
    pm.sets(n='SET_duplicate_names', em=True).union(duplicateNames)
    ar_qui.ar_displayMessage(
        'success',
        '%s duplicate objects has been found and put in the "SET_duplicate_names".'
        % len(duplicateNames)),
    return False
Ejemplo n.º 9
0
def ar_getInfluenceJoint(sel=None):
    """
    @ select influence objects from selected skinned object.
    Args:
        sel (list): single object but in list. 

    Returns:
            infObj.
    """
    if not sel:
        sel = pm.ls(sl=True)
    if len(sel) == 1:
        skc = list()
        [
            skc.append(str(each)) for each in pm.listHistory(sel[0], pdo=True)
            if each.nodeType() == 'skinCluster'
        ]
        if len(skc) == 1:
            infObj = cmds.skinCluster(skc[0], q=True, inf=True)
            return infObj
        else:
            ar_qui.ar_displayMessage(
                'error', 'selected object has found multiple skin clusters...')
            return False
    else:
        ar_qui.ar_displayMessage('warning',
                                 'Please select one skinned object...')
        return False
Ejemplo n.º 10
0
def ar_bakeShapeUsingWrap(baseGeo, newGeo):
    """
    @ bake blendshape using wrap deformer.
    Args:
        baseGeo (str, PyNode): base geometry transform.
        newGeo (str, PyNode): edited shape transform.

    Returns:
            newShape.
    """
    oldGeo = pm.PyNode(baseGeo)
    newGeo = pm.PyNode(newGeo)
    # find blendshape node.
    bShpNode = ar_find.ar_findInputNodeType(oldGeo, 'blendShape')[0]
    bShpNode = pm.PyNode(bShpNode)
    # set all weight at zero.
    for i in range(bShpNode.getWeightCount()):
        bShpNode.setWeight(i, 0)
    # create targets.
    for each in pm.listAttr(bShpNode + '*.w', k=True, m=True):
        # duplicate new geometry.
        dupNewGeo = pm.duplicate(newGeo, rr=True, n=each)[0]
        pm.select(dupNewGeo, oldGeo)
        pm.runtime.CreateWrap()
        # on blendShape.
        pm.setAttr(bShpNode + '.' + each, 1)
        pm.runtime.DeleteHistory(dupNewGeo)
        pm.delete(oldGeo + 'Base')
        pm.setAttr(bShpNode + '.' + each, 0)
        ar_qui.ar_displayMessage('success', '% shape created' % each)
Ejemplo n.º 11
0
def ar_addFkProxy(axis, sel=None):
    """
    create fk proxy setup. will add it soon.
    :param axis: list ([1,0,0])
    :param sel: list (joint)
    :return: fkproxy chain
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage('success', 'No selections is present.')
    ar_qui.ar_displayMessage('success',
                             '%s this tool will be coming soon...' % axis)
Ejemplo n.º 12
0
def controllerConn(ctlType, passUI):
    """
    @ controller and replace shape of current objects connection.
    Args:
        ctlType (string): enter controller type like 'cube', 'sphere', etc.
        passUI (QCheckBox): pass the QCheckBox for replace controller on or off query.

    Returns:
            bool.
    """
    with ar_qui.ar_undoChunkOpen('controller maker'):
        myObj = pm.ls(sl=True)
        ctl = ar_controllers.Ar_CtlShapes('controller')
        ctlTyp = {
            'cube': ctl.ar_cubeCtl,
            'sphere': ctl.ar_sphereCtl,
            'diamond': ctl.ar_diamondCtl,
            'cone': ctl.ar_coneCtl,
            'arrowBall': ctl.ar_arrowBallCtl,
            'arrow1': ctl.ar_arrow1Ctl,
            'arrow4': ctl.ar_arrow4Ctl,
            'circle': ctl.ar_circleCtl
        }
        if myObj:
            for each in myObj:
                pm.select(cl=True)
                newCtl = ctlTyp[ctlType]()
                ar_gen.ar_matchPositionOrientation(sel=[newCtl, each])
                if passUI.shapeReplace_cb.isChecked():
                    if not each:
                        ar_qui.ar_displayMessage(
                            'error',
                            'please select object to replace the shape.')
                        return False
                    oldShape = each.getShape()
                    if oldShape:
                        oldShapeName = oldShape.name()
                        pm.delete(oldShape)
                    else:
                        oldShapeName = each + 'Shape'
                    newShape = newCtl.getShape()
                    pm.select(each, r=True)
                    mel.eval("parent -r -s " + newShape)
                    newShape.rename(oldShapeName)
                    pm.delete(newCtl)
                    pm.select(each)
            return True
        else:
            pm.select(cl=True)
            ctlTyp[ctlType]()
            return True
Ejemplo n.º 13
0
def ar_aimConstraintParent(aimValue, objValue, sel=None, freeze=True):
    """
    @ do create aimConstraint according to ui based axis and delete constraint,
    @ then parent first selected object and freeze transformation.
    Args:
        aimValue (list): [1,0,0]
        objValue (list): [1,0,0]
        sel (list): two objects selection order is aimObject and then main object.
        freeze (bool): maintain offset set to on or off.

    Returns:
            bool.
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if len(sel) != 2:
        ar_qui.ar_displayMessage('error', 'please select two objects...')
        return False
    cmds.select(cl=True)
    # create locator and snap on selection one.
    loc = cmds.spaceLocator(n='TempLocatorForObjectUpOrientation')
    cmds.delete(cmds.parentConstraint(sel[1], loc[0]))
    if objValue == [1, 0, 0]:
        cmds.move(3, 0, 0, loc[0], r=True, os=True, wd=True)
    if objValue == [0, 1, 0]:
        cmds.move(0, 3, 0, loc[0], r=True, os=True, wd=True)
    if objValue == [0, 0, 1]:
        cmds.move(0, 0, 3, loc[0], r=True, os=True, wd=True)
    cmds.delete(
        cmds.aimConstraint(sel[0],
                           sel[1],
                           o=[0, 0, 0],
                           w=True,
                           aim=aimValue,
                           u=objValue,
                           wut="object",
                           wuo=loc[0]))
    # parent joint.
    cmds.parent(sel[0], sel[1])
    if freeze:
        cmds.makeIdentity(sel[1], a=True, t=1, r=1, s=1, n=0, pn=1)
    cmds.setAttr(sel[0] + '.jointOrientX', 0)
    cmds.setAttr(sel[0] + '.jointOrientY', 0)
    cmds.setAttr(sel[0] + '.jointOrientZ', 0)
    # delete locator.
    cmds.delete(loc[0])
    cmds.select(sel[1])
    ar_qui.ar_displayMessage('success', 'constraint done')
    return True
Ejemplo n.º 14
0
def ar_removeNamespace(namespaceName):
    """
    @ remove namespace of passed argument.
    Args:
        namespaceName (str): namespace without colon ex (MSH).

    Returns:
            bool.
    """
    allNameSpaces = pm.listNamespaces()
    for each in allNameSpaces:
        if each == ':' + namespaceName:
            pm.namespace(rm=each[1:], mnr=True)
    ar_qui.ar_displayMessage('success', 'namespace successfully removed.')
    return True
Ejemplo n.º 15
0
def selectInfluenceObjConn():
    """
    @ getInfluenceJoint UI Connections.
    Returns:
            none.
    """
    with ar_qui.ar_undoChunkOpen('selectInfluenceObj'):
        sel = cmds.ls(sl=True)
        if sel:
            infObj = ar_skin.ar_getInfluenceJoint(sel)
            cmds.select(infObj, r=True)
            ar_qui.ar_displayMessage(
                'success', '%s influence objects is selected..' % len(infObj))
        else:
            ar_qui.ar_displayMessage('warning', 'your selection is empty')
Ejemplo n.º 16
0
def ar_getSelection(sel=None):
    """
    @ get selection from maya.
    Args:
        sel (list): selection list from maya.

    Returns:
            sel.
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage(
            'warning', 'Selection is empty please select something...')
        return False
    return sel
Ejemplo n.º 17
0
def ar_addFk(axis, sel=None):
    """
    @ create fk controller chain on selected joint.
    Args:
        axis (list): axis example [1,0,0].
        sel (list): joints.

    Returns:
            controller.
    """
    # get selection.
    if not sel:
        sel = cmds.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage('warning',
                                 'Please select at least one joint.')
        return False
    for x in range(len(sel)):
        chain = cmds.ls(sel[x], dag=True, typ='joint')
        controller = []
        for i in range(len(chain)):
            if i != len(chain) - 1:
                cmds.select(cl=True)
                offGrp = cmds.joint(n='FKOffset' + chain[i])
                grp = cmds.group(n='FKExtra' + chain[i], em=True)
                ctrl = cmds.circle(ch=False, n='FK' + chain[i], nr=axis)
                cmds.select(cl=True)
                fkxGrp = cmds.joint(n='FKX' + chain[i])
                cmds.parent(ctrl[0], grp)
                cmds.parent(fkxGrp, ctrl[0])
                cmds.parent(grp, offGrp)
                cmds.delete(cmds.parentConstraint(chain[i], offGrp))
                cmds.makeIdentity(offGrp, a=True, t=1, r=1, s=1, n=0, pn=1)
                cmds.parentConstraint(fkxGrp, chain[i])
                controller.append(fkxGrp)
                if i != 0:
                    cmds.parent(offGrp, controller[i - 1])
            else:
                cmds.select(cl=True)
                fkxGrp = cmds.joint(n='FKX' + chain[i])
                cmds.delete(cmds.parentConstraint(chain[i], fkxGrp))
                cmds.parent(fkxGrp, controller[i - 1])
                cmds.parentConstraint(fkxGrp, chain[i])
        ar_qui.ar_displayMessage('success', 'done add fk controllers.')
    return controller
Ejemplo n.º 18
0
def ar_getClosestVertex(geo, obj):
    """
    @ get closest vertex of obj.
    Args:
        geo (str): geometry.
        obj (str): object.

    Returns:
            closestVert.
    """
    geo = pm.PyNode(geo)
    obj = pm.PyNode(obj)
    pos = obj.getRotatePivot(space='world')
    try:
        selectionList = OpenMaya.MSelectionList()
        selectionList.add(geo.name())
        nodeDagPath = OpenMaya.MDagPath()
        selectionList.getDagPath(0, nodeDagPath)
    except RuntimeError:
        ar_qui.ar_displayMessage(
            'error', 'OpenMaya.MDagPath() failed on %s' % geo.name())
        return False
    mfnMesh = OpenMaya.MFnMesh(nodeDagPath)

    pointA = OpenMaya.MPoint(pos.x, pos.y, pos.z)
    pointB = OpenMaya.MPoint()

    space = OpenMaya.MSpace.kWorld

    util = OpenMaya.MScriptUtil()
    util.createFromInt(0)
    idPointer = util.asIntPtr()

    mfnMesh.getClosestPoint(pointA, pointB, space, idPointer)
    idx = OpenMaya.MScriptUtil(idPointer).asInt()

    faceVerts = [geo.vtx[i] for i in geo.f[idx].getVertices()]
    closestVert = None
    minLength = None
    for v in faceVerts:
        thisLength = (pos - v.getPosition(space='world')).length()
        if minLength is None or thisLength < minLength:
            minLength = thisLength
            closestVert = v
    return closestVert
Ejemplo n.º 19
0
def ar_fillListInLineEdit(lineEdit, sel=None):
    """
    @ add selection list in line edit.
    Args:
        lineEdit (str): line edit name.
        sel (list): object has to be add in line edit.

    Returns:
            bool.
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage('error', 'Please select only one object')
        return False
    lineText = ",".join(sel)
    lineEdit.setText(lineText)
    return True
Ejemplo n.º 20
0
def ar_noneOrient(sel=None):
    """
    @ set zero orientation of all selected joints.
    Args:
        sel (list): objects.

    Returns:
            bool.
    """
    if not sel:
        sel = cmds.ls(sl=True, type='joint')
    if not sel:
        ar_qui.ar_displayMessage('warning', 'no joints in selection...')
        return False
    for i in range(len(sel)):
        cmds.setAttr(sel[i] + '.jointOrientX', 0)
        cmds.setAttr(sel[i] + '.jointOrientY', 0)
        cmds.setAttr(sel[i] + '.jointOrientZ', 0)
    return True
Ejemplo n.º 21
0
def ar_parentHirarchy(sel=None):
    """
    @ parent objects using selection order.
    Args:
        sel (list): object order like child to parent.

    Returns:
            bool.
    """
    if not sel:
        sel = cmds.ls(sl=True)
    if len(sel) < 2:
        ar_qui.ar_displayMessage('warning',
                                 'Please select two or more item...')
    else:
        for i in range(len(sel) - 1):
            cmds.parent(sel[i], sel[i + 1])
        cmds.select(sel[len(sel) - 1])
    return True
Ejemplo n.º 22
0
def ar_fillLineEdit(lineEdit, sel=None):
    """
    @ add selection in window line edit.
    Args:
        lineEdit (str): line edit name.
        sel (list): object has to be add in line edit.

    Returns:
            bool.
    """
    if not sel:
        sel = pm.ls(sl=True)
    if not sel:
        ar_qui.ar_displayMessage('error', 'Please select only one object')
        return False
    elif len(sel) > 1:
        ar_qui.ar_displayMessage('error', 'more than one objects selected.')
        return False
    lineEdit.setText(str(sel[0]))
    return True
Ejemplo n.º 23
0
def ar_copySkinOnMultiObjects(source, target):
    """
    @ copy skin weight from source object to selected objects.
    Args:
        source (str): skinned source object.
        target (list): object has to be copy.

    Returns:
            bool.
    """
    if not target:
        ar_qui.ar_displayMessage(
            'warning', 'Please specify target objects to copy skin weight')
        return False
    for each in target:
        cmds.copySkinWeights(source,
                             each,
                             nm=True,
                             sa='closestPoint',
                             ia='oneToOne')
    return True
Ejemplo n.º 24
0
def ar_removeFromDeformerInvertedVertex(deformer, sel=None):
    """
    @ invert(all vertex - sel vertex) your selected vertex and remove from deformer set.
    Args:
        deformer (str): deformer name.
        sel (list): vertex list with flatten.

    Returns:
            bool.
    """
    deformerNd = pm.PyNode(deformer)
    if not sel:
        sel = pm.ls(sl=True, fl=True)
    # query geometry from selection.
    geo = pm.ls(sel[0], o=True)[0]
    deformerSet = deformerNd.deformerSet()
    allVert = pm.ls(geo + '.vtx[*]', fl=True)
    unwantedVert = list(set(allVert) - set(sel))
    # remove from deformer set.
    pm.sets(deformerSet, rm=unwantedVert)
    ar_qui.ar_displayMessage('success', 'selected vertex is only affect with %s deformer.' % deformer)
Ejemplo n.º 25
0
def ar_getHighlightedAttribute(sel=None):
    """
    @ get channel box highlighted attribute.
    Args:
        sel (list): attribute selection.

    Returns:
            selected channel.
    """
    if not sel:
        sel = pm.ls(sl=True)
    if len(sel) != 1:
        ar_qui.ar_displayMessage('warning', 'Please select only one object')
        return False
    # get highlighted attribute from channel box.
    channel = pm.windows.channelBox('mainChannelBox', q=True, sma=True)
    if not channel or len(channel) != 1:
        ar_qui.ar_displayMessage('warning',
                                 'Please select one attribute to load...')
        return False
    return channel[0]
Ejemplo n.º 26
0
def ar_transferRivet(source, dest):
    """
    @ transfer loft CurveFromMeshEdge connection from source to destination geometry.
    Args:
        source (str): source shape node.
        dest (str): destination shape node.

    Returns:
            crvFrmMshEdg.
    """
    source = pm.PyNode(source)
    dest = pm.PyNode(dest)
    allConnections = source.connections()
    crvFrmMshEdg = list()
    for each in allConnections:
        if each.nodeType() == 'curveFromMeshEdge':
            crvFrmMshEdg.append(each)

    for each in crvFrmMshEdg:
        # noinspection PyTypeChecker
        pm.connectAttr('{0}.worldMesh[0]'.format(dest), '{0}.inputMesh'.format(each), f=True)
    ar_qui.ar_displayMessage('success', 'all rivet transfer done.')
    return crvFrmMshEdg
Ejemplo n.º 27
0
def ar_addBlendShape(source, target, value=0):
    """
    @ add blendshape in target.
    Args:
        source (str, PyNode):  transform of source geometry.
        target (str, PyNode): transform of target geometry.
        value (float): addBlendShapeValue

    Returns:
            face_blend.
    """
    source = pm.PyNode(source)
    target = pm.PyNode(target)
    # get existing blendshape if exist.
    blendShape = []
    allHist = target.history(pdo=True)
    for each in allHist:
        if each.nodeType() == 'blendShape':
            blendShape.append(each)
    # add blendshape.
    if not blendShape:
        face_blend = pm.blendShape(source, target, foc=True,
                                   n='BS_' + target)[0]
        weightCount = face_blend.getWeightCount()
        face_blend.setWeight(weightCount - 1, value)
    elif len(blendShape) == 1:
        face_blend = blendShape[0]
        weightCount = face_blend.getWeightCount()
        pm.blendShape(face_blend,
                      edit=True,
                      t=(target, weightCount + 1, source, 1.0))
        face_blend.setWeight(weightCount + 1, value)
    else:
        ar_qui.ar_displayMessage(
            'error', 'geometry have more than one blenshapes found...')
        return False
    return face_blend
Ejemplo n.º 28
0
def ar_asIKCtlOriChange(joint, controller):
    """
    @ change ik controller orientation as local (getting joint orientation for reference).
    Args:
        joint (str): this parameter is use only for orientation reference.
        controller (str): ik controller.

    Returns:
            controller.
    """
    cmds.select(cl=True)
    tempLoc = cmds.spaceLocator()
    tempLoc1 = cmds.spaceLocator()
    cmds.select(cl=True)
    cmds.delete(cmds.parentConstraint(joint, tempLoc))
    cmds.delete(cmds.parentConstraint(joint, tempLoc1))
    cmds.parent(tempLoc, 'IKOffset' + controller[2:])
    listParents = cmds.listRelatives(controller, c=True)
    for i in range(1, len(listParents)):
        cmds.parent(listParents[i], tempLoc[0])
    cmds.delete(cmds.parentConstraint(tempLoc1, 'IKExtra' + controller[2:]))
    for i in range(1, len(listParents)):
        cmds.parent(listParents[i], controller)
    cmds.delete(tempLoc, tempLoc1)
    cmds.select(cl=True)

    # Add Hand Ik Extra Group Rotation value In Build Pose.
    GetAttrs = cmds.getAttr('buildPose.udAttr')
    qExtra = cmds.xform('IKExtra' + controller[2:], q=True, os=True, ro=True)
    newAttrs = GetAttrs.replace('xform -os -t 0 0 0 -ro 0 0 0 %s;' % ('IKExtra' + controller[2:]),
                                'xform -os -t 0 0 0 -ro %f %f %f %s;' % (
                                    qExtra[0], qExtra[1], qExtra[2], 'IKExtra' + controller[2:]))
    cmds.setAttr('buildPose.udAttr', newAttrs, type="string")
    cmds.select(controller, r=True)
    ar_qui.ar_displayMessage('success', '{0} orientation changed... '.format(controller))
    return controller
Ejemplo n.º 29
0
def ar_jointsOnSelection(sel=None):
    """
    @ joints on selected items.
    Args:
        sel (list): objects.

    Returns:
            allJoints.
    """
    if not sel:
        sel = cmds.ls(sl=True, fl=True)
    if not sel:
        ar_qui.ar_displayMessage('warning',
                                 'Please select at least one object...')
        return False
    allJoints = list()
    for i in range(len(sel)):
        cmds.select(cl=True)
        pos = cmds.xform(sel[i], q=True, ws=True, piv=True)
        rot = cmds.xform(sel[i], q=True, ws=True, ro=True)
        jnt = cmds.joint(p=[pos[0], pos[1], pos[2]])
        cmds.xform(jnt, ws=True, ro=[rot[0], rot[1], rot[2]])
        allJoints.append(jnt)
    cmds.select(allJoints, r=True)
Ejemplo n.º 30
0
def ar_browConnect(face_geo,
                   face_geo_top_node,
                   face_geo_main,
                   namespacesName='XXX:'):
    """
    @ import brow rig and attach with rig.
    Args:
        face_geo (str): geometry from imported file.
        face_geo_top_node (str): upper group of face geometry.
        face_geo_main (str): face geometry of main rig.
        namespacesName (str): namespace with colon.

    Returns:
            bool.
    """
    face_geo = pm.PyNode(namespacesName + face_geo)
    face_geo_top_node = pm.PyNode(namespacesName + face_geo_top_node)
    face_geo_main = pm.PyNode(face_geo_main)
    # import eyebrow setup.
    ctlOffsetGroups = [
        'browInnerAttach_R', 'browOuterAttach_R', 'browInnerAttach_L',
        'browOuterAttach_L', 'browHalfAttach_R', 'browHalfAttach_L'
    ]
    # for import
    pm.parent(namespacesName + 'Brow_Controllers', 'ControlsSetup')
    # parent Rivet Curves.
    crvs = pm.listRelatives(namespacesName + 'ctlCurveMainGroup', c=True)
    pm.parent(crvs, 'ClusterSetup')
    # connection with old Brs.
    for each in ctlOffsetGroups:
        pm.connectAttr('Brs.r', namespacesName + each + '.r', f=True)
        pm.connectAttr('Brs.s', namespacesName + each + '.s', f=True)
    # parent face motion follow head.
    childs = pm.listRelatives(namespacesName + 'FaceDeformationFollowHead',
                              c=True)
    filtChilds = []
    for each in childs:
        if type(each) == pm.nodetypes.PointConstraint:
            pass
        elif type(each) == pm.nodetypes.OrientConstraint:
            pass
        else:
            filtChilds.append(each)
    pm.parent(filtChilds, 'FaceDeformationFollowHead')
    # delete unwanted.
    deleteArray = [
        'Main', 'ctlCurveMainGroup', 'Brs', 'FaceDeformationFollowHead'
    ]
    for each in deleteArray:
        pm.delete(namespacesName + each)
    # make hierarchy.
    eyeBrowExtraSystem = pm.createNode('transform', n='EyeBrowExtraSystem')
    pm.parent(face_geo, namespacesName + 'Head_M', eyeBrowExtraSystem)
    pm.delete(face_geo_top_node)
    face_geo.rename('BrowRigBlendshape_geo')
    ar_blendshape.ar_addBlendShape(face_geo, face_geo_main, value=1)
    # transfer rivet.
    shapes = face_geo.listRelatives(s=True)
    for each in shapes:
        if not each.isIntermediate():
            ar_rivet.ar_transferRivet(each, face_geo_main)
    ar_namespaces.ar_removeNamespace(namespacesName[:-1])
    # lock and parent eyeBrowExtraSystem.
    eyeBrowExtraSystem.v.set(0)
    eyeBrowExtraSystem.v.lock()
    if not pm.objExists('ExtraSystem'):
        pm.createNode('transform', n='ExtraSystem')
    pm.parent(eyeBrowExtraSystem, 'ExtraSystem')
    ar_qui.ar_displayMessage('success', 'brow connection is done....')
    return True