示例#1
0
def pickWalkHairCtrl(d='right', add=False):
    '''Pick Walk and hide Controls'''
    sel = pm.selected()
    hairInfoAll = selHair(returnInfo=True)
    pm.setToolTo(pm.context.manipMoveContext())
    if not hairInfoAll:
        return
    ToggleHairCtrlVis(state='hide')
    if d == 'up':
        pm.select([h[0][0] for h in hairInfoAll])
        selHair()
        for o in pm.selected():
            o.show()
    elif d == 'down':
        pm.select([h[0][0] for h in hairInfoAll])
        selHair(selectTip=True)
        for o in pm.selected():
            o.show()
    else:
        ctrlGroups = [h[1] for h in hairInfoAll]
        for ob in sel:
            ctrls = ctrlGroups[sel.index(ob)].listRelatives(
                type=pm.nt.Transform)
            if ctrls.count(ob):
                for c in ctrls:
                    c.show()
                pm.select(ob, add=1)
            else:
                selHair(selectTip=True)
                if d == 'left':
                    pm.pickWalk(d='right')
                for c in ctrls:
                    c.show()
        pm.pickWalk(d=d)
示例#2
0
def loc_edgeLoop():
    sel = pm.ls(sl=True,fl=True)
    index=1
    for obj in sel:
        transform = obj
        if isinstance(obj,pm.MeshEdge):
            transform = obj.node().getParent()
            pm.polySelect(transform,elb=obj.indices()[0])
            edgeLoop=pm.ls(sl=True)
        pm.language.melGlobals.initVar( 'string', 'gMove' )
        pm.setToolTo(pm.language.melGlobals['gMove'])
        moveManip = pm.manipMoveContext('Move', q=True,p=True)
        grpName = transform+'_ELP_LOC_GRP'
        if pm.objExists(grpName):
            elp_grp=pm.PyNode(grpName)
            print 'addingIndex'
            index+=1
        else:
            print 'removing index'
            index=1
            elp_grp = pm.group(em=True,n=grpName)
        locName=transform+'_'+str(index)+'_LOC'
        loc = pm.spaceLocator(n=locName)
        loc.translate.set(moveManip)
        loc.setParent(elp_grp)
        pm.select(edgeLoop, r=True)
示例#3
0
    def __init__(self, myface) :
        
        self.myface  = myface
        self.base    = pm.PyNode(self.myface.name)
        self.cur     = myface.curve

        # 口角の位置に球を生成
        self.pinIndexList = myface.parts_vertex[myface.context_parts]
        self.paramList    = myface.param_list
        self.constPinIndexList = self.pinIndexList

        self.mouthcorner_pos  = [pm.pointPosition(self.base.vtx[i]) for i in [self.pinIndexList[0], self.pinIndexList[5]]]
        self.curve_corner_pos = curvetool.getCurvePoint(self.cur, [self.paramList[0],self.paramList[5]])


        self.reflesh_viewer()

        self.ctx             = "paramSetCtx"
        self.make_my_drag_context()
        self.paramProgress   = 0.0
        self.paramProgress_befor = 0.0

        # 現在何番目のピンを操作しているのか
        self.no_of_editing_pin = 0
        self.no_of_editing_pin_max = 1

        pm.setToolTo(self.ctx)
示例#4
0
    def installModule(self, module, *args):
        #1. Create Unique Module Name: name = BlueprintModuleName__UserSpecifiedName:objectName
        basename = "instance_"
        pm.namespace(setNamespace=":")
        namespace = pm.namespaceInfo(listOnlyNamespaces=True)

        #1a. search existing namespaces for all that have __UserSpecifiedName
        for i in range(len(namespace)):
            #index of first occurence, find __, if found
            if namespace[i].find("__") != -1:
                namespace[i] = namespace[i].partition("__")[2]

        #1b. create unique UserSpecifiedName  (get hightest digit that exists and add 1)
        newSuffix = utils.findHeighestTrailingNumber(namespace, basename) + 1
        userSpecName = basename + str(newSuffix)

        #import module
        mod = __import__("Blueprint." + module, {}, {}, [module])
        reload(mod)
        #create class reference from string (without ())
        moduleClass = getattr(mod, mod.CLASS_NAME)
        #with class reference, call constructor and istall method of this module
        moduleInstance = moduleClass(userSpecName)
        moduleInstance.install()

        moduleTransform = mod.CLASS_NAME + "__" + userSpecName + ":module_transform"
        pm.select(moduleTransform, replace=True)
        pm.setToolTo("moveSuperContext")
示例#5
0
def splitHairCtrl(d='up'):
    '''add Hair Controls'''
    sel = pm.selected()
    if not sel:
        return
    directionDict = {'up': 1, 'down': -1}
    if not directionDict.has_key(d):
        return
    hairInfoAll = selHair(returnInfo=True)
    if not hairInfoAll:
        return
    #print hairInfo[0][0]
    #print hairInfo
    for selOb in sel:
        pm.select(selOb, r=1)
        hairInfo = hairInfoAll[sel.index(selOb)]
        ctrls = hairInfo[1].listRelatives(type=pm.nt.Transform)
        hair = hairInfo[0][0]
        for ctrl in ctrls:
            pm.rename(ctrl, '_'.join([ctrl.name(), "old"]))
        ctrlID = ctrls.index(selOb)
        if ctrlID == 0:
            directionDict[d] = 1
        elif ctrlID == (len(ctrls) - 1):
            directionDict[d] = -1
        newCtrl = pm.duplicate(ctrls[ctrlID])[0]
        pm.move(
            newCtrl,
            (ctrls[ctrlID].getTranslation(space='world') +
             ctrls[ctrlID + directionDict[d]].getTranslation(space='world')) /
            2,
            a=1,
            ws=1)
        pm.scale(newCtrl,
                 (ctrls[ctrlID].attr('scale').get() +
                  ctrls[ctrlID + directionDict[d]].attr('scale').get()) / 2,
                 a=1)
        ctrls.insert(ctrlID + (directionDict[d] + 1) / 2, newCtrl)
        for ctrl in ctrls:
            pm.rename(
                ctrl, '_'.join(
                    [ctrl.name().split('_')[0],
                     str(ctrls.index(ctrl) + 1)]))
            pm.parent(ctrl, w=1)
            pm.parent(ctrl, hairInfo[1])
        oldname = hair.name()
        oldParent = hair.getParent()
        curMaterial = hair.getShape().listConnections(
            type=pm.nodetypes.ShadingEngine)[0].name()
        pm.rename(hair, '_'.join([oldname, 'old']))
        newHair = createHairMesh(ctrls,
                                 name=oldname,
                                 mat=curMaterial,
                                 lengthDivs=hair.attr('lengthDivisions').get(),
                                 widthDivs=hair.attr('widthDivisions').get())
        pm.parent(newHair[0], oldParent)
        pm.delete(hair)
        pm.select(newCtrl)
        pm.setToolTo('moveSuperContext')
示例#6
0
    def selectNextItem(self):
        '''
        '''
        if self.txt_jntCurrent.getLabel() == 'Select mouth lips loop':

            self.txt_jntCurrent.setLabel('Select left eyelid loop')
            fullRefPath = self.imageRefPath + "LT_eyeLidLoop.jpg"
            pm.image(self.img_jntReference, image=fullRefPath, e=True)

            # assign selection to placement_grp attr
            sel = pm.ls(sl=True, fl=True)
            self.placementGrp.addAttr('mouthLipsLoop', dt='stringArray')
            self.placementGrp.attr('mouthLipsLoop').set(len(sel),
                                                        *sel,
                                                        type='stringArray')
            pm.select(cl=True)

            placementGrp.addMouthLoopPlacements(self.placementGrp)

        elif self.txt_jntCurrent.getLabel() == 'Select left eyelid loop':
            # READY!
            self.txt_jntCurrent.setLabel('Ready to Build!')
            fullRefPath = self.imageRefPath + "default.jpg"
            pm.image(self.img_jntReference, image=fullRefPath, e=True)
            self.btn_jntScrollRt.setEnable(False)
            self.btn_updateLocs.setEnable(True)
            self.btn_buildRig.setEnable(True)
            pm.setToolTo('selectSuperContext')

            # assign selection to placement_grp attr
            sel = pm.ls(sl=True, fl=True)
            self.placementGrp.addAttr('leftEyelidLoop', dt='stringArray')
            self.placementGrp.attr('leftEyelidLoop').set(len(sel),
                                                         *sel,
                                                         type='stringArray')

            placementGrp.addEyeLoopPlacements(self.placementGrp)
            # override for mathilda
            # placementGrp.addEyeLoopPlacements(self.placementGrp, [23,15,9,3])
            # mathilda_override
            # pm.PyNode('LT_innerUpper_eyelid_pLoc').cv_id.set(18)

            placementGrp.addIndependentPlacers(self.placementGrp,
                                               self.indMapping)

            # align jaw pLoc
            cons = mc.aimConstraint('CT__mouthMover_pLoc',
                                    'CT__jaw_pLoc',
                                    aim=[0, 0, 1],
                                    u=[1, 0, 0],
                                    wu=[1, 0, 0])
            mc.delete(cons)

            pm.selectMode(object=True)
            mel.setObjectPickMask("Surface", False)

            placementGrp.snapPlacementsToMesh(self.placementGrp)
            placementGrp.mirrorAllPlacements(self.placementGrp)
            placementGrp.orientAllPlacements(self.placementGrp)
示例#7
0
    def editJointPivotTool(self):
        objs = pm.selected()
        pm.selectMode(co=True)
        pm.selectType(ra=True)
        pm.select(objs[0].rotateAxis, r=True)

        rotateCtx = pm.manipRotateContext(psc=pm.Callback(self.editJointPivotExit, objs))
        pm.setToolTo(rotateCtx)
示例#8
0
    def runContext(self):
        """
        Set maya tool to this context
        """
        if pm.draggerContext(self.context, exists=True):
            pm.setToolTo(self.context)

        self.nextJoint()
示例#9
0
文件: pbUV.py 项目: aaronfang/pbUV
 def decorated_function(*args, **kwargs):
     currenttool = pm.currentCtx()
     selecttool = pm.melGlobals['gSelect']
     if currenttool != selecttool:
         pm.setToolTo(selecttool)
         function(*args, **kwargs)
         pm.setToolTo(currenttool)
     else:
         function(*args, **kwargs)
示例#10
0
 def exitContext(self):
     '''
     '''
     pm.select(cl=True)
     pm.setToolTo('polySelectContext')
     fullRefPath = self.ui.imageRefPath + "CT__mouthLipLoop.jpg"
     pm.image(self.ui.img_jntReference, image=fullRefPath, e=True)
     self.ui.txt_jntCurrent.setLabel('Select mouth lips loop')
     
示例#11
0
 def addPointsToRiver( self, river ):
     ctxName = "CurveAddPtCtx"
     pm.select( river , r=True )
     if pm.contextInfo(ctxName, ex=True) is False:
         ctx = pm.curveAddPtCtx("CurveAddPtCtx")
         print ctx
     else:
         ctx = ctxName
     pm.setToolTo(ctx)
 def ShowUI(self):
     self.FindSelectionToGroup()
     
     if len(self.objectsToGroup) == 0:
         return
     
     self.UIElements = {}
     
     if pm.window("groupSelected_UI_window", exists = True):
         pm.deleteUI("groupSelected_UI_window")
     
     
     windowWidth = 300
     windowHeight = 150
     self.UIElements["window"] = pm.window("groupSelected_UI_window", width = windowWidth, height = windowHeight, title = "Group Selected", sizeable = False)
     
     self.UIElements["topLevelColumn"] = pm.columnLayout(adjustableColumn = True, columnAlign = 'center', rowSpacing = 3)
     self.UIElements["groupName_rowColumn"] = pm.rowColumnLayout(numberOfColumns = 2, columnAttach = (1, 'right', 0), columnWidth = [(1, 80), (2, windowWidth - 90)], parent = self.UIElements["topLevelColumn"])
     
     pm.text(label = "Group Name: ", parent = self.UIElements["groupName_rowColumn"])
     self.UIElements["groupName"] = pm.textField(text = "group", parent = self.UIElements["groupName_rowColumn"])
     
     self.UIElements["createAt_rowColumn"] = pm.rowColumnLayout(numberOfColumns = 3, rowOffset = [(1, 'top', 2), (2, 'both', 2), (3, 'both', 2)], columnWidth = [(1, 80), (2, windowWidth - 170), (3, 80)], parent = self.UIElements["topLevelColumn"])
     pm.text(label = "Position at: ", parent = self.UIElements["createAt_rowColumn"])
     pm.text(label = '', parent = self.UIElements["createAt_rowColumn"])
     pm.text(label = '', parent = self.UIElements["createAt_rowColumn"])
     
     pm.text(label = '', parent = self.UIElements["createAt_rowColumn"])
     self.UIElements["createAt_lastSelected"] = pm.button(label = "Last Selected", command = self.CreateAtLastSelected, parent = self.UIElements["createAt_rowColumn"])
     pm.text(label = '', parent = self.UIElements["createAt_rowColumn"])
     
     pm.text(label = '', parent = self.UIElements["createAt_rowColumn"])
     self.UIElements["createAt_averagePosition"] = pm.button(label = "Average Position", command = self.CreateAtAveragePosition, parent = self.UIElements["createAt_rowColumn"])
     pm.text(label = '', parent = self.UIElements["createAt_rowColumn"])
     
     pm.separator(style = 'in', parent = self.UIElements["topLevelColumn"])
     
     
     columnWidth = (windowWidth / 2) - 5
     self.UIElements["button_row"] = pm.rowLayout(numberOfColumns = 2, columnWidth = [(1, columnWidth), (2, columnWidth)], columnAttach = [(1, 'both', 10), (2, 'both', 10)], columnAlign = [(1, 'center'), (2, 'center')], parent = self.UIElements["topLevelColumn"])
     pm.button(label = "Accept", command = self.AcceptWindow, parent = self.UIElements["button_row"])
     pm.button(label = "Cancel", command = self.CancelWindow, parent = self.UIElements["button_row"])
     
     
     pm.showWindow(self.UIElements["window"])
     
     
     self.CreateTemporaryGroupRepresentation()
     
     self.CreateAtAveragePosition()
     
     pm.select(self.tempGroupTransform, replace = True)
     pm.setToolTo("moveSuperContext")
示例#13
0
def ForceSceneUpdate():
    
    # Select objects in scene with move tool to force an update
    pm.setToolTo("moveSuperContext")
    nodes = pm.ls()
    
    for node in nodes:
        pm.select(node, replace = True)
    
    
    pm.select(clear = True)
    pm.setToolTo("selectSuperContext")
def RotPro(menu1, menu2, rotationDict, *args):
    print 'ran'
    buttons = pm.radioCollection(menu2, q=True, sl=True)
    rtype = pm.radioButton(buttons, q=True, label=True)
    type = menu1.getValue()
    axis = rotationDict[rtype][0]
    mod = rotationDict[rtype][1]
    print type, axis, mod
    modx = 0
    mody = 0
    modz = 0
    faces = ''
    rotationamount = mod
    if axis == 'x':
        modx = rotationamount
        print 'modx', modx
    if axis == 'y':
        mody = rotationamount
    if axis == 'z':
        modz = rotationamount
    selected = pm.ls(sl=True)

    if (len(selected) < 1):
        pm.informBox(title='Object Selection Error',
                     message='Please Select a Single Object',
                     ok='Ok')
        return
    try:
        shape = selected[0].getChildren()
        faces = shape[0].f[0:]
    except:
        try:
            faces = selected
        except:
            pm.informBox(title='Object Selection Error',
                         message='Please Select a valid Object',
                         ok='Ok')
            return

    projection = pm.polyProjection(faces,
                                   rx=modx,
                                   ry=mody,
                                   rz=modz,
                                   type=type,
                                   ibd=True,
                                   sf=True)[0]
    print projection
    pm.select(d=True)
    pm.select(projection, r=True)
    pm.setToolTo('ShowManips')
    pm.showManipCtx()
    pm.ShowManipulators()
示例#15
0
    def __init__( self, 
                  cur ,                # nt.Transform("name") 
                  base,                # str
                  myface,
                  pinIndexList = [], 
                  paramList = [],
                  prePos = 0,
                  blender = 0,
                  alpha = 0
                  ):
        self.pinIndexList    = pinIndexList
        self.paramList       = paramList
        self.cur             = cur
        self.base_name       = base
        self.base_transform  = pm.PyNode(self.base_name)
        self.ctx             = "paramSetCtx"
        self.paramProgress   = 0.0
        self.paramProgress_befor = 0.0
        
        self.myface = myface

        self.prePos          = prePos
        self.blender         = blender
        self.alpha           = alpha

        self.constParamList    = paramList
        self.constPinIndexList = pinIndexList
        #self.constPinIt        = 0

        # 現在何番目のピンを操作しているのか
        self.no_of_editing_pin = 0
        self.no_of_editing_pin_max = len(pinIndexList)
        
        #self.initialization()
        
        self.make_param_set_cmd()
        pm.setToolTo(self.ctx)
        
        self.make_ui()
        self.update_field(pinIndexList,paramList)
        
        # 現在の口のラインを作成
        self.sph_befor_move = [0]
        self.meke_mouth_line()


        """
        pm.select(self.base_name)
        pm.mel.doMenuComponentSelectionExt("base", "vertex", 1)
        pm.setToolTo("selectSuperContext")
        """
        pm.hilite(self.cur)
示例#16
0
def snap_eye_ctl():
    '''
        snap eye Control to end Bone Position
    '''
    for dir in ['Left','Right']:
        eye_endbone = ul.get_node('eye%sEnd_bon'%dir)
        eye_ctl = ul.get_node('eye%s_frmGp'%dir)
        pm.select(eye_ctl,r=True)
        pm.setToolTo('moveSuperContext')
        mm.eval('BakeCustomPivot;')
        eye_endbone_pos = eye_endbone.getTranslation(space='world')
        eye_ctl_pos = eye_ctl.getTranslation(space='world')
        eye_ctl.setTranslation((eye_endbone_pos[0],eye_endbone_pos[1],eye_ctl_pos[2]), space='world')     
示例#17
0
 def selectNextItem(self):
     '''
     '''
     if self.txt_jntCurrent.getLabel() == 'Select mouth lips loop':
         
         self.txt_jntCurrent.setLabel('Select left eyelid loop')
         fullRefPath = self.imageRefPath + "LT_eyeLidLoop.jpg"
         pm.image(self.img_jntReference, image=fullRefPath, e=True)
         
         # assign selection to placement_grp attr
         sel = pm.ls(sl=True, fl=True)
         self.placementGrp.addAttr('mouthLipsLoop', dt='stringArray')
         self.placementGrp.attr('mouthLipsLoop').set(len(sel), *sel, type='stringArray')
         pm.select(cl=True)
         
         placementGrp.addMouthLoopPlacements(self.placementGrp)
         
     elif self.txt_jntCurrent.getLabel() == 'Select left eyelid loop':
         # READY!
         self.txt_jntCurrent.setLabel('Ready to Build!')
         fullRefPath = self.imageRefPath + "default.jpg"
         pm.image(self.img_jntReference, image=fullRefPath, e=True)
         self.btn_jntScrollRt.setEnable(False)
         self.btn_updateLocs.setEnable(True)
         self.btn_buildRig.setEnable(True)
         pm.setToolTo('selectSuperContext')
         
         # assign selection to placement_grp attr
         sel = pm.ls(sl=True, fl=True)
         self.placementGrp.addAttr('leftEyelidLoop', dt='stringArray')
         self.placementGrp.attr('leftEyelidLoop').set(len(sel), *sel, type='stringArray')
         
         placementGrp.addEyeLoopPlacements(self.placementGrp)
         # override for mathilda
         # placementGrp.addEyeLoopPlacements(self.placementGrp, [23,15,9,3])
         # mathilda_override
         # pm.PyNode('LT_innerUpper_eyelid_pLoc').cv_id.set(18)
         
         placementGrp.addIndependentPlacers(self.placementGrp, self.indMapping)
         
         # align jaw pLoc
         cons = mc.aimConstraint('CT__mouthMover_pLoc', 'CT__jaw_pLoc',
                                 aim=[0,0,1], u=[1,0,0], wu=[1,0,0])
         mc.delete(cons)
         
         pm.selectMode(object=True)
         mel.setObjectPickMask("Surface", False)
         
         placementGrp.snapPlacementsToMesh(self.placementGrp)
         placementGrp.mirrorAllPlacements(self.placementGrp)
         placementGrp.orientAllPlacements(self.placementGrp)
示例#18
0
def set_symmetry_axis_and_activate_symmetry_brush():
    selection = pm.ls(sl=True)

    # Convert the selection to UVs.
    uvs = pm.polyListComponentConversion(selection,
                                         ff=True,
                                         fuv=True,
                                         fe=True,
                                         fvf=True,
                                         tuv=True)
    if uvs:
        set_symmetry_axis(uvs)

    pm.setToolTo('texSymmetrizeUVContext')
示例#19
0
def getPosition(transform):
    """
    Gets position of move manipulator where control is.

    Args:
        transform (string): name of object to get position from.

    Returns:
        (list): [x, y, z], world position of object in three coordinates.
    """
    pm.select(transform)
    pm.setToolTo('Move')
    pos = pm.manipMoveContext('Move', q=1, p=1)
    pm.select(clear=True)
    return pos
示例#20
0
文件: pbUV.py 项目: aaronfang/pbUV
 def tear_face(self):
     sel = pm.selected()
     movetool = pm.melGlobals['gMove']
     if all(isinstance(i, pm.MeshFace) for i in sel):
         if len(sel) == 1:
             pm.polyMapCut(sel)
             sel = pm.polyListComponentConversion(sel, ff=True, tuv=True)
             pm.select(sel)
         else:
             sewSel = pm.polyListComponentConversion(ff=True, te=True, internal=True)
             pm.polyMapCut(sel)
             pm.polyMapSewMove(sewSel, nf=10, lps=0, ch=1)
             sel = pm.polyListComponentConversion(sel, ff=True, tuv=True)
             pm.select(sel)
         pm.setToolTo(movetool)
示例#21
0
def getManipulatorPosition(transform):
    """
    Gets position of move manipulator where control is.

    Args:
        transform (string, PyNode, list, tuple, or set): Name of object(s) to get position from.

    Returns:
        (list): [x, y, z], World position of object in three coordinates.
    """
    pm.select(transform)
    pm.setToolTo('Move')
    position = pm.manipMoveContext('Move', q=1, p=1)
    pm.select(clear=True)
    return position
示例#22
0
    def add_pin(self, *args) :
        print "- - - Add pins - - -"

        index = self.no_of_editing_pin
        
        slls = pm.ls(sl = 1, fl = 1)
        if len(slls) == 1 and str(type(slls[0])) == "<class 'pymel.core.general.MeshVertex'>" :
            self.pinIndexList.insert(index, slls[0].index())
            self.paramList.insert(index, 0.0)
            # 対応点編集モードへ
            pm.setToolTo(self.ctx)
            self.next_pin()
            self.update_field(self.pinIndexList,self.paramList)
            
        else :
            print "頂点を1つだけ選択してください"
示例#23
0
def apply_greasepencil(filename, clear_existing_frames=False):
    import pymel.core as pm
    ctxName = 'syncSketchGreasePencil'

    # create grease pencil if it doesn't exist
    if not pm.greasePencilCtx(ctxName, exists=True):
        ctx = pm.greasePencilCtx(ctxName)
        pm.setToolTo(ctx)
    else:
        nodeNames = pm.greasePencilCtx(ctxName,sequenceNodeName=True, query=True)
        if nodeNames and clear_existing_frames:
            pm.delete(nodeNames)
            logger.info('Deleted Existing Greasepencil frames ...')
    active_panel = get_active_editor()
    cmds.modelEditor(active_panel, edit=True, greasePencils=True)

    pm.greasePencilCtx(ctxName, edit = True, importArchive =  filename )
示例#24
0
def placeSine(sineTool, cntrlList):

    tempGrp = pm.group(pm.parent(pm.duplicate(cntrlList), w=True))

    pm.setToolTo('Move')
    pos = pm.manipMoveContext('Move', q=1, p=1)

    pm.delete(tempGrp)
    pm.select(clear=True)

    pm.move(sineTool, pos)

    distanceNum = getDistance(cntrlList[0], cntrlList[-1])

    sineTool.scale.set([distanceNum, distanceNum, distanceNum])

    pm.aimConstraint(cntrlList[-1], sineTool)
    pm.delete(pm.listRelatives(sineTool, type='aimConstraint'))

    return distanceNum
示例#25
0
    def _onRelease(self):
        '''
        This is called when the tool is released.
        Here we'll remove our callback and cleanup everything.
        '''

        # Remove the callback
        om.MMessage.removeCallback(self.callbackID)

        # Set the current tool to the move tool
        pmc.setToolTo('moveSuperContext')

        # Simplify the animation curves
        if self.simplify:
            for target in self.targets:
                pmc.filterCurve(target,
                                f='simplify',
                                startTime=self.startFrame,
                                endTime=pmc.currentTime(q=True),
                                timeTolerance=self.tolerance)

        # End the scrub
        pmc.timeControl(self.playbackSlider, edit=True, endScrub=True)
 def weldVertContext(cls):
     ''' '''
     if not pm.scriptCtx('vertWeldCustom', exists=True):
         weldVert = pm.scriptCtx(
             'vertWeldCustom',
             t='Weld Verts',
             tss=1,
             fcs='weldVertCustom($Selection1)',
             esl=1,
             snp=
             'Select a Vertex, click a second vertex to weld to, Hold CTRL to merge to middle',
             ssp=
             'Click a second vertex to weld to, Hold CTRL to merge to middle',
             setDoneSelectionPrompt='Select only one vertex to start',
             sat=1,
             ssc=2,
             sac=1,
             pv=1,
             euc=0,
             tct='edit',
             ts=lambda *args: cls.weldVertexToolStart())
         cls.weldVertexContextToolStart()
         pm.setToolTo(weldVert)
    def setManipTool(self, toolType):
        if toolType == "translate":
            pm.setToolTo( 'moveSuperContext' )
        elif toolType == "rotate":
            pm.setToolTo( 'RotateSuperContext' )
        elif toolType == "scale":
            pm.setToolTo( 'scaleSuperContext' )
              
#mayaMainWindowPtr = omui.MQtUtil.mainWindow()
#mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget)

#import xsiPanel
#from xsiPanel import xsiTransformPanel_maya
#reload(xsiTransformPanel_maya)

#view = xsiTransformPanel_maya.XsiTransformPanel_Maya("Transform", mayaMainWindow)
#view.show()
    def setManipTool(self, toolType):
        if toolType == "translate":
            pm.setToolTo('moveSuperContext')
        elif toolType == "rotate":
            pm.setToolTo('RotateSuperContext')
        elif toolType == "scale":
            pm.setToolTo('scaleSuperContext')


#mayaMainWindowPtr = omui.MQtUtil.mainWindow()
#mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget)

#import xsiPanel
#from xsiPanel import xsiTransformPanel_maya
#reload(xsiTransformPanel_maya)

#view = xsiTransformPanel_maya.XsiTransformPanel_Maya("Transform", mayaMainWindow)
#view.show()
    def CreateGroup(self, _groupName):
        fullGroupName = "Group__%s" %_groupName
        
        # Check for valid names
        if pm.objExists(fullGroupName):
            pm.confirmDialog(title = "Name Conflict", message = 'Group "%s" already exits.' %_groupName, button= "Accept", defaultButton = "Accept")
            
            return None
        
        groupTransform = pm.rename(self.tempGroupTransform, fullGroupName)

        
        # Create container for grouped objects
        groupContainer = "Group_container"
        if not pm.objExists(groupContainer):
            pm.container(name = groupContainer)
        
        
        # Store containers to be grouped in a list
        containers = [groupContainer]
        for obj in self.objectsToGroup:
            if obj.find("Group__") == 0:
                continue
            
            objNamespace = utils.StripLeadingNamespace(obj)[0]
            containers.append("%s:module_container" %objNamespace)
        
        
        # Unlock all grouped containers
        for c in containers:
            pm.lockNode(c, lock = False, lockUnpublished = False)
        
        
        if len(self.objectsToGroup) != 0:
            
            # Group objects temprorarily to simulate final heirarchy
            tempGroup = pm.group(self.objectsToGroup, absolute = True)
            groupParent = pm.listRelatives(tempGroup, parent = True)
            
            
            if groupParent != []:
                pm.parent(groupTransform, groupParent[0], absolute = True)
            
            
            pm.parent(self.objectsToGroup, groupTransform, absolute = True)
            
            pm.delete(tempGroup)
        
        
        self.AddGroupToContainer(groupTransform)
        
        # Lock all group containers
        for c in containers:
            pm.lockNode(c, lock = True, lockUnpublished = True)
        
        
        # Make sure the created group is selected
        pm.setToolTo("moveSuperContext")
        pm.select(groupTransform, replace = True)
        
        return groupTransform
示例#30
0
 def __enter__(self):
     # for safety, reset tool context
     pmc.setToolTo("selectSuperContext")
     pmc.undoInfo(openChunk=True)
示例#31
0
def startTool(ctx) :
    [ pm.setAttr(w,0.0) for w in blender.w ]
    pm.setToolTo(ctx)
    tools.deltemp()
示例#32
0
 def weldVertContext(cls):
   ''' '''
   if not pm.scriptCtx('vertWeldCustom', exists=True):
     weldVert = pm.scriptCtx('vertWeldCustom', t='Weld Verts', tss=1, fcs='weldVertCustom($Selection1)', esl=1, snp='Select a Vertex, click a second vertex to weld to, Hold CTRL to merge to middle', ssp='Click a second vertex to weld to, Hold CTRL to merge to middle', setDoneSelectionPrompt='Select only one vertex to start', sat=1, ssc=2, sac=1, pv=1, euc=0, tct='edit', ts=lambda *args: cls.weldVertexToolStart() )
     cls.weldVertexContextToolStart()
     pm.setToolTo(weldVert)
示例#33
0
    def create(self,
               targets,
               sensitivity=1.0,
               timeScale=1.0,
               singleAxis=False,
               simplify=True,
               verticalControl=True,
               tolerance=0.05,
               inverted=False,
               framerate=24):

        # Set each of the tool settings
        self.targets = targets
        self.target = pmc.PyNode(self.targets[0].split('.')[0])
        self.framerate = framerate
        self.sensitivity = sensitivity
        self.timeScale = timeScale
        self.singleAxis = singleAxis
        self.simplify = simplify
        self.verticalControl = verticalControl
        self.tolerance = tolerance
        self.playbackSlider = maya.mel.eval('$tmpVar=$gPlayBackSlider')
        self.inverted = inverted

        # Set up default input values
        self.lastInput = (0, 0, 0)
        self.input = 0

        # Check if an existing dragger context exists, if so, delete it
        if (pmc.draggerContext(animSketchTool.contextname, exists=True)):
            pmc.deleteUI(animSketchTool.contextname)

        # Create the dragger context. This will create a new tool that watches for drag events
        if singleAxis:

            # Determine the cursor shape based on the direction
            if self.verticalControl:
                cursor = 'dolly'
            else:
                cursor = 'track'

            # Create the dragger context with the correct space and cursor shape
            pmc.draggerContext(animSketchTool.contextname,
                               pressCommand=self._onPress,
                               dragCommand=self._onDrag,
                               cursor=cursor,
                               releaseCommand=self._onRelease,
                               undoMode='step',
                               image1='/MotionBlur.png')
        else:

            # Create the dragger context with space set to 'world'
            pmc.draggerContext(animSketchTool.contextname,
                               pressCommand=self._onPress,
                               dragCommand=self._onDrag,
                               cursor='hand',
                               releaseCommand=self._onRelease,
                               undoMode='step',
                               image1='/MotionBlur.png',
                               space='world')

        # Set the currentTool
        pmc.setToolTo(animSketchTool.contextname)
示例#34
0
 def unset(s):
     """ Set us back to the last tool """
     if s.active:
         pmc.setToolTo(s.last_tool)
示例#35
0
def hairJiggle( nodes=[], prefix='jiggle', stretchable=True ):
    '''
    update : 2015-04-27

    #
    # 마야에서 기본으로 같은 기능을 하는 MakeCurvesDynamic 스크립트가 있으나 
    # 리턴 값이 없어 사용이 불가
    # pm.runtime.MakeCurvesDynamic('curve1')
    #
    # makeCurvesDynamic 2 { "0", "1", "0", "1", "0"};
    # $args[0] = surfaceAttach	  If true then connect the hairs to a surface(also selected) basing the uv on the nearest point to the first curve cv 
    # $args[1] = snapToSurface    If true and attaching to a surface then also snap the curve to the surface. 
    # $args[2] = matchPosition	  If true then make the input curve a degree one so resulting output curve exactly matches the position. 
    # $args[3] = createOutCurves  If true then output curves are created 
    # $args[4] = createPfxHair	  If true then hair is created.
    #
    '''    
    if nodes:
        pm.select(nodes)

    # get joints
    joints     = pm.ls(sl=True, type='joint')
    if not joints:
        raise

    # get hairSystem
    hairSystem=None
    hairSystems = pm.ls(sl=True, dag=True, type='hairSystem')    
    if hairSystems:
        hairSystem = hairSystems[-1]
    
    # get nucleus
    nucleus=None
    nucleuss = pm.ls(sl=True, dag=True, type='nucleus')
    if nucleuss:
        nucleus = nucleuss[-1]

    # store current state
    currentToolMode = pm.currentCtx()
    pm.setToolTo( 'selectSuperContext' )
    sel = pm.selected()

    #
    # nucleus
    #
    if not nucleus and not hairSystem:       
        nucleus = pm.createNode( 'nucleus' )
        nucleus.rename( prefix+'_nucleus' )
        pm.PyNode('time1').outTime >> nucleus.currentTime
    
    #
    # hairSystem
    #
    hairSystemTr = None
    if hairSystem:
        hairSystemTr = hairSystem.getParent()

    else:
        hairSystem   = pm.createNode( 'hairSystem' )
        hairSystemTr = hairSystem.getParent()
        hairSystemTr.rename( prefix+'_hairSys' )

        # 새로 생성된 헤어와 뉴클리어스 연결 << connectAttr nextAvailable플래그로 해결해보려했으나.. 복잡.. 멜을 사용하는게 제일 편함.
        #pm.PyNode('time1').outTime >> hairSystem.currentTime
        #hairSystem.currentState  >> nucleus.inputActive[0]
        #hairSystem.startState    >> nucleus.inputActiveStart[0]
        #nucleus.outputObjects[0] >> hairSystem.nextState
        #nucleus.startFrame       >> hairSystem.startFrame

        # 새로 생성된 헤어와 뉴클리어스 연결
        pm.mel.assignNSolver( nucleus )

        # default Value
        hairSystem.active.set( True )

    #
    # follicle 생성
    #
    follicle   = pm.createNode( 'follicle' )
    follicleTr = follicle.getParent()
    follicleTr.rename( prefix+'_follicle' )

    # follicle 위치조정
    pm.delete( pm.pointConstraint( joints[0], follicleTr ) )
    pm.delete( pm.orientConstraint( joints[0], follicleTr, offset=(0, 90, 0) ) )
    
    # follicle이 조인트, parent를 따라가도록설정
    # Start Joint의 Parent가 없으면 현재 Start에 페어런트 검.
    parent = joints[0].getParent()
    const = None
    if parent:
        const = pm.parentConstraint( parent, follicleTr, mo=True)
    else:
        const = pm.parentConstraint( joints[0], follicleTr, mo=True)

    # 기본값
    follicle.restPose.set(1)       # same as start
    follicle.startDirection.set(1) # start Curve base
    follicle.degree.set(2)
    follicle.clumpWidth.set(5)     # 폴리클 디스플레이 크기

    #
    # curve Setting
    #
    # startCurve 생성
    startCurve = jntToCrv( joints, degree=3, ep=True )
    startCurve.setParent( follicleTr )
    startCurve.rename( prefix+'_startCurve' )

    # outputCurve 생성
    outputCurveShape = pm.createNode( 'nurbsCurve' )
    outputCurve      = outputCurveShape.getParent()
    outputCurve.rename( prefix+'_outputCurve' )

    #
    # DG 
    #
    settableNum = 0
    while True:    
        if hairSystem.inputHair[ settableNum ].isSettable():
            break
        settableNum +=1
    startCurve.getShape().worldSpace     >> follicle.startPosition
    follicle.outHair                     >> hairSystem.inputHair[ settableNum ]
    hairSystem.outputHair[ settableNum ] >> follicle.currentPosition    
    pm.connectAttr( follicle+'.outCurve', outputCurveShape+'.create' ) # follicle.outCurve >> outputCurveShape.create    # 이부분에서 다음 경고 발생:  Warning: pymel.core.general : Could not create desired MFn. Defaulting to MFnDagNode. # 

    #
    #
    # ikHandle
    #
    HDL, EFF = pm.ikHandle( solver='ikSplineSolver', startJoint=joints[0], endEffector=joints[-1], createCurve=False, curve=outputCurveShape, parentCurve=False )
    HDL.rename( prefix+'_HDL')
    EFF.rename( prefix+'_EFF')

    #
    #
    # 그루핑
    #
    rigGrp = pm.group(n=prefix+'_jointChainRig_grp#',em=True)
    rigGrp.v.set(False)
    pm.parent(follicleTr, HDL, outputCurve, rigGrp)

    #
    #
    # 스트레치 세팅
    #
    if stretchable:
        #
        # 커브 리빌드, 익스텐드
        #
        rdbCrv, rbd = pm.rebuildCurve( 
            outputCurveShape, 
            ch=True, 
            replaceOriginal=False, 
            rebuildType=0, # uniform
            endKnots=1,    # 0 - uniform end knots, 1 - multiple end knots
            keepRange=0,   # 0 - reparameterize the resulting curve from 0 to 1, 1 - keep the original curve parameterization, 2 - reparameterize the result from 0 to number of spans
            keepControlPoints=False, 
            keepEndPoints=True, 
            keepTangents=True, 
            spans=len(joints), 
            degree=3, 
            tol=0.001 
            )

        #
        #   Locators on Curve
        #
        unit = 1.0 / (len(joints)-1)
        locOnCrvs = []
        for i in range(len(joints)):
            param = unit * i

            xformOnCrv = pm.spaceLocator( n='xformOnCrv#')

            xformOnCrv.addAttr( 'parameter',        sn='pr',  dv=param, keyable=True )
            xformOnCrv.addAttr( 'turnOnPercentage', sn='top', dv=False, at='bool', keyable=True )
            xformOnCrv.addAttr( 'revRotation',  sn='rot', keyable=True )

            xformOnCrv.it.set(False)
            xformOnCrv.rename( 'xformOnCrv%02d'%i )

            pntOnCrv = pm.PyNode( pm.pointOnCurve( rdbCrv.getShape(), parameter=param, ch=True ) )
            pntOnCrv.turnOnPercentage.set(True)
            pntOnCrv.setAttr('parameter',        keyable=True)
            pntOnCrv.setAttr('turnOnPercentage', keyable=True)
            pntOnCrv.rename( xformOnCrv+'_POC' )

            xformOnCrv.parameter        >> pntOnCrv.parameter
            xformOnCrv.turnOnPercentage >> pntOnCrv.turnOnPercentage
            pntOnCrv.position           >> xformOnCrv.t

            locOnCrvs.append(xformOnCrv)

        #
        # distance Rig
        #
        distNodes = []
        for i in range(len(locOnCrvs)-1):
            dist = pm.createNode( 'distanceDimShape' )
            locOnCrvs[i].worldPosition[0]   >> dist.startPoint
            locOnCrvs[i+1].worldPosition[0] >> dist.endPoint
            distNodes.append( dist )

        #
        # ik핸들 커브 변경
        #
        pm.ikHandle( HDL, e=True, curve=rdbCrv )

        #
        # connect To Joint
        #
        for dist, jnt in zip(distNodes, joints[1:]):
            dist.distance >> jnt.tx

        #
        # 그루핑
        #
        pm.parent(rdbCrv, locOnCrvs, [dist.getParent() for dist in distNodes], rigGrp)
        
    #
    #
    # restore state
    #
    pm.setToolTo( currentToolMode )
    if sel:
        pm.select(sel)
    else:
        pm.select(cl=True)
示例#36
0
 def set(s):
     """ Activate Tool """
     pmc.setToolTo(s.name) # Set our tool to the active tool