コード例 #1
0
ファイル: IKArm.py プロジェクト: jaredauty/Rigging
 def generate(self):
    cmds.cycleCheck(e=False)
    self.rigWrist()
    self.setupIK()
    self.setupStretch()
    cmds.cycleCheck(e=True)
    self.m_isGenerated = True
コード例 #2
0
ファイル: nParticles-1.py プロジェクト: hradec/pipeVFX
    def doOperation( self, operands ) :
        result = 'done'
        frameRange   = operands['FrameRange']['range'].value
        meshPrimitives = operands["%sNodes" % self.prefix].value.split(',')
        tmpFileName = tempfile.mkstemp()[1]
        self.data['assetPath'] = "%sFrame%%d.mc" % tmpFileName
        self.data['multipleFiles'] = range(frameRange[0],frameRange[1]+1)
        self.data['nodes'] = meshPrimitives

        
        if m:
            m.cycleCheck(e=0)      
            m.cacheFile(
                dtf                 =1,
                format              ="OneFilePerFrame",
                fileName            =os.path.basename(tmpFileName),
                directory           =os.path.dirname(tmpFileName),
                cacheableNode       =' '.join(meshPrimitives),                
                st                  =frameRange[0],
                et                  =frameRange[1],
            )
            
            # check if simulation finished susccefuly by looking for all the cached files!
            frames = self.data['multipleFiles'] 
            if len(filter(lambda x: os.path.exists(self.data['assetPath']%x), frames)) != len(frames):
                raise Exception("Simulation was cancelled by user interaction or some other unknown issue. Asset not published!!")

        else:
            raise Exception("We can only publish nParticles from within maya!")

        return IECore.StringData( result )
コード例 #3
0
def cycle_check():
    """Check cycle check is disabled.

    Provided to avoid straight turning it off, which can be expensive.
    """
    if cmds.cycleCheck(query=True, evaluation=True):
        cmds.cycleCheck(evaluation=False)
コード例 #4
0
    def doOperation(self, operands):
        result = 'done'
        frameRange = operands['FrameRange']['range'].value
        meshPrimitives = operands["%sNodes" % self.prefix].value.split(',')
        tmpFileName = tempfile.mkstemp()[1]
        self.data['assetPath'] = "%sFrame%%d.mc" % tmpFileName
        self.data['multipleFiles'] = range(frameRange[0], frameRange[1] + 1)
        self.data['nodes'] = meshPrimitives

        if m:
            m.cycleCheck(e=0)
            m.cacheFile(
                dtf=1,
                format="OneFilePerFrame",
                fileName=os.path.basename(tmpFileName),
                directory=os.path.dirname(tmpFileName),
                cacheableNode=' '.join(meshPrimitives),
                st=frameRange[0],
                et=frameRange[1],
            )

            # check if simulation finished susccefuly by looking for all the cached files!
            frames = self.data['multipleFiles']
            if len(
                    filter(
                        lambda x: os.path.exists(self.data['assetPath'] % x),
                        frames)) != len(frames):
                raise Exception(
                    "Simulation was cancelled by user interaction or some other unknown issue. Asset not published!!"
                )

        else:
            raise Exception("We can only publish nParticles from within maya!")

        return IECore.StringData(result)
コード例 #5
0
ファイル: herds.py プロジェクト: roboneill/herds
	def create(self, objnum, shape="cone"):
		if shape == "cone":
			node = cmds.cone(ch=False, n='herdmemb')
		else:
			node = cmds.duplicate(shape, ic=True, n='herdmemb')

		cmds.addAttr(node, sn='fad', ln='frameAdjust', dv=0, k=True)
	
		values = herds().values()
		
		cmds.expression(s=("$herdvar = " + str(random.random() - 0.5) + " * " + self.leader + ".rnds + " + str(objnum) + ";\n"
						+ "$randfac = " + self.leader + ".stry;\n"
						+ "$foc = " + self.leader + ".lf;\n"
						+ "if( $foc != 0 ) {\n"
						+ "$randfac *= min( 1.0,abs($herdvar)*(1-$foc)/($foc*"+ str(values["population"]) +") );}\n"
						+ "$herdvar = $herdvar * -" + self.leader + ".frameOffset + frame +" + node[0] + ".frameAdjust;\n"
						+ "$offset = " + str(random.random() - 0.45) + " * $randfac;\n"
						+ node[0] + ".tx = $offset + `getAttr -time $herdvar " + self.leader + ".tx`;\n" 
						+ "$offset = " + str(random.random() - 0.45) + " * $randfac;\n"
						+ node[0] + ".ty = $offset + `getAttr -time $herdvar " + self.leader + ".ty`;\n" 
						+ "$offset = " + str(random.random() - 0.45) + " * $randfac;\n"
						+ node[0] + ".tz = $offset + `getAttr -time $herdvar " + self.leader + ".tz`;\n"
						), n=(node[0] + "_herd_exp"))
		# Turns off the checker for finding cycles - throws up lots of warnings without it.
		cmds.cycleCheck(e=True, all=False)
		
		self.node = node[0]
		self.point()
		
		return node
コード例 #6
0
 def release(self, *args):
     '''
     Be careful overwriting the release method in child classes. Not closing the undo chunk leaves maya in a sorry state.
     '''
     # close undo chunk and turn cycle check back on
     mc.undoInfo(closeChunk=True)
     mc.cycleCheck(evaluation=self.cycleCheck)
     mm.eval('SelectTool')
コード例 #7
0
def update(arcTracer, forceUpdate=False):
    '''Populates an arcTracer with updated spacial information.'''
    # Get object to trace
    traceObj = getFirstConnection('%s.traceObj' % arcTracer, inAttr=1)

    if not traceObj:
        om.MGlobal.displayError('Trace object for arc tracer %s disappeared!' % arcTracer)
        return

    # Get selection so it can be restored later
    selection = cmd.ls(sl=1)

    # Hide everything but the trace obj in refresh mode
    if cmd.getAttr('%s.useRefreshMode' % arcTracer):
        cmd.select(traceObj)
        panels = cmd.getPanel(typ='modelPanel')
        panelsIsolated = []
        for panel in panels:
            if not cmd.isolateSelect(panel, q=1, state=1):
                cmd.isolateSelect(panel, state=1)
                panelsIsolated.append(panel)

    pastFrames = cmd.getAttr('%s.pastFrames' % arcTracer)
    futureFrames = cmd.getAttr('%s.futureFrames' % arcTracer)

    # Disable cycle check since the update-frame expression causes a
    # cycle (apparently)
    try:
        # Only recent versions of maya can query the cycle check.
        cycleCheck = cmd.cycleCheck(q=1, e=1)
    except AttributeError:
        cycleCheck = 1
    cmd.cycleCheck(e=0)

    currentFrame = cmd.currentTime(q=1)
    lastFrame = cmd.getAttr('%s.lastFrame' % arcTracer)
    timeShift = abs(lastFrame - currentFrame)
    if timeShift != 0 or forceUpdate:
        frameRange, direction = findFrameRange(pastFrames, futureFrames, currentFrame, lastFrame, timeShift, forceUpdate)
        arcPositions = getSavedArcPositions(arcTracer, timeShift, forceUpdate)

        # Get updated positions
        getUpdatedArcPositions(arcTracer, traceObj, frameRange, currentFrame, direction, arcPositions)

        # Set all positions
        setArcPositions(arcTracer, arcPositions, pastFrames, futureFrames, currentFrame)

        cmd.setAttr('%s.lastFrame' % arcTracer, currentFrame)

    cmd.cycleCheck(e=cycleCheck)

    # Restore isolation
    if cmd.getAttr('%s.useRefreshMode' % arcTracer):
        for panel in panelsIsolated:
            cmd.isolateSelect(panel, state=0)

        # Restore previous selection
        cmd.select(selection)
コード例 #8
0
    def run_app(self):
        """
        Callback from when the menu is clicked.
        """
        ## Tell the artist to be patient... eg not genY
        cmds.headsUpMessage("Building shotCam...", time = 1)
        inprogressBar = pbui.ProgressBarUI(title = 'Building Shotcam:')
        inprogressBar.show()
        ## Instantiate the API
        tk = sgtk.sgtk_from_path("T:/software/bubblebathbay")
        debug(app = self, method = 'run_app', message = 'API instanced...\n%s' % tk, verbose = False)
        debug(app = self, method = 'run_app', message = 'Fetch Shot Assets launched...', verbose = False)
               
        context = self.context ## To get the step
        debug(app = self, method = 'run_app', message = 'Context Step...\n%s' % context.step['name'], verbose = False)
        if context.step['name'] == 'Anm' or context.step['name'] == 'Blocking':
            inprogressBar.updateProgress(percent = 10, doingWhat = 'processing scene info...')
            cmds.cycleCheck(e = 1)
            ## Build an entity type to get some values from.
            entity = self.context.entity                                                                                    ## returns {'type': 'Shot', 'name': 'ep100_sh010', 'id': 1166}
            debug(app = self, method = 'run_app', message = 'entity... %s' % entity, verbose = False)

            ## Set the template to the maya publish folder
            shot_root_template = tk.templates[self.get_setting('shot_root_template')]
            debug(app = self, method = 'run_app', message = 'shot_root_template...\n%s' % shot_root_template, verbose = False)

            ## Now build the camera
            shotName = entity['name']
            cameraName = '%s_shotCam' % shotName
            if self.doesAssetAlreadyExistInScene(cameraName):
                inprogressBar.updateProgress(percent = 100, doingWhat = 'Camera found...')
                inprogressBar.close()
                cmds.warning("Scene currently has a valid shotCamera in it! Aborting ...")
                QtGui.QMessageBox.information(None, "Scene currently has a valid shotCamera in it! Aborting ...")
                raise tank.TankError("Scene currently has a valid shotCamera in it! Aborting ...")
            else:
                inprogressBar.updateProgress(percent = 50, doingWhat = 'Building camera...')
                cmds.camera()
                cmds.rename('camera1', cameraName)
                self.tagShotCam(cameraName)
                
                ## Now set the default camera stuff up
                settings._setCameraDefaults(cameraName)
                settings._createCamGate(cameraName)
                ## Now set the renderGlobals up
                width = self.get_setting('movie_width')
                height = self.get_setting('movie_height')
                inprogressBar.updateProgress(percent = 90, doingWhat = 'Setting render globals...')
                settings._setRenderGlobals(width = width, height = height, animation = True)

            inprogressBar.updateProgress(percent = 100, doingWhat = 'Finished...')
            inprogressBar.close()
            cmds.headsUpMessage("shotCam built successfully...", time = 1)
        else:
            cmds.headsUpMessage("Current context is not a valid Shot context. Please make sure you are under a valid shotgun Shot context!", time = 2)
            cmds.warning("Current context is not a valid Shot context. Please make sure you are under a valid shotgun Shot context!")
            QtGui.QMessageBox.information(None, "Current context is not a valid Shot context. Please make sure you are under a valid shotgun Shot context!")
            raise tank.TankError("Current context is not a valid Shot context. Please make sure you are under a valid shotgun Shot context!")
コード例 #9
0
def update(arcTracer, forceUpdate=False):
    '''Populates an arcTracer with updated spacial information.'''
    # Get object to trace
    traceObj = getFirstConnection('%s.traceObj' % arcTracer, inAttr=1)

    if not traceObj:
        om.MGlobal.displayError('Trace object for arc tracer %s disappeared!' % arcTracer)
        return

    # Get selection so it can be restored later
    selection = cmd.ls(sl=1)

    # Hide everything but the trace obj in refresh mode
    if cmd.getAttr('%s.useRefreshMode' % arcTracer):
        cmd.select(traceObj)
        panels = cmd.getPanel(typ='modelPanel')
        panelsIsolated = []
        for panel in panels:
            if not cmd.isolateSelect(panel, q=1, state=1):
                cmd.isolateSelect(panel, state=1)
                panelsIsolated.append(panel)

    pastFrames = cmd.getAttr('%s.pastFrames' % arcTracer)
    futureFrames = cmd.getAttr('%s.futureFrames' % arcTracer)

    # Disable cycle check since the update-frame expression causes a
    # cycle (apparently)
    try:
        # Only recent versions of maya can query the cycle check.
        cycleCheck = cmd.cycleCheck(q=1, e=1)
    except AttributeError:
        cycleCheck = 1
    cmd.cycleCheck(e=0)

    currentFrame = cmd.currentTime(q=1)
    lastFrame = cmd.getAttr('%s.lastFrame' % arcTracer)
    timeShift = abs(lastFrame - currentFrame)
    if timeShift != 0 or forceUpdate:
        frameRange, direction = findFrameRange(pastFrames, futureFrames, currentFrame, lastFrame, timeShift, forceUpdate)
        arcPositions = getSavedArcPositions(arcTracer, timeShift, forceUpdate)

        # Get updated positions
        getUpdatedArcPositions(arcTracer, traceObj, frameRange, currentFrame, direction, arcPositions)

        # Set all positions
        setArcPositions(arcTracer, arcPositions, pastFrames, futureFrames, currentFrame)

        cmd.setAttr('%s.lastFrame' % arcTracer, currentFrame)

    cmd.cycleCheck(e=cycleCheck)

    # Restore isolation
    if cmd.getAttr('%s.useRefreshMode' % arcTracer):
        for panel in panelsIsolated:
            cmd.isolateSelect(panel, state=0)

        # Restore previous selection
        cmd.select(selection)
コード例 #10
0
ファイル: BINDArm.py プロジェクト: jaredauty/Rigging
    def generate(self):
        cmds.cycleCheck(e=False)
        if self.m_rigWrist:
            self.rigWrist()
        self.setupElbowTwist()
        self.setupStretch()

        cmds.cycleCheck(e=True)
        self.m_isGenerated = True
コード例 #11
0
 def release(self, *args):
     '''
     Called when the mouse button is released, and cleans up after the tool.
     Be careful overwriting the release method in child classes. Not closing the undo chunk leaves maya in a sorry state.
     '''
     # close undo chunk and turn cycle check back on
     mc.undoInfo(closeChunk=True)
     mc.cycleCheck(evaluation=True)
     mm.eval('SelectTool')
コード例 #12
0
ファイル: utils.py プロジェクト: lazerdaze/lancer
 def _undofunc(*args, **kwargs):
     try:
         # start an undo chunk
         cmds.undoInfo(ock=True)
         cmds.cycleCheck(e=False)
         return func(*args, **kwargs)
     finally:
         # after calling the func, end the undo chunk and undo
         cmds.undoInfo(cck=True)
         cmds.cycleCheck(e=True)
コード例 #13
0
 def __exit__(self, *args):
         
     #reset settings
     mc.cycleCheck(evaluation=self.resetCycleCheck)
     mc.autoKeyframe(state=self.resetAutoKey)
     
     if self.sel:
         mc.select(self.sel)
         
     self.isolate(False)
コード例 #14
0
ファイル: FKArm.py プロジェクト: jaredauty/Rigging
 def generate(self):
    cmds.cycleCheck(e=False)
    self.rigShoulder()
    self.rigElbow()
    self.rigWrist()
    #-- Weird fix --#
    cmds.orientConstraint(
         self.m_joints.m_shoulder, 
         self.m_joints.m_wrist, 
         mo=1
         )
    cmds.cycleCheck(e=True)
    self.m_isGenerated = True
コード例 #15
0
 def __enter__(self):
 
     self.sel = mc.ls(sl=True)
     self.modelPanels = mc.getPanel(type='modelPanel')
     self.isolate(True)
     
     mc.select(clear=True)
     
     #save and turn off settings that might print to the script editor
     self.resetCycleCheck = mc.cycleCheck(query=True, evaluation=True)
     mc.cycleCheck(evaluation=False)
     
     self.resetAutoKey = mc.autoKeyframe(query=True, state=True)
     mc.autoKeyframe(state=False)
コード例 #16
0
 def press(self, *args):
     '''
     Be careful overwriting the press method in child classes, because of the undoInfo openChunk
     '''
     
     self.anchorPoint = mc.draggerContext(self.draggerContext, query=True, anchorPoint=True)
     self.button = mc.draggerContext(self.draggerContext, query=True, button=True)
     #dragString
     
     # This makes it so the script editor doesn't get spammed by a cycle in the puppet
     mc.cycleCheck(evaluation=False)
     
     # This turns off the undo queue until we're done dragging, so we can undo it.
     mc.undoInfo(openChunk=True)
コード例 #17
0
 def __init__(self,
             name = 'mlDraggerContext',
             title = 'Dragger',
             defaultValue=0,
             minValue=None,
             maxValue=None,
             multiplier=0.01,
             cursor='hand'
             ):
     
     self.multiplier = multiplier
     self.defaultValue = defaultValue
     self.minValue = minValue
     self.maxValue = maxValue
     self.cycleCheck = mc.cycleCheck(query=True, evaluation=True)
     
     self.draggerContext = name
     if not mc.draggerContext(self.draggerContext, exists=True):
         self.draggerContext = mc.draggerContext(self.draggerContext)
                                                 
     mc.draggerContext(self.draggerContext, edit=True,
                     pressCommand=self.press, 
                     dragCommand=self.drag,
                     releaseCommand=self.release,
                     cursor=cursor,
                     drawString=title,
                     undoMode='all'
                     )
コード例 #18
0
def connectAllWithOceanHeightAttr(object = ''):
	"""
	Find and attach everything in the scene which has an oceanHeightHook attribute to the ocean
	"""
	inprogressBar = pbui.ProgressBarUI(title = 'Hooking To Ocean:')
	inprogressBar.show()
	inprogressBar.updateProgress(percent = 0, doingWhat = 'Hooking everything to ocean now...')
	debug(None, method = 'connectAllWithOceanHeightAttr', message = 'Rebuilding Ocean Hooks', verbose = False)

	## Find all in scene with oceanHeightHook Attribute
	## Setup the progress bar
	if not cmds.objExists('Shot_FX_hrc'):
		cmds.group(n = 'Shot_FX_hrc', em = True)
	if not  cmds.objExists('BOAT_OceanLocators_hrc'):
		cmds.group(n = 'BOAT_OceanLocators_hrc', em = True)
		cmds.parent('BOAT_OceanLocators_hrc', 'Shot_FX_hrc')
		cmds.setAttr('BOAT_OceanLocators_hrc.visibility', 0)

	## Clean up existing hooks in the scene
	inprogressBar.updateProgress(percent = 50, doingWhat = 'Cleaning up now..')

	if object.startswith('All'):
		object = ''
	elif object.startswith('Dock'):
		object = 'BLD'
	elif object.startswith('Boat'):
		object = 'CHAR'
	elif object.startswith('Prop'):
		object = 'PROP'

	cleanUpExisting(filters = [object])
	if object == 'BLD':
		## Clean-up the ADEF BLD's oceanHook control animatable groups...
		[cmds.delete(transform) for transform in cmds.ls(type = 'transform') if transform.endswith('_oceanCtrls_hrc')]

	## Rebuild / build the hooks for boats in the scene
	inprogressBar.updateProgress(percent = 75, doingWhat = 'performHookBoatsToOcean now..')
	startTime = time.time()
	performHookBoatsToOcean()
	print 'TOTAL TIME FOR performHookBoatsToOcean: %s' % (time.time()-startTime)

	## Now make sure cycle check is off because it's a fn pita
	cmds.cycleCheck(e = 0)
	_finished(inprogressBar)
コード例 #19
0
    def connect_arm(self, arm_comp):
        if not cmds.pluginInfo("rotationDriver.py", q=True, loaded=True):
            cmds.loadPlugin("rotationDriver.py", quiet=True)

        if not cmds.pluginInfo("maya-math-nodes.mll", q=True, loaded=True):
            cmds.loadPlugin("maya-math-nodes.mll", quiet=True)

        cycle = cmds.cycleCheck(q=True, evaluation=True)
        try:
            cmds.cycleCheck(evaluation=False)

            self.insert_dummy_arm(arm_comp)
            self.add_arm_connection_attr(arm_comp)
            self.add_arm_connection_object(arm_comp)
            self.reparent_arm_hierarchy(arm_comp)
            self.set_softik_dummy(arm_comp)

        except Exception:
            import traceback as tb
            tb.print_exc()
            tb.print_stack()

        finally:
            cycle = cmds.cycleCheck(evaluation=cycle)
コード例 #20
0
ファイル: ArmRig.py プロジェクト: jaredauty/Rigging
    def generate(self):
        cmds.cycleCheck(e=False)
        # -- Duplicate joints and rename for IK-FK switch --- #
        self.m_bindJoints = self.duplicateJoints(self.m_startJoints, "BIND")
        rc.addToLayer(self.m_sceneData, "ref", self.m_bindJoints[0])
        self.m_ikJoints = self.duplicateJoints(self.m_startJoints, "IK")
        rc.addToLayer(self.m_sceneData, "ref", self.m_ikJoints[0])
        self.m_fkJoints = self.duplicateJoints(self.m_startJoints, "FK")
        rc.addToLayer(self.m_sceneData, "ref", self.m_fkJoints[0])

        # -- Create shoulder locator -- #
        self.m_shoulderLocator = self.m_name+"_shoulder_CTRL"
        self.m_shoulderLocator = cmds.spaceLocator(n=self.m_shoulderLocator)[0]
        rc.addToLayer(self.m_sceneData, "detailCtrl", self.m_shoulderLocator)
        rc.orientControl(self.m_shoulderLocator, self.m_startJoints.m_shoulder)
        shoulderGRPs = rg.add3Groups(
            self.m_shoulderLocator, 
            ["_SDK", "_CONST", "_0"]
            )
        cmds.parent(shoulderGRPs[-1], self.m_group)
        # -- Setup FK rig -- #
        tmpList = self.m_fkJoints.getJointList()
        self.m_fkRig = fk.FKArmRig(self.m_sceneData, tmpList, self.m_name+"_FK", self.m_baseName)
        self.m_fkRig.generate()
        cmds.parent(self.m_fkRig.m_group, self.m_group)
        cmds.parentConstraint(
            self.m_shoulderLocator, 
            self.m_fkRig.getMainTransform(),
            mo=True
            )
        # -- Setup IK rig -- #
        tmpList = self.m_ikJoints.getJointList()
        self.m_ikRig = ik.IKArmRig(
            self.m_sceneData,
            tmpList, 
            self.m_name+"_IK",
            self.m_baseName,
            self.m_isMirrored,
            self.m_twistAxis
            )
        self.m_ikRig.generate()
        cmds.parent(self.m_ikRig.m_group, self.m_group)
        cmds.pointConstraint(
            self.m_shoulderLocator,
            self.m_ikRig.getMainTransform(),
            mo=True
            )
        # -- Setup BIND rig -- #
        tmpList = self.m_bindJoints.getJointList()
        self.m_bindRig = bind.BINDArmRig(
            self.m_sceneData,
            tmpList, 
            self.m_name+"_BIND",
            self.m_baseName,
            self.m_blendControl,
            self.m_numUpperControls,
            self.m_numLowerControls,
            self.m_numUpperJoints,
            self.m_numLowerJoints,
            self.m_upperStretchJoints,
            self.m_lowerStretchJoints,
            self.m_isMirrored,
            self.m_twistAxis,
            self.m_rigWrist
            )    
        self.m_bindRig.generate()
        cmds.parent(self.m_bindRig.m_group, self.m_group) 
        cmds.pointConstraint(
            self.m_shoulderLocator,
            self.m_bindRig.getMainTransform(),
            mo=True
            )
        # rig the blend control for aestethics
        if self.m_rigWrist:
            self.rigBlendControl(self.m_bindRig.getWristCtrl())


        # -- Connect up rigs -- #
        try:
            tmp = self.m_blendControl
        except:
            self.m_blendControl = self.createBlendControl()
        self.connectIKFK()
        # -- Setup visibility -- #
        self.setupVisibility()
         
        cmds.cycleCheck(e=True)
        
        # Add all controls
        rc.addToControlDict(
            self.m_allControls,
            "%s_shoulderLocator" %(self.m_baseName),
            self.m_shoulderLocator
            )
        rc.addDictToControlDict(self.m_allControls, self.m_fkRig.getAllControls())
        rc.addDictToControlDict(self.m_allControls, self.m_ikRig.getAllControls())
        rc.addDictToControlDict(self.m_allControls, self.m_bindRig.getAllControls())

        self.m_isGenerated = True
コード例 #21
0
def maya_came():
    cmds.cycleCheck(e=0)
    stm = cmds.playbackOptions(q=True, minTime=True)
    etm = cmds.playbackOptions(q=True, maxTime=True)
    timRg = etm - stm + 1
    cames = cmds.ls(sl=True)
    cmds.polyCube(name='locS_')
    cmds.delete('locS_*')

    localS = []

    for i in cames:
        loco1 = cmds.spaceLocator(name=i)
        loco1New = cmds.rename('locS_' + loco1[0])
        cmds.addAttr(longName='FlimOffset', attributeType='double2')
        cmds.addAttr(longName='XX',
                     attributeType='double',
                     parent='FlimOffset')
        cmds.addAttr(longName='YY',
                     attributeType='double',
                     parent='FlimOffset')
        cmds.addAttr(longName='focal', attributeType='float')
        cmds.addAttr(longName='view', attributeType='float')
        cmds.addAttr(longName='hF', attributeType='float')
        cmds.addAttr(longName='ox', attributeType='float')
        cmds.addAttr(longName='oy', attributeType='float')
        localS.append(loco1New)

    for i2 in range(0, int(timRg + 1), 1):
        cons = 0
        for i3 in cames:
            cmds.select(i3)
            caT = cmds.xform(q=1, ws=1, t=1)
            caR = cmds.xform(q=1, ws=1, ro=1)
            hfa = cmds.camera(i3, q=True, hfa=True)
            vfa = cmds.camera(i3, q=True, vfa=True)
            hfo = cmds.camera(i3, q=True, hfo=True)
            vfo = cmds.camera(i3, q=True, vfo=True)
            horHo = hfo / hfa
            vorHo = vfo / hfa
            cFL = cmds.camera(cames[cons], q=True, fl=True)
            view = cmds.camera(cames[cons], q=True, hfv=True)
            hfa = cmds.camera(cames[cons], q=True, hfa=True)
            cmds.setAttr(localS[cons] + '.XX', (horHo * -1))
            cmds.setAttr(localS[cons] + '.YY', (vorHo * -1))
            cmds.setAttr(localS[cons] + '.focal', cFL)
            cmds.setAttr(localS[cons] + '.view', view)
            cmds.setAttr(localS[cons] + '.hF', hfa)
            cmds.setAttr(localS[cons] + '.ox', hfo)
            cmds.setAttr(localS[cons] + '.oy', vfo)
            cmds.setAttr(localS[cons] + '.tx', caT[0])
            cmds.setAttr(localS[cons] + '.ty', caT[1])
            cmds.setAttr(localS[cons] + '.tz', caT[2])
            cmds.setAttr(localS[cons] + '.rx', caR[0])
            cmds.setAttr(localS[cons] + '.ry', caR[1])
            cmds.setAttr(localS[cons] + '.rz', caR[2])
            cmds.setKeyframe(localS[cons], at='XX')
            cmds.setKeyframe(localS[cons], at='YY')
            cmds.setKeyframe(localS[cons], at='focal')
            cmds.setKeyframe(localS[cons], at='view')
            cmds.setKeyframe(localS[cons], at='hF')
            cmds.setKeyframe(localS[cons], at='ox')
            cmds.setKeyframe(localS[cons], at='oy')
            cmds.setKeyframe(localS[cons], at='rz')
            cmds.setKeyframe(localS[cons], at='tx')
            cmds.setKeyframe(localS[cons], at='ty')
            cmds.setKeyframe(localS[cons], at='tz')
            cmds.setKeyframe(localS[cons], at='rx')
            cmds.setKeyframe(localS[cons], at='ry')
            cmds.setKeyframe(localS[cons], at='rz')
            cons = cons + 1
        cmds.currentTime(stm + i2)
    cmds.currentTime(stm)
コード例 #22
0
    def armGeneration(self, jointAmounts):
        curveName = 'advancedCurve1'
        for each in range(jointAmounts):
            mc.joint(p=(each, 0, 0))
            mc.joint(n='advanced_' + str(each + 1) + '_JNT',
                     e=True,
                     rad=0.5,
                     oj='xyz',
                     sao='yup')
        mc.curve(n=curveName, p=[(0, 0, 0), (jointAmounts - 1, 0, 0)], d=1)
        mc.ikHandle(sj='advanced_1_JNT',
                    ee='advanced_' + jointAmounts + '_JNT',
                    c='advancedCurve1',
                    p=2,
                    w=.5,
                    ccv=False,
                    scv=False,
                    sol='ikSplineSolver',
                    tws="Linear",
                    roc=True,
                    pcv=False)

        start = mc.spaceLocator(n='Start')
        mc.move(0, 1, 0)
        end = mc.spaceLocator(n='End')
        mc.move(jointAmounts - 1, 1, 0)

        mc.select('ikHandle1')
        mc.setAttr("ikHandle1.dTwistControlEnable", 1)
        mc.setAttr("ikHandle1.dWorldUpType", 2)
        mc.connectAttr('Start.xformMatrix', 'ikHandle1.dWorldUpMatrix')
        mc.connectAttr('End.xformMatrix', 'ikHandle1.dWorldUpMatrixEnd')

        mc.select(clear=True)
        mc.joint(n='joint1Con', p=(0, 0, 0))
        mc.joint(n='joint2Con', p=(jointAmounts - 1, 0, 0))

        #create cluster
        degree = mc.getAttr('advancedCurve1.degree')
        span = mc.getAttr('advancedCurve1.spans')
        CVAmount = degree + span
        for eachCV in range(CVAmount):
            mc.select('advancedCurve1.cv[' + str(eachCV) + ']')
            mc.cluster(en=1)

        #mc.parentConstraint('joint1Con','Start',mo = True)
        mc.parentConstraint('joint2Con', 'End', mo=True)
        mc.cycleCheck(e=False)
        mc.parentConstraint('joint1Con', 'cluster1Handle')
        mc.parentConstraint('joint2Con', 'cluster2Handle')

        #ignore X Axis of Twisting
        mc.select(clear=True)
        mc.joint(n='joint1Aim', p=(0, 0, 0), rad=0.7)
        mc.parentConstraint('joint1Aim', 'Start', mo=True)
        mc.connectAttr('joint1Con.rotateZ', 'joint1Aim.rotateZ')
        mc.connectAttr('joint1Con.rotateY', 'joint1Aim.rotateY')

        #stretch joint
        mc.select(curveName)
        mc.arclen(curveName, ch=True)
        mc.delete(all=True, e=True)
        for each in range(jointAmounts):
            mc.expression(o='advanced_' + str(each + 1) + '_JNT',
                          s='scaleX=curveInfo1.arcLength/' + 'jointAmounts-1')
コード例 #23
0
ファイル: ikLimb.py プロジェクト: jonntd/zentools
	def create(self):

		mc.cycleCheck(e=False)

		if mc.objExists(self.parent):
			self.group=mc.createNode('transform',n=uniqueNames(self.name),p=self.parent)
		else:
			self.group=mc.createNode('transform',n=uniqueNames(self.name))

		self.jointParent=''
		if len(iterable(mc.listRelatives(self.joints[0],p=True)))>0:
			self.jointParent=mc.listRelatives(self.joints[0],p=True)[0]
		else:
			self.jointParent=mc.createNode('transform',n=uniqueNames(self.name+'CtrlJointGroup'))
			mc.parent(self.joints[0],self.jointParent)

		cMuscleObjects=[]

		# create control joints

		self.ctrlJoints=[]
		for j in self.joints:

			cj=mc.createNode('joint',p=j,n=uniqueNames(self.name+'CtrlJoint'))

			if len(self.ctrlJoints)==0:
				mc.parent(cj,self.group)
				if mc.objExists(self.jointParent):
					self.jointParent=mc.rename(ParentSpace(cj,self.jointParent)[0],self.name+'CtrlJoints')
				else:
					self.jointParent=mc.rename(ParentSpace(cj)[0],self.name+'CtrlJoints')
			else:
				mc.parent(cj,self.ctrlJoints[-1])

			mc.setAttr(cj+'.r',*mc.getAttr(j+'.r')[0])
			mc.setAttr(cj+'.jo',*mc.getAttr(j+'.jo')[0])
			self.originalRotations[cj+'.r']=list(mc.getAttr(cj+'.r')[0])

			mc.setAttr(j+'.r',0,0,0)
			mc.setAttr(cj+'.r',0,0,0)

			mc.setAttr(cj+'.s',1,1,1)
			mc.setAttr(cj+'.radius',mc.getAttr(j+'.radius')*1.5)#0)
			mc.setAttr(cj+'.ovc',10)
			mc.connectAttr(j+'.pa',cj+'.pa')

			if self.joints.index(j)<len(self.joints)-1:
				childList=removeAll\
				(
					iterable(mc.listRelatives(self.joints[self.joints.index(j)+1],c=True,ad=True))+[self.joints[self.joints.index(j)+1]],
					iterable(mc.listRelatives(j,c=True,ad=True))+[j]
				)

				chList=childList
				for c in chList:
					if mc.nodeType(c) not in ['transform','joint','cMuscleObject']:
						childList.remove(c)
					if mc.nodeType(c) in ['transform','joint']:
						for a in ['.t','.tx','.ty','.tz','.r','.rx','.ry','.rz']:
							if mc.connectionInfo(c+a,id=True) or mc.getAttr(c+a,l=True) or mc.getAttr(c+'.io'):
								childList.remove(c)
								break

				if j==self.joints[-2]:
					childList.append(self.joints[-1])

				for jc in childList:
					if mc.nodeType(jc)=='transform' or mc.nodeType(jc)=='joint':
						if jc in self.joints[:-1]:
							mc.parentConstraint(cj,jc,mo=True)
						else:
							mc.parentConstraint(cj,jc,sr=('x','y','z'),mo=True)
					elif 'cMuscle' in mc.nodeType(jc):
						cMuscleObjects.append(jc)

			else:
				mc.parentConstraint(cj,j,st=('x','y','z'),mo=True)

			self.ctrlJoints.append(cj)

		mc.hide(self.jointParent)
		mc.setAttr(self.ctrlJoints[1]+'.ssc',False)

		# create ik

		self.ikHandle,self.endEffector=mc.ikHandle(sol='ik2Bsolver',sj=self.ctrlJoints[0],ee=self.ctrlJoints[-1],n=uniqueNames(self.name+'Handle'))
		self.endEffector=mc.rename(self.endEffector,self.name+'Effector')
		mc.setAttr(self.ikHandle+'.snapEnable',False)
		mc.hide(self.ikHandle)
		mc.setAttr(self.ikHandle+'.ikBlend',0)

		for j in self.originalRotations:
			if isIterable(self.originalRotations[j]):
				mc.setAttr(j,*self.originalRotations[j])
			else:
				mc.setAttr(j,self.originalRotations[j])

		# look for twist joints

		if self.twist:
			skipAxis=removeAll(self.orientAxis,['x','y','z'])
			twistJoints=removeAll([self.joints[-2],self.joints[-1]],hierarchyBetween(self.joints[-2],self.joints[-1],type='joint'))
			for i in range(0,len(twistJoints)):
				tj=twistJoints[i]
				oc=mc.orientConstraint(self.ctrlJoints[-1],tj,sk=skipAxis,mo=True)
				if i>0:
					oc=mc.orientConstraint(self.ctrlJoints[-2],tj,sk=skipAxis,mo=True)
					wal=mc.orientConstraint(oc,q=True,wal=True)
					distToBend=distanceBetween(self.ctrlJoints[-2],tj)
					distToEnd=distanceBetween(self.ctrlJoints[-1],tj)
					mc.setAttr(oc+'.'+wal[-1],distToEnd/(distToBend+distToEnd))
					mc.setAttr(oc+'.'+wal[-2],distToBend/(distToBend+distToEnd))

		# make stretchy

		db=mc.createNode('distanceBetween')
		mc.connectAttr(self.ctrlJoints[0]+'.t',db+'.p1')

		pmm1=mc.createNode('pointMatrixMult')
		pmm2=mc.createNode('pointMatrixMult')

		mc.connectAttr(self.ikHandle+'.t',pmm1+'.ip')
		mc.connectAttr(self.ikHandle+'.pm[0]',pmm1+'.im')

		mc.connectAttr(pmm1+'.o',pmm2+'.ip')
		mc.connectAttr(self.ctrlJoints[0]+'.pim[0]',pmm2+'.im')

		mc.connectAttr(pmm2+'.o',db+'.p2')

		mdl=mc.createNode('multDoubleLinear')
		mc.connectAttr(db+'.d',mdl+'.i1')
		mc.setAttr(mdl+'.i2',1.0/mc.getAttr(db+'.d'))
		cn=mc.createNode('clamp')
		for i in range(0,3):
			c=['r','g','b'][i]
			a=['x','y','z'][i]
			mc.connectAttr(mdl+'.o',cn+'.ip'+c)
			mc.setAttr(cn+'.mn'+c,1)
			mc.connectAttr(mdl+'.o',cn+'.mx'+c)
			mc.connectAttr(cn+'.op'+c,self.ctrlJoints[0]+'.s'+a)

		for cmo in cMuscleObjects:
			mdlcm=mc.createNode('multDoubleLinear')
			mc.setAttr(mdlcm+'.i1',mc.getAttr(cmo+'.length'))
			mc.connectAttr(cn+'.op'+['r','g','b'][['x','y','z'].index(self.orientAxis)],mdlcm+'.i2')
			mc.connectAttr(mdlcm+'.o',cmo+'.length')


		# create control objects or set control object pivots

		poleOffset=distanceBetween(self.ctrlJoints[1],self.ctrlJoints[0])*2

		for i in range(0,len(self.controlObjects)-1):
			if mc.objExists(self.controlObjects[i]):
				mc.xform(self.controlObjects[i],ws=True,piv=mc.xform(self.ctrlJoints[-1],q=True,ws=True,rp=True))
			else:
				if 'r' not in self.handleOptions[i] and 'radius' not in self.handleOptions[i]:
					self.handleOptions[i]['r']=distanceBetween(self.ctrlJoints[-1],self.ctrlJoints[0])/4
				if 'name' not in self.handleOptions[i] and 'n' not in self.handleOptions[i]:
					self.handleOptions[i]['n']=self.joints[i]+'_ctrl'
				if 'x' not in self.handleOptions[i] and 'xform' not in self.handleOptions[i]:
					self.handleOptions[i]['xform']=self.joints[i]
				if 'aim' not in self.handleOptions[i] and 'a' not in self.handleOptions[i]:
					self.handleOptions[i]['aim']=self.aimVector
				self.handleOptions[i]['parent']=self.group
				self.handleOptions[-i]['pointTo']=self.joints[i]
				self.handleOptions[i]['aimAt']=self.joints[i]
				self.handles.append(Handle(**self.handleOptions[i]))
				self.controlObjects[i]=(self.handles[-1].transforms[-1])

		if not mc.objExists(self.controlObjects[-1]):
			if 'name' not in self.handleOptions[-1] and 'n' not in self.handleOptions[-1]:
				self.handleOptions[-1]['n']=self.joints[1]+'_aimCtrl'
			if 'x' not in self.handleOptions[-1] and 'xform' not in self.handleOptions[-1]:
				self.handleOptions[-1]['x']=self.ctrlJoints[1]
			if 'aim' not in self.handleOptions[i] and 'a' not in self.handleOptions[i]:
				self.handleOptions[i]['aim']=self.poleVector
			self.handleOptions[-1]['parent']=self.group
			self.handleOptions[-1]['pointTo']=self.joints[1]
			self.handleOptions[-1]['aimAt']=self.joints[1]
			self.handles.append(Handle(**self.handleOptions[-1]))
			self.controlObjects[-1]=(self.handles[-1].transforms[-1])
			mc.move\
			(
				poleOffset*(self.poleVector[0]),
				poleOffset*(self.poleVector[1]),
				poleOffset*(self.poleVector[2]),
				self.controlObjects[-1],
				r=True,os=True,wd=True
			)

		# add and set control attributes

		mc.setAttr(self.controlObjects[-1]+'.v',k=False)
		for attr in ['.sx','.sy','.sz']:
			mc.setAttr(self.controlObjects[-1]+attr,l=True,k=False,cb=False)
			mc.setAttr(self.ikHandle+attr,l=True,k=False,cb=False)
		for attr in ['.rx','.ry','.rz']:
			mc.setAttr(self.controlObjects[-1]+attr,k=False,cb=False)
		for attr in ['.tx','.ty','.tz']:
			mc.setAttr(self.group+attr,l=True,k=False,cb=False)
			mc.setAttr(self.controlObjects[0]+attr,l=True,k=False,cb=False)

		mc.setAttr(self.ikHandle+'.v',k=False,cb=False)

		for attr in ['.tx','.ty','.tz']:
			mc.setAttr(self.controlObjects[1]+attr,l=True,k=False,cb=False)

		if not mc.objExists(self.controlObjects[-2]+'.twist'):
			mc.addAttr(self.controlObjects[-2],at='doubleAngle',ln='twist',k=True)
		if not mc.objExists(self.controlObjects[-2]+'.sway') and self.sway:
			mc.addAttr(self.controlObjects[-2],at='doubleAngle',ln='sway',k=1)
		if not mc.objExists(self.controlObjects[-2]+'.stretch'):
			mc.addAttr(self.controlObjects[-2],at='double',ln='stretch',k=1,dv=self.stretch,min=0)
		if not mc.objExists(self.controlObjects[-2]+'.squash'):
			mc.addAttr(self.controlObjects[-2],at='double',ln='squash',k=1,dv=self.squash,min=0,max=99)
		if not mc.objExists(self.controlObjects[-2]+'.ikSwitch'):
			mc.addAttr(self.controlObjects[-2],at='enum',ln='ikSwitch',en='ik:fk',k=True,dv=1)# if self.switch=='fk' else 0

		#sway control

		if self.sway:

			adl=mc.createNode('addDoubleLinear')
			mc.connectAttr(self.ctrlJoints[1]+'.r'+self.poleAxis,adl+'.i1')
			mc.connectAttr(self.controlObjects[-2]+'.sway',adl+'.i2')
			childList=removeAll\
			(
				iterable(mc.listRelatives(self.joints[2],c=True,ad=True)),
				iterable(mc.listRelatives(self.joints[1],c=True,ad=True))
			)+[self.joints[2],self.joints[1]]
			for c in childList:
				if mc.nodeType(c)=='transform' or mc.nodeType(c)=='joint':
					pc=mc.parentConstraint(c,q=True)
					nc=listNodeConnections(self.ctrlJoints[1],pc,s=True,d=True)
					for conn in nc:
						if conn[0]==self.ctrlJoints[1]+'.rotate':
							mc.disconnectAttr(conn[0],conn[1])
							for a in removeAll(self.poleAxis,['x','y','z']):
								mc.connectAttr(conn[0]+a.upper(),conn[1]+a.upper(),f=True)
							mc.connectAttr(adl+'.o',conn[1]+self.poleAxis.upper(),f=True)

		# ik/fk switch

		for i in range(0,3):

			c=['r','g','b'][i]
			a=['x','y','z'][i]
			adl=mc.createNode('addDoubleLinear')
			mdl1=mc.createNode('multDoubleLinear')
			mc.setAttr(mdl1+'.i2',.01)
			mdl2=mc.createNode('multDoubleLinear')
			mc.setAttr(mdl2+'.i2',.01)
			revNode=mc.createNode('reverse')
			mc.setAttr(adl+'.i1',1)

			mc.connectAttr(	mdl1+'.o',adl+'.i2')
			mc.connectAttr(self.controlObjects[-2]+'.stretch',mdl1+'.i1')

			mc.connectAttr(	mdl2+'.o',revNode+'.ix')
			mc.connectAttr(self.controlObjects[-2]+'.squash',mdl2+'.i1')

			mc.connectAttr(adl+'.o',cn+'.mx'+c,f=True)
			mc.connectAttr(revNode+'.ox',cn+'.mn'+c,f=True)

		if not mc.objExists(self.controlObjects[-2]+'.zenPreviousIKState'):
			if self.switch=='fk':
				mc.addAttr(self.controlObjects[-2],at='long',ln='zenPreviousIKState',k=0,dv=1)
			else:
				mc.addAttr(self.controlObjects[-2],at='long',ln='zenPreviousIKState',k=0,dv=0)
		if not mc.objExists(self.controlObjects[-2]+'.zenPreviousIKParent'):
			if self.switch=='fk':
				mc.addAttr(self.controlObjects[-2],at='long',ln='zenPreviousIKParent',k=0,dv=1)
			else:
				mc.addAttr(self.controlObjects[-2],at='long',ln='zenPreviousIKParent',k=0,dv=0)

		for i in range(0,2):
			for c in mc.listRelatives(self.controlObjects[i],s=True):
				mc.connectAttr(self.controlObjects[-2]+'.ikSwitch',c+'.v')

		mc.connectAttr(self.controlObjects[-2]+'.twist',self.ikHandle+'.twist')

		rev=mc.createNode('reverse')
		mc.connectAttr(self.controlObjects[-2]+'.ikSwitch',rev+'.ix')
		mc.connectAttr(rev+'.ox',self.ikHandle+'.ikBlend')

		for c in mc.listRelatives(self.controlObjects[-1],s=True):
			mc.connectAttr(rev+'.ox',c+'.v')

		# parent spaces

		for i in [0,1,2]:
			if(mc.objExists(self.jointParent)and i in [0,2]):
				ParentSpace(self.controlObjects[i],self.jointParent)
			else:
				ParentSpace(self.controlObjects[i],self.controlObjects[i-1])

		ParentSpace(self.controlObjects[-1],self.controlObjects[-2])
		if mc.objExists(self.jointParent):
			ParentSpace(self.controlObjects[-1],self.jointParent).setParent(self.jointParent)
			ParentSpace(self.controlObjects[-2],self.jointParent).setParent(self.jointParent)
		else:
			ParentSpace(self.controlObjects[-1],self.controlObjects[0])

		if self.switch=='fk':
			ParentSpace(self.controlObjects[2],self.controlObjects[1])

		for co in self.controlObjects[2:]:
			freeze(co,t=True)

		mc.aimConstraint\
		(
			self.ctrlJoints[1],self.controlObjects[-1],
			aim=(self.aimVector[0],self.aimVector[1],self.aimVector[2]),
			wuo=self.ctrlJoints[1],
			wut='objectrotation',
			mo=True
		)

		if mc.objExists(self.jointParent):
			mc.setAttr(self.controlObjects[0]+'.parentTo',l=True,k=False,cb=False)
		mc.setAttr(self.controlObjects[1]+'.parentTo',l=True,k=False,cb=False)

		#constraints

		orientConstraints=['','','']
		for i in [2,1,0]:
			orientConstraints[i]=mc.orientConstraint(self.controlObjects[i],self.ctrlJoints[i],mo=True)[0]
			mc.setAttr(self.controlObjects[i]+'.v',k=False)
			for attr in ['.sx','.sy','.sz']:
				mc.setAttr(self.controlObjects[i]+attr,l=True,k=False,cb=False)
			if i==1:
				if not self.sway:
					mc.setAttr(self.controlObjects[i]+'.r'+self.poleAxis,l=True,k=False,cb=False)
				mc.setAttr(self.controlObjects[i]+'.r'+self.orientAxis,l=True,k=False,cb=False)

		self.poleVectorConstraint=mc.poleVectorConstraint(self.controlObjects[-1],self.ikHandle)[0]

		for oc in orientConstraints[:-1]:
			octl=mc.orientConstraint(oc,q=True,tl=True)
			ocwal=mc.orientConstraint(oc,q=True,wal=True)
			weightAlias=ocwal[octl.index(self.controlObjects[orientConstraints.index(oc)])]
			mc.connectAttr(self.controlObjects[-2]+'.ikSwitch',oc+'.'+weightAlias)

		mc.parent(self.ikHandle,self.controlObjects[2],r=False)

		if self.switch=='ik':
			mc.setAttr(self.controlObjects[-2]+'.ikSwitch',0)

		# link for asset detection

		if 'zenIkFkLimbCtrls' not in mc.listAttr(self.group):
			mc.addAttr(self.group,ln='zenIkFkLimbCtrls',at='message',m=True)
		if 'zenIkFkLimbCtrlJoints' not in mc.listAttr(self.group):
			mc.addAttr(self.group,ln='zenIkFkLimbCtrlJoints',at='message',m=True)
		for co in self.controlObjects:
			if 'zenCtrl' not in mc.listAttr(co):
				mc.addAttr(co,ln='zenCtrl',at='message')
			mc.connectAttr(co+'.zenCtrl',self.group+'.zenIkFkLimbCtrls['+str(firstOpenPlug(self.group+'.zenIkFkLimbCtrls'))+']')
		for cj in self.ctrlJoints:
			if 'zenCtrl' not in mc.listAttr(cj):
				mc.addAttr(cj,ln='zenCtrl',at='message')
			mc.connectAttr(cj+'.zenCtrl',self.group+'.zenIkFkLimbCtrlJoints['+str(firstOpenPlug(self.group+'.zenIkFkLimbCtrlJoints'))+']')

		for bp in self.bindPoses:
			for co in self.controlObjects:
				mc.dagPose(co,a=True,n=bp)

		self[:]=[self.group]+self.controlObjects

		mc.cycleCheck(e=True)

		mc.select(self[-2])
コード例 #24
0
ファイル: arcSystem.py プロジェクト: jonntd/dmptools
 def organizeSystem(self, arcSystem):
     
     smooth = arcSystem["values"]["smooth"][0]
     translate = arcSystem["values"]["translate"]
     rotate = arcSystem["values"]["rotate"]
     scale = arcSystem["values"]["scale"]
     rotateWire = arcSystem["values"]["rotateWire"][0]
     
     # create group of all the arc elements
     cmds.select(None, r = True)
     for mesh in arcSystem["arcs"]:
         cmds.select(arcSystem["arcs"][mesh][0], add = True)
         cmds.select(arcSystem["arcs"][mesh][1], add = True)
     
     arcSystemGroup = cmds.group(n = "arcSystem_GRP")
     arcExpression = "// arcs expression\n"
     
     # add global smooth attribute
     cmds.addAttr(arcSystemGroup, longName='globalSmooth', at="long", defaultValue=smooth, min=0, max=6)
     # add global translate attribute
     cmds.addAttr(arcSystemGroup, longName='globalSlide', defaultValue=translate[2], min=-40, max=40)
     # add global rotate attribute
     cmds.addAttr(arcSystemGroup, longName='globalRotate', attributeType = "double3" )
     cmds.addAttr(arcSystemGroup, longName='rX', attributeType="double", parent='globalRotate')
     cmds.addAttr(arcSystemGroup, longName='rY', attributeType="double", parent='globalRotate')
     cmds.addAttr(arcSystemGroup, longName='rZ', attributeType="double", parent='globalRotate')
     cmds.setAttr(arcSystemGroup+".globalRotate", rotate[0], rotate[1], rotate[2], type="double3")
     # add global scale attribute
     cmds.addAttr(arcSystemGroup, longName='globalScale', attributeType = "double3" )
     cmds.addAttr(arcSystemGroup, longName='sX', attributeType="double", parent='globalScale')
     cmds.addAttr(arcSystemGroup, longName='sY', attributeType="double", parent='globalScale')
     cmds.addAttr(arcSystemGroup, longName='sZ', attributeType="double", parent='globalScale')
     cmds.setAttr(arcSystemGroup+".globalScale", scale[0], scale[1], scale[2], type="double3")
     
     cmds.addAttr(arcSystemGroup, longName='globalRotateWire', defaultValue=rotateWire)
     
     for mesh in arcSystem["arcs"]:
         
         wireGroup = [wireGroup for wireGroup in cmds.listConnections(cmds.listRelatives(mesh)) if cmds.nodeType(wireGroup) == "groupId"][0]
         wireNode = [wireNode for wireNode in cmds.listConnections(wireGroup) if cmds.nodeType(wireNode) == "wire"][0]
         
         # add visibility attr
         cmds.addAttr(arcSystemGroup, longName=mesh+'Visibility', nn="Visibility", at="bool", defaultValue=True)
         # add attributes per mesh translateAttr
         cmds.addAttr(arcSystemGroup, longName=mesh+'Slide', defaultValue=translate[2], min=-40, max=40)
         # rotateAttr
         cmds.addAttr(arcSystemGroup, longName=mesh+'Rotate', attributeType="double3")
         cmds.addAttr(arcSystemGroup, longName=mesh+'rX', attributeType="double", parent=mesh+'Rotate')
         cmds.addAttr(arcSystemGroup, longName=mesh+'rY', attributeType="double", parent=mesh+'Rotate')
         cmds.addAttr(arcSystemGroup, longName=mesh+'rZ', attributeType="double", parent=mesh+'Rotate')
         
         # scaleAttr
         cmds.addAttr(arcSystemGroup, longName=mesh+'Scale', attributeType="double3")
         cmds.addAttr(arcSystemGroup, longName=mesh+'sX', attributeType="double", parent=mesh+'Scale')
         cmds.addAttr(arcSystemGroup, longName=mesh+'sY', attributeType="double", parent=mesh+'Scale')
         cmds.addAttr(arcSystemGroup, longName=mesh+'sZ', attributeType="double", parent=mesh+'Scale')
         
         # add expression  to link meshes to the arc group
         arcExpression += arcSystem['arcs'][mesh][4]+".divisions = "+arcSystemGroup+".globalSmooth;\n"
         arcExpression += wireNode+".rotation = "+arcSystemGroup+".globalRotateWire;\n"
         arcExpression += mesh+".translateZ = "+arcSystemGroup+".globalSlide + "+arcSystemGroup+"."+mesh+"Slide;\n"
         arcExpression += mesh+".rotateX = "+arcSystemGroup+".rX + "+arcSystemGroup+"."+mesh+"rX;\n"
         arcExpression += mesh+".rotateY = "+arcSystemGroup+".rY + "+arcSystemGroup+"."+mesh+"rY;\n"
         arcExpression += mesh+".rotateZ = "+arcSystemGroup+".rZ + "+arcSystemGroup+"."+mesh+"rZ;\n"
         arcExpression += mesh+".scaleX = "+arcSystemGroup+".sX + "+arcSystemGroup+"."+mesh+"sX;\n"
         arcExpression += mesh+".scaleY = "+arcSystemGroup+".sY + "+arcSystemGroup+"."+mesh+"sY;\n"
         arcExpression += mesh+".scaleZ = "+arcSystemGroup+".sZ + "+arcSystemGroup+"."+mesh+"sZ;\n"
         arcExpression += mesh+".visibility = "+arcSystemGroup+"."+mesh+"Visibility;\n"
         
     # set expression
     globalSlideExpr = cmds.expression(n = arcSystemGroup+"_expression", s = arcExpression)
     
     cmds.cycleCheck(e = False)
コード例 #25
0
ファイル: generalToolsUI.py プロジェクト: Italic-/maya-prefs
            "default":True
        },{ "name":"displayAffected",
            "command":"cmds.displayAffected(onOff)",
            "default":False
        },{ "name":"undoQueue",
            "command":"if onOff: cmds.undoInfo( state=True, infinity=False, length=300)",
            "default":True
        },{ "name":"scrubbingUndo",
            "command":"commandsMod.scrubbingUndo(onOff)",
            "default":True
        },{ "name":"zoomTowardsCenter",
            "command":"cmds.dollyCtx('dollyContext', edit=True, dollyTowardsCenter=onOff)",
            "default":cmds.dollyCtx('dollyContext', query=True, dollyTowardsCenter=True)
        },{ "name":"cycleCheck",
            "command":"cmds.cycleCheck(evaluation=onOff)",
            "default":cmds.cycleCheck(query=True, evaluation=True)
        }]    





class GeneralTools_Gui(uiMod.BaseSubUI):
        
    def createLayout(self):     
       
        mainLayout = cmds.rowLayout(numberOfColumns=6, parent=self.parentLayout)
        
        #manipulator orientation
        #cmds.iconTextButton("manipOrientButton", style='textOnly',  label='-', h=self.hb, annotation="Selected objects", command=updateManipOrient)  
        #launchManipOrient()
コード例 #26
0
ファイル: app.py プロジェクト: all-in-one-of/lsapipeline
    def run_app(self):
        """
        Callback from when the menu is clicked.
        """
        ## Tell the artist to be patient... eg not genY
        inprogressBar = pbui.ProgressBarUI(title='Fetching all shot assets:')
        inprogressBar.show()
        inprogressBar.updateProgress(percent=5,
                                     doingWhat='Processing scene info...')
        #self.dbWrap = DoubleBarrel
        #self.sg = doubleBarrelWrapper._getShotgunObject(self.dbWrap, self)
        ## Instantiate the API
        tk = sgtk.sgtk_from_path("T:/software/bubblebathbay")
        debug(app=self,
              method='run_app',
              message='API instanced...\n%s' % tk,
              verbose=False)
        debug(app=self,
              method='run_app',
              message='Fetch Shot Assets launched...',
              verbose=False)

        context = self.context  ## To get the step
        debug(app=self,
              method='run_app',
              message='context: %s' % context,
              verbose=False)
        debug(app=self,
              method='run_app',
              message='context Step...%s' % context.step['name'],
              verbose=False)

        if context.step['name'] == 'Anm' or context.step[
                'name'] == 'Blocking' or context.step['name'] == 'Light':

            ## Build an entity type to get some values from.
            entity = self.context.entity  ## returns {'type': 'Shot', 'name': 'ep100_sh010', 'id': 1166}
            debug(app=self,
                  method='run_app',
                  message='entity... %s' % entity,
                  verbose=False)

            ## Filter for the matching ID for the shot
            sg_filters = [["id", "is", entity["id"]]]
            debug(app=self,
                  method='run_app',
                  message='sg_filters... %s' % sg_filters,
                  verbose=False)

            ## Build an entity type to get some values from.
            sg_entity_type = self.context.entity["type"]  ## returns Shot
            debug(app=self,
                  method='run_app',
                  message='sg_entity_type...\n%s' % sg_entity_type,
                  verbose=False)

            ## DATA
            #import time
            #start = time.time()
            data = self.shotgun.find_one(sg_entity_type,
                                         filters=sg_filters,
                                         fields=['assets'])
            #data = self.dbWrap.find_one(self.sg, sg_entity_type, sg_filters, ['assets'])
            #print 'TIME: %s' % (time.time()-start)
            debug(app=self,
                  method='run_app',
                  message='Assets...\n%s' % data['assets'],
                  verbose=False)

            ## Set the template to the maya publish folder
            maya_assetRootTemplate = tk.templates[self.get_setting(
                'sg_AssetTemplate')]
            debug(app=self,
                  method='run_app',
                  message='Asset template...\n%s' % maya_assetRootTemplate,
                  verbose=False)

            ### NOTE:
            ### ALL CHARS MUST BE RIGGED
            ### ALL PROPS MUST BE RIGGED
            ### ALL BLDS SHOULD BE PUBLISHED TO AN ENV as well as ALL LND
            ### ALL ROOT_HRC GROUPS SHOULD BE CASE SENSITIVE SUCH AS  CHAR_Sydney_hrc

            ## Set model panel to show None before fetch asset
            modelPanels = cmds.getPanel(type='modelPanel')
            if modelPanels:
                [
                    cmds.modelEditor(mp, edit=True, allObjects=False)
                    for mp in modelPanels
                ]

            debug(app=self,
                  method='run_app',
                  message='Looping assets now...',
                  verbose=False)
            for eachAsset in data['assets']:
                ## Turn this into the shotgun friendly name for the fileNames as underscores are not permitted in shotgun filenames for some obscure reason.
                debug(app=self,
                      method='run_app',
                      message='eachAsset[name]...\n%s' % eachAsset['name'],
                      verbose=False)

                inprogressBar.updateProgress(percent=50,
                                             doingWhat='Fetching Assets...')
                x = 50
                if 'CHAR' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(
                        percent=x, doingWhat='Fetching Char Assets...')
                    self.processAsset(tk=tk,
                                      eachAsset=eachAsset,
                                      RIG=True,
                                      MDL=False,
                                      ENV=False,
                                      CHAR=True,
                                      BLD=False,
                                      PROP=False,
                                      templateFile=maya_assetRootTemplate)
                elif 'PROP' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(
                        percent=x, doingWhat='Fetching Prop Assets...')
                    self.processAsset(tk=tk,
                                      eachAsset=eachAsset,
                                      RIG=True,
                                      MDL=False,
                                      ENV=False,
                                      CHAR=False,
                                      BLD=False,
                                      PROP=True,
                                      templateFile=maya_assetRootTemplate)
                elif 'ENV' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(
                        percent=x, doingWhat='Fetching Env Assets...')
                    self.processAsset(tk=tk,
                                      eachAsset=eachAsset,
                                      RIG=False,
                                      MDL=True,
                                      ENV=True,
                                      CHAR=False,
                                      BLD=False,
                                      PROP=False,
                                      templateFile=maya_assetRootTemplate)
                elif 'BLD' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(
                        percent=x, doingWhat='Fetching Env Assets...')
                    self.processAsset(tk=tk,
                                      eachAsset=eachAsset,
                                      RIG=True,
                                      MDL=False,
                                      ENV=False,
                                      CHAR=False,
                                      BLD=True,
                                      PROP=False,
                                      templateFile=maya_assetRootTemplate)
                else:
                    debug(app=self,
                          method='run_app',
                          message='Invalid Asset Type...\n%s' %
                          eachAsset['name'],
                          verbose=False)
                    pass

            ## Set all AD to None
            [
                cmds.assembly(each, edit=True, active='')
                for each in cmds.ls(type='assemblyReference')
            ]

            ## Set model panel to show All
            if modelPanels:
                [
                    cmds.modelEditor(mp, edit=True, allObjects=True)
                    for mp in modelPanels
                ]

            debug(app=self,
                  method='run_app',
                  message='Moving on to save working scene...',
                  verbose=False)
            inprogressBar.updateProgress(percent=75,
                                         doingWhat='Setting Render Globals...')
            ## Now make sure the scene is set to pal and cm and renderglobals
            settings._setRenderGlobals(animation=True)

            ## Now save the working scene
            inprogressBar.updateProgress(percent=90,
                                         doingWhat='Saving vers up scene...')
            shotName = entity['name']
            debug(app=self,
                  method='run_app',
                  message='shotName...\n%s' % shotName,
                  verbose=False)

            work_template = tk.templates['shot_work_area_maya']
            debug(app=self,
                  method='run_app',
                  message='work_template...\n%s' % work_template,
                  verbose=False)

            ## context.step['name'] = Blocking
            try:
                debug(app=self,
                      method='run_app',
                      message="Shot: %s" % shotName,
                      verbose=False)
                debug(app=self,
                      method='run_app',
                      message="context.step: %s" % context.step['name'],
                      verbose=False)
                debug(app=self,
                      method='run_app',
                      message='Trying to fetch pathToWorking now...',
                      verbose=False)
                pathToWorking = r'%s' % tk.paths_from_template(
                    work_template, {
                        "Shot": shotName,
                        "Step": context.step['name']
                    })[0]
                pathToWorking.replace('\\\\', '\\')
                debug(app=self,
                      method='run_app',
                      message='pathToWorking...\n%s' % pathToWorking,
                      verbose=False)
            except:  ## There are NO working files yet so we have to handle this propelry
                ## This needs to be the root folder and 000 for version up\
                ## we need to find the sequence from the workspaces index0 of this is default
                getWorkspace = cmds.workspace(
                    listWorkspaces=True
                )[1]  # Result: [u'default', u'I:/lsapipeline/episodes/eptst/eptst_sh060/Blck/work/maya']
                getSequence = getWorkspace.split('/')[4]
                work_path = work_template.apply_fields({
                    'Sequence':
                    getSequence,
                    'Shot':
                    shotName,
                    'Step':
                    context.step['name']
                })
                debug(app=self,
                      method='run_app',
                      message='New work_path: %s' % work_path,
                      verbose=False)
                pathToWorking = r"%s" % work_template

            ## Scan the folder and find the highest version number
            fileShotName = "".join(shotName.split('_')) or ''
            debug(app=self,
                  method='run_app',
                  message='fileShotName...\n%s' % fileShotName,
                  verbose=False)
            padding = ''
            debug(app=self,
                  method='run_app',
                  message='padding...\n%s' % padding,
                  verbose=False)
            versionNumber = ''
            debug(app=self,
                  method='run_app',
                  message='versionNumber...\n%s' % versionNumber,
                  verbose=False)

            if os.path.exists(pathToWorking):
                debug(app=self,
                      method='run_app',
                      message='Path to working exists...',
                      verbose=False)

                getfiles = os.listdir(pathToWorking)
                debug(app=self,
                      method='run_app',
                      message='getfiles...\n%s' % getfiles,
                      verbose=False)
                ## Remove the stupid Keyboard folder if it exists.. thx autodesk.. not
                if 'Keyboard' in getfiles:
                    getfiles.remove('Keyboard')

                ## Process a clean list now.. trying to remove from the current list is giving me grief and I'm too fn tired to care...
                finalFiles = []
                for each in getfiles:
                    if each.split('.')[0] == fileShotName:
                        finalFiles.append(each)
                    else:
                        pass
                debug(app=self,
                      method='run_app',
                      message='finalFiles...\n%s' % finalFiles,
                      verbose=False)

                if finalFiles:
                    highestVersFile = max(finalFiles)
                    debug(app=self,
                          method='run_app',
                          message='highestVersFile...\n%s' % highestVersFile,
                          verbose=False)
                    versionNumber = int(
                        highestVersFile.split('.')[1].split('v')[1]) + 1
                    debug(app=self,
                          method='run_app',
                          message='versionNumber...\n%s' % versionNumber,
                          verbose=False)
                else:
                    versionNumber = 1
                    debug(app=self,
                          method='run_app',
                          message='versionNumber...\n%s' % versionNumber,
                          verbose=False)

                ## Now pad the version number
                if versionNumber < 10:
                    padding = '00'
                elif versionNumber < 100:
                    padding = '0'
                else:
                    padding = ''
                debug(app=self,
                      method='run_app',
                      message='padding...\n%s' % padding,
                      verbose=False)

                ## Rename the file
                renameTo = '%s.v%s%s' % (fileShotName, padding, versionNumber)
                debug(app=self,
                      method='run_app',
                      message='renameTo...\n%s' % renameTo,
                      verbose=False)
                ## Now save the file
                cmds.file(rename=renameTo)
                cmds.file(save=True, force=True, type='mayaAscii')

                cmds.headsUpMessage("Assets retrieved successfully...", time=1)
                cmds.cycleCheck(e=0)
                inprogressBar.updateProgress(percent=100, doingWhat='Finished')
                inprogressBar.close()
            else:
                debug(app=self,
                      method='run_app',
                      message='Invalid Path to working, skipping save...',
                      verbose=False)
                inprogressBar.close()
                cmds.headsUpMessage(
                    "Scene not saved. This is most likely due to a first time load of blocking/anim fetch...\nUse Shotgun saveAs now...",
                    time=2)

        else:
            inprogressBar.close()
            cmds.headsUpMessage(
                "Current context is not a valid Shot context. Please make sure you are under a valid shotgun Shot context!",
                time=2)
コード例 #27
0
    def sk_bkPerform(self, preFrame = 10 , posFrame = 10 , simulation = 1 , animType = 2 ,step = 1 ):
        import time
        mc.cycleCheck(evaluation = 0)

        # 路径动画
        print u'\n=================【%s】开始处理================='%(u'路径动画')
        print u'---开始时间.:%s'%(time.strftime("%Y-%m-%d %H:%M:%S"))
        print u'---请耐心等待...\n'
        self.sk_bakeMotionPaths()
        print u'---结束时间.:%s'%(time.strftime("%Y-%m-%d %H:%M:%S"))
        print u'=================【%s】处理完毕=================\n'%(u'路径动画')
        
        # 寻找非参考的约束物体
        constrainAllInfos = self.sk_constraintsObjsGet()
        constrainTargets  = constrainAllInfos[0]
        constrainNodes    = constrainAllInfos[1]

        # 约束BK
        print u'\n=================【%s】开始处理================='%(u'约束类型')
        print u'---开始时间.:%s'%(time.strftime("%Y-%m-%d %H:%M:%S"))
        print u'---待处理数量:%s'%(str(len(constrainTargets)))
        print u'---请耐心等待...\n'
        self.sk_bkCore(constrainTargets , preFrame = preFrame , posFrame = posFrame , simulation = 1 , step = step )

        print u'---结束时间.:%s'%(time.strftime("%Y-%m-%d %H:%M:%S"))
        print u'=================【%s】处理完毕=================\n'%(u'约束类型')

        # 删除约束
        constraintConfigs = [x for x in (constrainNodes) if not mc.referenceQuery(x,inr=1)]
        for cons in constraintConfigs:
            ref = mc.referenceQuery(cons,isNodeReferenced = 1)
            if not ref:
                mc.delete(cons)
        
        nurbsCurves = mc.ls(type = 'nurbsCurve',l = 1)
        needCtrls = []
        attrs = ['.tx','.ty','.tz','.rx','.ry','.rz','.sx','.sy','.sz','.v']

        if nurbsCurves:
            ctrlCurves = mc.listRelatives(nurbsCurves,ap = 1, type = 'transform',f = 1)
            for obj in ctrlCurves:
                if not mc.ls(obj):
                    continue
                # bk过的不处理
                if obj in constrainTargets:
                    continue
                # 对于没有动的控制器特殊处理,为动画曲线导出做准备
                if self.sk_curveSpecialCheck(obj):
                    mc.setKeyframe(obj)
                    continue
                
                # 控制器处理,处理方案1
                if animType == 1:
                    settable = 0
                    # 只处理有keyable属性的
                    for attr in attrs:
                        state = mc.getAttr((obj + attr),settable = 1 )
                        if state:
                            settable = 1
                        if settable:
                            break
                    if settable: 
                        needCtrls.append(obj)
                    
            # 控制器处理,处理方法2:只处理动画层影响的控制器
            if animType == 2:
                animLayers = mc.ls(type = 'animLayer')
                if animLayers:
                    checkObjs = mc.listConnections(animLayers,type = 'transform')
                    if checkObjs:
                        needCtrls = list(set(checkObjs))
        
        print u'\n=================【%s】开始处理================='%(u'控制器类型')
        print u'---开始时间.:%s'%(time.strftime("%Y-%m-%d %H:%M:%S"))
        print u'---待处理数量:%s'%(str(len(needCtrls)))
        print u'---请耐心等待...\n'
        if needCtrls:
            self.sk_bkCore(needCtrls , preFrame , posFrame , simulation,step= step)

        print u'---结束时间.:%s'%(time.strftime("%Y-%m-%d %H:%M:%S"))
        print u'=================【%s】处理完毕=================\n'%(u'控制器类型')
        
        # 备份文件
        fileName = mc.file(q=1,exn = 1)
        #newName = fileName.split('.')[0] + '_baked.' + fileName.split('.')[-1]
        #mc.file(rename = newName)
        #mc.file(s = 1 ,f = 1)

        print u'\n=================【All Done!!!】=================\n'
コード例 #28
0
ファイル: particleFX.py プロジェクト: philrouse/snowFX
        birth    : Makes the particle visible on its birth frame
        death    : Scales down the particle to 0 at the end of its lifetime
        bake     : Combines all animation layers
emitCurve   : Emits particles from a curve
followCurve : Animates a trail of particles following a curve
planeEmit   : Emits particles from a plane
reloadFile  : Reloads Maya scene to free memory and increase performance

In this module, one of the functions is called with a 
particle list. Those particles are then individually 
animated using a combination of the class specific functions.
'''
import maya.cmds as cmds
import random

cmds.cycleCheck(e=0)
cmds.autoKeyframe(state=0)

class particles():
    '''Contains procedures to animate individual particles and stores their unique variables'''
    def __init__(self,name):
        '''Saves the object's name to an instance of the class'''
        
        self.name=name
        
    def explode(self,start,duration,distance):
        '''
        Emits a particle along its local Y axis with decreasing speed
        
        start : Start of emission frame
        duration : Number of frames to reach final destination
コード例 #29
0
    def constrain_body(self, reverse=False):
        root_obj = self.setting_module.root
        nodes = []
        mc_namespace = self.ui.mc_ns_line.text() + ":"
        _nodes = self._get_nsObjs(mc_namespace)
        nodes.extend(cmds.ls(_nodes, type="transform"))
        nodes.extend(cmds.ls(_nodes, type="joint"))

        f_frame_set = set()
        l_frame_set = set()

        for _node in nodes:
            f_frame_set.add(cmds.findKeyframe(_node, w="first"))
            l_frame_set.add(cmds.findKeyframe(_node, w="last"))

        f_frame = min(f_frame_set)
        l_frame = max(l_frame_set)

        trans_list = ["translateX", "translateY", "translateZ"]
        rot_list = ["rotateX", "rotateY", "rotateZ"]

        for _node in reversed(nodes):
            for _attr in rot_list:
                cmds.setKeyframe(str(_node) + "." + _attr,
                                 v=0,
                                 t=(f_frame - 5))
            if _node == root_obj:
                for _attr in trans_list:
                    cmds.setKeyframe(str(_node) + "." + _attr,
                                     v=0,
                                     t=(f_frame - 5))

        # Constrainパート
        cmds.currentTime(f_frame - 5)
        results = {}
        consts = []

        mc_ns = self.ui.mc_ns_line.text()
        rh_ns = self.ui.rh_ns_line.text()
        if mc_ns != "":
            mc_ns = mc_ns + ":"
        if rh_ns != "":
            rh_ns = rh_ns + ":"
        for table_dict in self.table_list:
            const = table_dict["const"]
            rh = table_dict["RH"]
            mc = table_dict["MC"]
            cmds.setAttr("{}.rotate".format(mc), 0, 0, 0)
            if mc.split(":")[-1] == "root_MCJNT":
                cmds.setAttr("{}.translate".format(mc), 0, 0, 0)
            if reverse == True:
                if mc.split(":")[-1] in ["ankle_MCJNT_L", "ankle_MCJNT_R"]:
                    print "########################"
                    cmds.parentConstraint("{}ankle_MCJNT_R".format(mc_ns),
                                          "{}reverseFoot_ctrl_R".format(rh_ns),
                                          mo=True)
                    cmds.parentConstraint("{}ankle_MCJNT_L".format(mc_ns),
                                          "{}reverseFoot_ctrl_L".format(rh_ns),
                                          mo=True)
                    print "########################"
                    continue
            const_type, const = self.exec_const(const, rh, mc)
            consts.extend(const)
            results.setdefault(const_type, []).append(rh)

        cmds.currentTime(f_frame)

        # Bakeパート
        cmds.cycleCheck(e=False)
        bakelist = []
        # parent
        if "parent" in results:
            attrs = trans_list + rot_list
            bakelist.extend(self._cana_composer(results["parent"], attrs))
        # orient
        if "orient" in results:
            attrs = rot_list
            bakelist.extend(self._cana_composer(results["orient"], attrs))
        # point
        if "point" in results:
            attrs = trans_list
            bakelist.extend(self._cana_composer(results["point"], attrs))

        sampling = float(self.ui.sampling_line.text())

        cmds.bakeResults(bakelist,
                         t=(f_frame, l_frame),
                         ral=True,
                         sm=1,
                         sb=sampling)
        cmds.cycleCheck(e=True)
        cmds.delete(consts)
コード例 #30
0
mc.select(clear=True)
mc.joint(n='joint1Con', p=(0, 0, 0))
mc.joint(n='joint2Con', p=(5 - 1, 0, 0))

#create cluster
degree = mc.getAttr('advancedCurve1.degree')
span = mc.getAttr('advancedCurve1.spans')
CVAmount = degree + span
for eachCV in range(CVAmount):
    mc.select('advancedCurve1.cv[' + str(eachCV) + ']')
    mc.cluster(en=1)

#mc.parentConstraint('joint1Con','Start',mo = True)
mc.parentConstraint('joint2Con', 'End', mo=True)
mc.cycleCheck(e=False)
mc.parentConstraint('joint1Con', 'cluster1Handle')
mc.parentConstraint('joint2Con', 'cluster2Handle')

#ignore X Axis of Twisting
mc.select(clear=True)
mc.joint(n='joint1Aim', p=(0, 0, 0), rad=0.7)
mc.parentConstraint('joint1Aim', 'Start', mo=True)
mc.connectAttr('joint1Con.rotateZ', 'joint1Aim.rotateZ')
mc.connectAttr('joint1Con.rotateY', 'joint1Aim.rotateY')
mc.parent('joint1Aim', 'joint1Con')

#stretch joint
mc.select(curveName)
mc.setAttr(curveName + '.inheritsTransform', 0)
mc.arclen(curveName, ch=True)
コード例 #31
0
    def Main_Side(self, side):
        sign = 1
        sideindex = 0
        if side == "L":
            sign = 1
            sideindex = 0
        else:
            sign = -1
            sideindex = 1

        # Eye
        self.CreatePrixyNode(self.Proxies_Eyes[sideindex],
                             PC=self.Proxies_Head,
                             mMvoe=[0.57 * sign, 1.53, 1.64],
                             isConnect=True)

        # Arm
        Clavicle = self.Proxies_Clavicles[sideindex]
        self.CreatePrixyNode(Clavicle,
                             PC=self.Proxies_SpineTop,
                             mMvoe=[sign * 1.25, 0.5, 0],
                             isConnect=True,
                             isParent=True)

        Shoulder = self.Proxies_Shoulders[sideindex]
        self.CreatePrixyNode(Shoulder,
                             PC=Clavicle,
                             mMvoe=[sign * 1.7, 0, 0],
                             isConnect=True,
                             isParent=True)

        Elbow = self.Proxies_Elbows[sideindex]
        self.CreatePrixyNode(Elbow,
                             PC=Shoulder,
                             mMvoe=[sign * 3.5, 0, 0],
                             isConnect=True)

        Wrist = self.Proxies_Wrists[sideindex]
        self.CreatePrixyNode(Wrist,
                             PC=Elbow,
                             mMvoe=[sign * 3.5, 0, 0],
                             isConnect=True)

        ElbowG = Elbow + "_GRP"
        cmds.group(n=ElbowG, em=True)
        PCons = cmds.pointConstraint(Elbow, ElbowG)
        cmds.delete(PCons)
        cmds.parent(Elbow, ElbowG)
        cmds.makeIdentity(ElbowG, apply=True, t=1, r=1, s=1)
        cmds.move(0,
                  0,
                  0.001,
                  "%s.scalePivot" % ElbowG,
                  "%s.rotatePivot" % ElbowG,
                  r=True)
        cmds.pointConstraint(Shoulder, Wrist, ElbowG, mo=True)
        cmds.parent(ElbowG, Wrist, self.Main)

        Palm = self.Proxies_Palms[sideindex]
        self.CreatePrixyNode(Palm,
                             PC=Wrist,
                             mMvoe=[sign * 0.7, 0, 0],
                             mScale=[0.7, 0.7, 0.7],
                             lScale=[0.175, 0.175, 0.175],
                             isConnect=True,
                             isParent=True)

        # Hand
        if self.thumbsOn:
            ThumbJ1 = self.Proxies_Thumbs[sideindex][0]
            self.CreatePrixyNode(ThumbJ1,
                                 PC=Wrist,
                                 mMvoe=[sign * 0.45, 0, 0.51],
                                 mScale=[0.75, 0.75, 0.75],
                                 lScale=[0.1875, 0.1875, 0.1875],
                                 isConnect=True,
                                 isParent=True)

            ThumbJ2 = self.Proxies_Thumbs[sideindex][1]
            self.CreatePrixyNode(ThumbJ2,
                                 PC=ThumbJ1,
                                 mMvoe=[sign * 0, 0, 0.75],
                                 mScale=[0.75, 0.75, 0.75],
                                 lScale=[0.1875, 0.1875, 0.1875],
                                 isConnect=True,
                                 isParent=True)

            ThumbJ3 = self.Proxies_Thumbs[sideindex][2]
            self.CreatePrixyNode(ThumbJ3,
                                 PC=ThumbJ2,
                                 mMvoe=[sign * 0, 0, 0.75],
                                 mScale=[0.75, 0.75, 0.75],
                                 lScale=[0.1875, 0.1875, 0.1875],
                                 isConnect=True,
                                 isParent=True)

            ThumbJTip = self.Proxies_Thumbs[sideindex][3]
            self.CreatePrixyNode(ThumbJTip,
                                 PC=ThumbJ3,
                                 mMvoe=[sign * 0, 0, 0.75],
                                 mScale=[0.75, 0.75, 0.75],
                                 lScale=[0.1875, 0.1875, 0.1875],
                                 isConnect=True,
                                 isParent=True)

            FingerList = self.Proxies_Fingers[sideindex]
            jointindex = 0
            for i, Finger in enumerate(FingerList):
                FingerJ1 = Finger[jointindex]
                if i == 0:
                    self.ProxyBase(FingerJ1)
                    PCons = cmds.pointConstraint(Wrist, FingerJ1)
                    cmds.delete(PCons)
                    cmds.move(sign * 1.47,
                              0,
                              0,
                              FingerJ1,
                              r=True,
                              os=True,
                              wd=True)
                    if self.fingersNum == 2:
                        cmds.move(0, 0, 0.25, FingerJ1, r=True)
                        cmds.makeIdentity(FingerJ1, apply=True, t=1, r=1, s=1)
                    elif self.fingersNum >= 3:
                        cmds.move(0, 0, 0.5, FingerJ1, r=True)
                        cmds.makeIdentity(FingerJ1, apply=True, t=1, r=1, s=1)
                else:
                    FingerJ0 = FingerList[i - 1][0]
                    self.ProxyBase(FingerJ1)
                    PCons = cmds.pointConstraint(FingerJ0, FingerJ1)
                    cmds.delete(PCons)
                    cmds.move(0, 0, -0.4, FingerJ1, r=True, os=True, wd=True)

                cmds.scale(0.62, 0.62, 0.62, FingerJ1)
                cmds.makeIdentity(FingerJ1, apply=True, t=1, r=1, s=1)
                cmds.setAttr("%sSnapShape.localScaleX" % FingerJ1, 0.155)
                cmds.setAttr("%sSnapShape.localScaleY" % FingerJ1, 0.155)
                cmds.setAttr("%sSnapShape.localScaleZ" % FingerJ1, 0.155)
                cmds.parent(FingerJ1, Palm)
                self.ProxyConnectors(Palm, FingerJ1)

                FingerJ2 = Finger[1]
                self.CreatePrixyNode(FingerJ2,
                                     PC=FingerJ1,
                                     mMvoe=[sign * 0.61, 0, 0],
                                     mScale=[0.62, 0.62, 0.62],
                                     lScale=[0.155, 0.155, 0.155],
                                     isConnect=True,
                                     isParent=True)

                FingerJ3 = Finger[2]
                self.CreatePrixyNode(FingerJ3,
                                     PC=FingerJ2,
                                     mMvoe=[sign * 0.61, 0, 0],
                                     mScale=[0.62, 0.62, 0.62],
                                     lScale=[0.155, 0.155, 0.155],
                                     isConnect=True,
                                     isParent=True)

                FingerJTip = Finger[3]
                self.CreatePrixyNode(FingerJTip,
                                     PC=FingerJ3,
                                     mMvoe=[sign * 0.61, 0, 0],
                                     mScale=[0.62, 0.62, 0.62],
                                     lScale=[0.155, 0.155, 0.155],
                                     isConnect=True,
                                     isParent=True)

            cmds.makeIdentity(Wrist, apply=True, t=1, r=1, s=1)

        # Leg
        Hip = self.Proxies_Hips[sideindex]
        self.CreatePrixyNode(Hip,
                             PC=self.Proxies_Root,
                             mMvoe=[sign * 1.72, -0.8, 0],
                             isConnect=True,
                             isParent=True)

        Knee = self.Proxies_Knees[sideindex]
        self.CreatePrixyNode(Knee,
                             PC=Hip,
                             mMvoe=[0, -6.4, 0],
                             mRotate=[0, 180, 90],
                             isConnect=True,
                             isParent=True)

        Ankle = self.Proxies_Ankles[sideindex]
        self.CreatePrixyNode(Ankle,
                             PC=Knee,
                             mMvoe=[0, -6.4, 0],
                             isConnect=True,
                             isParent=True)

        Ball = self.Proxies_Balls[sideindex]
        self.CreatePrixyNode(Ball,
                             PC=Ankle,
                             mMvoe=[0, -1.65, 2.26],
                             isConnect=True,
                             isParent=True)

        Toe = self.Proxies_Toes[sideindex]
        self.CreatePrixyNode(Toe, PC=Ball, mMvoe=[0, 0, 1.7])

        if self.toesNum == 1:
            self.ProxyConnectors(Ball, Toe)

        BallG = Ball + "_GRP"
        cmds.group(n=BallG, em=True)
        cmds.parent(BallG, Ball)
        cmds.parent(Toe, BallG)

        KneeLocator = Knee + "_Locator"
        cmds.spaceLocator(n=KneeLocator)
        PCons = cmds.pointConstraint(Knee, KneeLocator)
        cmds.delete(PCons)
        cmds.parent(KneeLocator, Knee)
        cmds.move(0, 0, 1.5, KneeLocator, r=True)
        cmds.setAttr("%s.v" % KneeLocator, 0)

        # toe num
        cmds.makeIdentity(Ball, apply=True, t=1, r=1, s=1)

        KneeG = Knee + "_GRP"
        cmds.group(n=KneeG, em=True)
        PCons = cmds.pointConstraint(Knee, KneeG)
        cmds.delete(PCons)
        cmds.parent(Knee, KneeG)
        cmds.makeIdentity(KneeG, apply=True, t=1, r=1, s=1)
        cmds.move(0,
                  0,
                  0.001,
                  "%s.scalePivot" % KneeG,
                  "%s.rotatePivot" % KneeG,
                  r=True)
        cmds.cycleCheck(e=0)
        cmds.pointConstraint(Hip, Ankle, KneeG, mo=True)
        cmds.cycleCheck(e=1)
        cmds.parent(KneeG, Ankle, self.Main)
        pass
コード例 #32
0
ファイル: app.py プロジェクト: vipul-rathod/lsapipeline
    def run_app(self):
        """
        Callback from when the menu is clicked.
        """
        ## Tell the artist to be patient... eg not genY
        inprogressBar = pbui.ProgressBarUI(title = 'Fetching all shot assets:')
        inprogressBar.show()
        inprogressBar.updateProgress(percent = 5, doingWhat = 'Processing scene info...')
        #self.dbWrap = DoubleBarrel
        #self.sg = doubleBarrelWrapper._getShotgunObject(self.dbWrap, self)
        ## Instantiate the API
        tk = sgtk.sgtk_from_path("T:/software/bubblebathbay")
        debug(app = self, method = 'run_app', message = 'API instanced...\n%s' % tk, verbose = False)
        debug(app = self, method = 'run_app', message = 'Fetch Shot Assets launched...', verbose = False)

        context = self.context ## To get the step
        debug(app = self, method = 'run_app', message = 'context: %s' % context, verbose = False)
        debug(app = self, method = 'run_app', message = 'context Step...%s' % context.step['name'], verbose = False)
        
        if context.step['name'] == 'Anm' or context.step['name'] == 'Blocking' or context.step['name'] == 'Light':
            
            ## Build an entity type to get some values from.
            entity = self.context.entity    ## returns {'type': 'Shot', 'name': 'ep100_sh010', 'id': 1166}
            debug(app = self, method = 'run_app', message = 'entity... %s' % entity, verbose = False)
            
            ## Filter for the matching ID for the shot
            sg_filters = [["id", "is", entity["id"]]]
            debug(app = self, method = 'run_app', message = 'sg_filters... %s' % sg_filters, verbose = False)
            
            ## Build an entity type to get some values from.
            sg_entity_type = self.context.entity["type"]                                                                   ## returns Shot
            debug(app = self, method = 'run_app', message = 'sg_entity_type...\n%s' % sg_entity_type, verbose = False)
            
            ## DATA
            #import time
            #start = time.time()
            data = self.shotgun.find_one(sg_entity_type, filters=sg_filters, fields=['assets'])
            #data = self.dbWrap.find_one(self.sg, sg_entity_type, sg_filters, ['assets'])
            #print 'TIME: %s' % (time.time()-start)
            debug(app = self, method = 'run_app', message = 'Assets...\n%s' % data['assets'], verbose = False)
    
            ## Set the template to the maya publish folder
            maya_assetRootTemplate = tk.templates[self.get_setting('sg_AssetTemplate')]
            debug(app = self, method = 'run_app', message = 'Asset template...\n%s' % maya_assetRootTemplate, verbose = False)
           
            ### NOTE:
            ### ALL CHARS MUST BE RIGGED
            ### ALL PROPS MUST BE RIGGED
            ### ALL BLDS SHOULD BE PUBLISHED TO AN ENV as well as ALL LND
            ### ALL ROOT_HRC GROUPS SHOULD BE CASE SENSITIVE SUCH AS  CHAR_Sydney_hrc

            ## Set model panel to show None before fetch asset
            modelPanels = cmds.getPanel(type = 'modelPanel')
            if modelPanels:
                [cmds.modelEditor(mp, edit = True, allObjects = False) for mp in modelPanels]

            debug(app = self, method = 'run_app', message = 'Looping assets now...', verbose = False)
            for eachAsset in data['assets']:
                ## Turn this into the shotgun friendly name for the fileNames as underscores are not permitted in shotgun filenames for some obscure reason.
                debug(app = self, method = 'run_app', message = 'eachAsset[name]...\n%s' % eachAsset['name'], verbose = False)
    
                inprogressBar.updateProgress(percent = 50, doingWhat = 'Fetching Assets...')
                x = 50
                if 'CHAR' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(percent = x, doingWhat = 'Fetching Char Assets...')
                    self.processAsset(tk = tk, eachAsset = eachAsset, RIG = True, MDL = False, ENV = False, CHAR = True, BLD = False, PROP = False, templateFile = maya_assetRootTemplate)
                elif 'PROP' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(percent = x, doingWhat = 'Fetching Prop Assets...')
                    self.processAsset(tk = tk, eachAsset = eachAsset, RIG = True, MDL = False, ENV = False, CHAR = False, BLD = False, PROP = True, templateFile = maya_assetRootTemplate)
                elif 'ENV' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(percent = x, doingWhat = 'Fetching Env Assets...')
                    self.processAsset(tk = tk, eachAsset = eachAsset, RIG = False, MDL = True, ENV = True, CHAR = False, BLD = False, PROP = False, templateFile = maya_assetRootTemplate)
                elif 'BLD' in eachAsset["name"]:
                    x = x + 5
                    inprogressBar.updateProgress(percent = x, doingWhat = 'Fetching Env Assets...')
                    self.processAsset(tk = tk, eachAsset = eachAsset, RIG = True, MDL = False, ENV = False, CHAR = False, BLD = True, PROP = False, templateFile = maya_assetRootTemplate)
                else:
                    debug(app = self, method = 'run_app', message = 'Invalid Asset Type...\n%s' % eachAsset['name'], verbose = False)
                    pass

            ## Set all AD to None
            [cmds.assembly(each, edit = True, active = '') for each in cmds.ls(type = 'assemblyReference')]

            ## Set model panel to show All
            if modelPanels:
                [cmds.modelEditor(mp, edit = True, allObjects = True) for mp in modelPanels]
            
            debug(app = self, method = 'run_app', message = 'Moving on to save working scene...', verbose = False)
            inprogressBar.updateProgress(percent = 75, doingWhat = 'Setting Render Globals...')
            ## Now make sure the scene is set to pal and cm and renderglobals
            settings._setRenderGlobals(animation = True)
            
            ## Now save the working scene
            inprogressBar.updateProgress(percent = 90, doingWhat = 'Saving vers up scene...')
            shotName = entity['name']
            debug(app = self, method = 'run_app', message = 'shotName...\n%s' % shotName, verbose = False)
            
            work_template = tk.templates['shot_work_area_maya']
            debug(app = self, method = 'run_app', message = 'work_template...\n%s' % work_template, verbose = False)
            
            ## context.step['name'] = Blocking
            try:
                debug(app = self, method = 'run_app', message = "Shot: %s" % shotName, verbose = False)
                debug(app = self, method = 'run_app', message = "context.step: %s" % context.step['name'], verbose = False)
                debug(app = self, method = 'run_app', message = 'Trying to fetch pathToWorking now...', verbose = False)
                pathToWorking = r'%s' % tk.paths_from_template(work_template, {"Shot" : shotName, "Step":context.step['name']})[0]
                pathToWorking.replace('\\\\', '\\')
                debug(app = self, method = 'run_app', message = 'pathToWorking...\n%s' % pathToWorking, verbose = False)
            except: ## There are NO working files yet so we have to handle this propelry
                ## This needs to be the root folder and 000 for version up\
                ## we need to find the sequence from the workspaces index0 of this is default 
                getWorkspace = cmds.workspace( listWorkspaces=True )[1] # Result: [u'default', u'I:/lsapipeline/episodes/eptst/eptst_sh060/Blck/work/maya']
                getSequence = getWorkspace.split('/')[4]
                work_path = work_template.apply_fields({'Sequence' : getSequence, 'Shot': shotName, 'Step': context.step['name']})
                debug(app = self, method = 'run_app', message = 'New work_path: %s' % work_path, verbose = False)
                pathToWorking = r"%s" % work_template
                
            ## Scan the folder and find the highest version number
            fileShotName = "".join(shotName.split('_')) or ''
            debug(app = self, method = 'run_app', message = 'fileShotName...\n%s' % fileShotName, verbose = False)
            padding = ''
            debug(app = self, method = 'run_app', message = 'padding...\n%s' % padding, verbose = False)
            versionNumber = ''
            debug(app = self, method = 'run_app', message = 'versionNumber...\n%s' % versionNumber, verbose = False)
            
            if os.path.exists(pathToWorking):
                debug(app = self, method = 'run_app', message = 'Path to working exists...', verbose = False)
                
                getfiles = os.listdir(pathToWorking)
                debug(app = self, method = 'run_app', message = 'getfiles...\n%s' % getfiles, verbose = False)
                ## Remove the stupid Keyboard folder if it exists.. thx autodesk.. not
                if 'Keyboard' in getfiles:
                    getfiles.remove('Keyboard')
               
                ## Process a clean list now.. trying to remove from the current list is giving me grief and I'm too fn tired to care...
                finalFiles = []
                for each in getfiles:
                    if each.split('.')[0] == fileShotName:
                        finalFiles.append(each)
                    else:
                        pass
                debug(app = self, method = 'run_app', message = 'finalFiles...\n%s' % finalFiles, verbose = False)
                   
                if finalFiles:
                    highestVersFile = max(finalFiles)
                    debug(app = self, method = 'run_app', message = 'highestVersFile...\n%s' % highestVersFile, verbose = False)
                    versionNumber  = int(highestVersFile.split('.')[1].split('v')[1]) + 1
                    debug(app = self, method = 'run_app', message = 'versionNumber...\n%s' % versionNumber, verbose = False)
                else:
                    versionNumber  =  1
                    debug(app = self, method = 'run_app', message = 'versionNumber...\n%s' % versionNumber, verbose = False)
                
                ## Now pad the version number
                if versionNumber < 10:
                    padding = '00'
                elif versionNumber < 100:
                    padding = '0'
                else:
                    padding = ''
                debug(app = self, method = 'run_app', message = 'padding...\n%s' % padding, verbose = False)
               
                ## Rename the file
                renameTo = '%s.v%s%s' % (fileShotName, padding, versionNumber)
                debug(app = self, method = 'run_app', message = 'renameTo...\n%s' % renameTo, verbose = False)
                ## Now save the file
                cmds.file(rename = renameTo)
                cmds.file(save = True, force = True, type = 'mayaAscii')
                
                cmds.headsUpMessage("Assets retrieved successfully...", time = 1)
                cmds.cycleCheck(e = 0)
                inprogressBar.updateProgress(percent = 100, doingWhat = 'Finished')
                inprogressBar.close()
            else:
                debug(app = self, method = 'run_app', message = 'Invalid Path to working, skipping save...',  verbose = False)
                inprogressBar.close()
                cmds.headsUpMessage("Scene not saved. This is most likely due to a first time load of blocking/anim fetch...\nUse Shotgun saveAs now...", time = 2)


        else:
            inprogressBar.close()
            cmds.headsUpMessage("Current context is not a valid Shot context. Please make sure you are under a valid shotgun Shot context!", time = 2)
コード例 #33
0
import rigBuilder.body.bodyClasses as classes
import rigBuilder.rigEnv as env
import maya.cmds as cmds
import re, string

cmds.cycleCheck(e=False)

class RigBuild(classes.RigComponent):
    """
    Module containing processes to run prior to Advanced Skeleton generation,
    after setting up the guide rig.
    
    """
    def build(self):
        
        FKIKCtl       = '%s_legFrontFkIk_ctl_%s' % (self.locus,self.count)
        IKCtl         = '%s_legFrontIk_ctl_%s' % (self.locus,self.count)
        footBallPivot = '%s_footPivotBallLegFrontIk_org_%s' % (self.locus,self.count)
        footRoll      = '%s_footRollLegFrontIk_org_%s' % (self.locus,self.count)
        ballIkCtl     = '%s_legFrontBallIk_ctl_%s' % (self.locus,self.count)
        
        # add attrs
        cmds.addAttr(FKIKCtl,ln='feetControls',at='double',min=0,max=1,dv=1)
        cmds.setAttr('%s.feetControls' % FKIKCtl,e=True,k=True)
        cmds.addAttr(FKIKCtl,ln='swivel',at='double',dv=0)
        cmds.setAttr('%s.swivel' % FKIKCtl,e=True,k=True)
        cmds.addAttr(FKIKCtl,ln='toeRoll',at='double',dv=0)
        cmds.setAttr('%s.toeRoll' % FKIKCtl,e=True,k=True)
        cmds.addAttr(FKIKCtl,ln='toeSwivel',at='double',dv=0)
        cmds.setAttr('%s.toeSwivel' % FKIKCtl,e=True,k=True)
        cmds.addAttr(FKIKCtl,ln='toeTwist',at='double',dv=0)
コード例 #34
0
def rsObjectsInPath(l_curves,
                    i_number=3,
                    i_type=0,
                    b_consPos=True,
                    b_consOri=True,
                    b_orientWorld=True,
                    b_parentHierarchy=False,
                    b_selectNewObjs=True,
                    o_toCurve=None,
                    i_instance=0,
                    i_loft=0):
    l_selIn = cmds.ls(sl=True, o=False)
    cmds.select(cl=True)
    l_list = []
    try:
        if cmds.objExists(l_curves):
            l_list.append(l_curves)
    except:
        pass
    for o_obj in l_curves:
        if cmds.objExists(o_obj):
            l_list.append(o_obj)
    if len(l_list) == 0:
        cmds.warning("Wrong input argument")
        return False
    l_curves = l_list
    d_type = {0: "group", 1: "spaceLocator", 2: "joint", 3: "Scene object"}
    l_targets = []
    l_objReturns = []
    for o_obj in l_curves:
        if cmds.objExists(o_obj):
            l_shapes = cmds.listRelatives(o_obj, s=True)
            for o_shape in l_shapes:
                if cmds.nodeType(o_shape) == "nurbsCurve" or cmds.nodeType(
                        o_shape) == "bezierCurve":
                    l_targets.append(o_shape)
        else:
            cmds.warning("%s > A Does not exist" % (o_obj))
    if len(l_targets) > 0:
        l_loft = []
        for o_target in l_targets:
            l_tmpObjReturns = []
            i_openCloseVal = cmds.getAttr("%s.f" % (o_target))
            if i_openCloseVal == 0:
                f_div = 1.00 / (i_number - 1)
            else:
                f_div = 1.00 / i_number
            l_uValues = []
            for z in range(i_number):
                l_uValues.append(f_div * z)
            for z in range(i_number):
                o_obj = None
                if i_type != 3:
                    if i_type in d_type:
                        if i_type == 0:
                            o_obj = cmds.group(em=True)
                        if i_type == 1:
                            o_obj = cmds.spaceLocator()[0]
                        if i_type == 2:
                            o_obj = cmds.joint()
                    else:
                        cmds.warning("Type not recognized")
                        break
                else:
                    if cmds.objExists(o_toCurve):
                        if i_instance == 0:
                            o_obj = cmds.duplicate(o_toCurve)[0]
                        else:
                            o_obj = cmds.instance(o_toCurve)[0]
                    else:
                        cmds.warning("%s > B Does not exist" % (o_toCurve))
                        break
                l_objReturns.append(o_obj)
                l_tmpObjReturns.append(o_obj)
                o_path = cmds.pathAnimation(o_obj,
                                            o_target,
                                            f=b_consOri,
                                            fractionMode=True,
                                            followAxis="y",
                                            upAxis="z",
                                            worldUpType="vector")
                o_incomingConnection = cmds.listConnections("%s.uValue" %
                                                            (o_path),
                                                            destination=False,
                                                            source=True)[0]
                cmds.cycleCheck(e=0)
                cmds.delete(o_incomingConnection)
                cmds.cycleCheck(e=1)
                cmds.setAttr("%s.uValue" % (o_path), l_uValues[z])
                if not b_consOri and not b_consPos:
                    o_incoming = cmds.listConnections("%s.rotateX" % (o_obj),
                                                      destination=False,
                                                      source=True)[0]
                    cmds.cycleCheck(e=0)
                    cmds.delete(o_incoming)
                    cmds.cycleCheck(e=1)
                if b_consOri and not b_consPos:
                    o_incomingX = cmds.listConnections("%s.translateX" %
                                                       (o_obj),
                                                       plugs=True,
                                                       destination=False,
                                                       source=True)[0]
                    o_incomingY = cmds.listConnections("%s.translateY" %
                                                       (o_obj),
                                                       plugs=True,
                                                       destination=False,
                                                       source=True)[0]
                    o_incomingZ = cmds.listConnections("%s.translateZ" %
                                                       (o_obj),
                                                       plugs=True,
                                                       destination=False,
                                                       source=True)[0]
                    cmds.disconnectAttr(o_incomingX, "%s.translateX" % (o_obj))
                    cmds.disconnectAttr(o_incomingY, "%s.translateY" % (o_obj))
                    cmds.disconnectAttr(o_incomingZ, "%s.translateZ" % (o_obj))
                if not b_consOri and b_consPos:
                    o_incomingX = cmds.listConnections("%s.rotateX" % (o_obj),
                                                       plugs=True,
                                                       destination=False,
                                                       source=True)[0]
                    o_incomingY = cmds.listConnections("%s.rotateY" % (o_obj),
                                                       plugs=True,
                                                       destination=False,
                                                       source=True)[0]
                    o_incomingZ = cmds.listConnections("%s.rotateZ" % (o_obj),
                                                       plugs=True,
                                                       destination=False,
                                                       source=True)[0]
                    cmds.disconnectAttr(o_incomingX, "%s.rotateX" % (o_obj))
                    cmds.disconnectAttr(o_incomingY, "%s.rotateY" % (o_obj))
                    cmds.disconnectAttr(o_incomingZ, "%s.rotateZ" % (o_obj))
                    cmds.setAttr("%s.follow" % (o_path), b_consOri)
                if not b_consOri and b_orientWorld:
                    cmds.setAttr("%s.rotateX" % (o_obj), 0)
                    cmds.setAttr("%s.rotateY" % (o_obj), 0)
                    cmds.setAttr("%s.rotateZ" % (o_obj), 0)
                cmds.select(cl=True)
            o_loft = ""
            if i_loft > 0:
                if i_loft == 1:
                    o_loftPoly = cmds.loft(l_tmpObjReturns,
                                           ch=1,
                                           u=1,
                                           c=0,
                                           ar=1,
                                           d=3,
                                           ss=1,
                                           rn=0,
                                           po=1,
                                           rsn=True)
                    o_outcoming = cmds.listConnections("%s.outputSurface" %
                                                       (o_loftPoly[1]),
                                                       plugs=False,
                                                       destination=True,
                                                       source=False)[0]
                    o_loft = o_loftPoly[1]
                    l_loft.append(o_loftPoly[0])
                    cmds.setAttr("%s.polygonType" % (o_outcoming), 1)
                    cmds.setAttr("%s.format" % (o_outcoming), 2)
                    cmds.setAttr("%s.uType" % (o_outcoming), 3)
                    cmds.setAttr("%s.uNumber" % (o_outcoming), 1)
                    cmds.setAttr("%s.vType" % (o_outcoming), 3)
                    cmds.setAttr("%s.vNumber" % (o_outcoming), 1)
                if i_loft == 2:
                    cmds.loft(l_tmpObjReturns,
                              ch=1,
                              u=1,
                              c=0,
                              ar=1,
                              d=3,
                              ss=1,
                              rn=0,
                              po=0,
                              rsn=True)
                if i_loft > 2:
                    cmds.warning("Loft type not recognized")
            cmds.select(cl=True)
            if b_parentHierarchy:
                if not b_consPos and not b_consOri:
                    l_tmpObjReturns.reverse()
                    for z in range(len(l_tmpObjReturns) - 1):
                        cmds.parent(l_tmpObjReturns[z], l_tmpObjReturns[z + 1])
                else:
                    cmds.warning(
                        "Objects cannot be in hierarchy, , they have transformations constraints"
                    )
            cmds.select(cl=True)
        if b_selectNewObjs:
            if l_objReturns != []:
                cmds.select(l_objReturns)
                if len(l_loft) > 0:
                    cmds.select(l_loft, add=True)
            else:
                if l_selIn != []:
                    cmds.select(l_selIn)
        else:
            if l_selIn != []:
                cmds.select(l_selIn)
    return (l_objReturns, l_targets, l_loft)
コード例 #35
0
    def doIt(self,args):
        self.parseArguments(args)
        cmds.cycleCheck(e=0)
        controllerShapeName = self.falloffName+'Shape'
        counter = 0
        theSet = ''
        feathers = cmds.listRelatives(self.feathergroupName)
        for featherCNTRL in feathers:
            initialScaleX = cmds.getAttr(featherCNTRL+'.scaleX')
            initialScaleY = cmds.getAttr(featherCNTRL+'.scaleY')
            initialScaleZ = cmds.getAttr(featherCNTRL+'.scaleZ')

            cmds.select(featherCNTRL)
            cmds.pickWalk(d='down')
            featherShape = cmds.ls(selection=True)[0]
            print featherShape
            #Distance between feathers and falloffobject
            distNode = cmds.createNode('distanceBetween', n='distance_'+self.falloffName+str(counter))
            cmds.connectAttr(controllerShapeName+'.worldPosition[0]', distNode+'.point1')
            cmds.connectAttr(featherShape+'_DistanceLoc.worldPosition[0]', distNode+'.point2')

            #Divide Distance/FalloffSize
            multDivNode = cmds.createNode('multiplyDivide', n='MultiDiv_distDiv_'+self.falloffName+str(counter))

            cmds.connectAttr(self.falloffName+'.Falloff_Size', multDivNode+'.input2X')
            cmds.setAttr(multDivNode+'.operation', 2)
            cmds.connectAttr(distNode+'.distance', multDivNode+'.input1X')

            #Clamp division to max 1 (Value now between 0 and 1)
            clampNode = cmds.createNode('clamp', n='clamp_'+self.falloffName+str(counter))
            cmds.setAttr(clampNode+'.maxR', 1)
            cmds.connectAttr(multDivNode+'.outputX', clampNode+'.inputR')

            #Scale it with 1-ClampOutput
            plusMinNode = cmds.createNode('plusMinusAverage', n='plusMinAv_'+self.falloffName+str(counter))
            cmds.setAttr(plusMinNode+'.operation', 2)
            cmds.setAttr(plusMinNode+'.input2D[0].input2Dx', 1)
            cmds.connectAttr(clampNode+'.outputR', plusMinNode+'.input2D[1].input2Dx')

            #Make scaling correct and stuffz
            remapPlusMinNode = cmds.createNode('plusMinusAverage', n='remapPlusMinAv_'+self.falloffName+str(counter))
            cmds.setAttr(remapPlusMinNode+'.operation', 2)
            cmds.connectAttr(self.falloffName+'.scaleX', remapPlusMinNode+'.input3D[0].input3Dx')
            cmds.connectAttr(self.falloffName+'.scaleY', remapPlusMinNode+'.input3D[0].input3Dy')
            cmds.connectAttr(self.falloffName+'.scaleZ', remapPlusMinNode+'.input3D[0].input3Dz')
            cmds.setAttr(remapPlusMinNode+'.input3D[1].input3Dx', 1)
            cmds.setAttr(remapPlusMinNode+'.input3D[1].input3Dy', 1)
            cmds.setAttr(remapPlusMinNode+'.input3D[1].input3Dz', 1)

            

            #Rotation and scaling stuff going strong
            multRotNode = cmds.createNode('multiplyDivide', n='MultiDiv_multRot_'+self.falloffName+str(counter))
            multScaleNode = cmds.createNode('multiplyDivide', n='MultiDiv_multScale_'+self.falloffName+str(counter))

            cmds.connectAttr(plusMinNode+'.output2Dx', multRotNode+'.input1X')
            cmds.connectAttr(plusMinNode+'.output2Dx', multScaleNode+'.input1X')

            multReverseNode = cmds.createNode('multiplyDivide', n='MultiDiv_multReverse_'+self.falloffName+str(counter))
            cmds.setAttr(multReverseNode+'.input2X', -1)

            cmds.connectAttr(multRotNode+'.outputX', multReverseNode+'.input1X')

            #Ranges, ranges, ranges...
            rotRangeNode = cmds.createNode('setRange', n='setRange_RotRange_'+self.falloffName+str(counter))
            scaleRangeNode = cmds.createNode('setRange', n='setRange_ScaleRange_'+self.falloffName+str(counter))

            cmds.setAttr(rotRangeNode+'.oldMinX', -360)
            cmds.setAttr(rotRangeNode+'.oldMaxX', 360)
            cmds.setAttr(rotRangeNode+'.oldMinY', -360)
            cmds.setAttr(rotRangeNode+'.oldMaxY', 360)
            cmds.setAttr(rotRangeNode+'.oldMinZ', -360)
            cmds.setAttr(rotRangeNode+'.oldMaxZ', 360)

            cmds.setAttr(scaleRangeNode+'.minX', 0)
            cmds.setAttr(scaleRangeNode+'.minY', 0)
            cmds.setAttr(scaleRangeNode+'.minZ', 0)

            cmds.setAttr(scaleRangeNode+'.oldMinX', 0)
            cmds.setAttr(scaleRangeNode+'.oldMinY', 0)
            cmds.setAttr(scaleRangeNode+'.oldMinZ', 0)

            cmds.setAttr(scaleRangeNode+'.oldMaxX', 25)
            cmds.setAttr(scaleRangeNode+'.oldMaxY', 25)
            cmds.setAttr(scaleRangeNode+'.oldMaxZ', 25)
            
            #Connect this..
            cmds.connectAttr(multReverseNode+'.outputX', rotRangeNode+'.minX')
            cmds.connectAttr(multReverseNode+'.outputX', rotRangeNode+'.minY')
            cmds.connectAttr(multReverseNode+'.outputX', rotRangeNode+'.minZ')

            cmds.connectAttr(multRotNode+'.outputX', rotRangeNode+'.maxX')
            cmds.connectAttr(multRotNode+'.outputX', rotRangeNode+'.maxY')
            cmds.connectAttr(multRotNode+'.outputX', rotRangeNode+'.maxZ')

            cmds.connectAttr(multScaleNode+'.outputX', scaleRangeNode+'.maxX')
            cmds.connectAttr(multScaleNode+'.outputX', scaleRangeNode+'.maxY')
            cmds.connectAttr(multScaleNode+'.outputX', scaleRangeNode+'.maxZ')

            cmds.connectAttr(rotRangeNode+'.oldMaxX', multRotNode+'.input2X')
            cmds.connectAttr(scaleRangeNode+'.oldMaxX', multScaleNode+'.input2X')
            
            cmds.connectAttr(self.falloffName+'.rotateX', rotRangeNode+'.valueX')
            cmds.connectAttr(self.falloffName+'.rotateY', rotRangeNode+'.valueY')
            cmds.connectAttr(self.falloffName+'.rotateZ', rotRangeNode+'.valueZ')

            #Connect to feather shape
            cmds.connectAttr(rotRangeNode+'.outValueX', featherCNTRL+'.rotateX')
            cmds.connectAttr(rotRangeNode+'.outValueY', featherCNTRL+'.rotateY')
            cmds.connectAttr(rotRangeNode+'.outValueZ', featherCNTRL+'.rotateZ')

            endPlusMinNode = cmds.createNode('plusMinusAverage', n='endPlusMinAv_'+self.falloffName+str(counter))
            
            cmds.setAttr(endPlusMinNode+'.operation', 1)
            cmds.setAttr(endPlusMinNode+'.input3D[0].input3Dx', initialScaleX)
            cmds.setAttr(endPlusMinNode+'.input3D[0].input3Dy', initialScaleY)
            cmds.setAttr(endPlusMinNode+'.input3D[0].input3Dz', initialScaleZ)
            cmds.connectAttr(remapPlusMinNode+'.output3Dx', scaleRangeNode+'.valueX')
            cmds.connectAttr(remapPlusMinNode+'.output3Dy', scaleRangeNode+'.valueY')
            cmds.connectAttr(remapPlusMinNode+'.output3Dz', scaleRangeNode+'.valueZ')

            cmds.connectAttr(scaleRangeNode+'.outValueX', endPlusMinNode+'.input3D[1].input3Dx')
            cmds.connectAttr(scaleRangeNode+'.outValueY', endPlusMinNode+'.input3D[1].input3Dy')
            cmds.connectAttr(scaleRangeNode+'.outValueZ', endPlusMinNode+'.input3D[1].input3Dz')

            cmds.connectAttr(endPlusMinNode+'.output3Dx', featherCNTRL+'.scaleX')
            cmds.connectAttr(endPlusMinNode+'.output3Dy', featherCNTRL+'.scaleY')
            cmds.connectAttr(endPlusMinNode+'.output3Dz', featherCNTRL+'.scaleZ')

            
            cmds.select(distNode, r=True)
            cmds.select(multDivNode, add=True)
            cmds.select(clampNode, add=True)
            cmds.select(plusMinNode, add=True)
            cmds.select(multRotNode, add=True)
            cmds.select(multScaleNode, add=True)
            cmds.select(multReverseNode, add=True)
            cmds.select(rotRangeNode, add=True)
            cmds.select(scaleRangeNode, add=True)
            cmds.select(remapPlusMinNode, add=True)
            cmds.select(endPlusMinNode, add=True)
            if cmds.objExists(self.falloffName+'_UtilContainer'):
                cmds.container(self.falloffName+'_UtilContainer', edit=True, includeShapes=True, includeTransform=True, force=True, addNode=cmds.ls(sl=True))
            else:
                cmds.container(n=self.falloffName+'_UtilContainer', includeShapes=True, includeTransform=True, force=True, addNode=cmds.ls(sl=True))

            if cmds.objExists(self.falloffName+'_FeatherfalloffSet'):
                cmds.select(featherCNTRL, r=True)
                cmds.sets(cmds.ls(sl=True), add=theSet)
            else:
                cmds.select(featherCNTRL, r=True)
                theSet = cmds.sets(n=self.falloffName+'_FeatherfalloffSet')
            counter = counter+1
コード例 #36
0
ファイル: GUI_Feather.py プロジェクト: lixXxor/Maya-Feather
    def createFalloffObject(self):
        circle1 = cmds.circle(r=self.size)
        circle2 = cmds.circle(r=self.size)
        cmds.rotate(0,'90deg',0,circle2[0])
        self.falloffName = cmds.spaceLocator(n='Falloff_Obj')[0];
        #Kanske connecta Falloff_size med radien pa cirklarna
        cmds.addAttr(self.falloffName, at='double', k=True, dv=self.size,ln='Falloff_Size' )
        locGroup = cmds.group(circle1, circle2, n='circleGroup')
        cmds.setAttr(self.falloffName+'.visibility', 0)
        movingLocator = cmds.spaceLocator(n='Move_This_Obj')[0]
        cmds.addAttr(movingLocator, at='double', k=True, dv=self.size,ln='Falloff_Size' )
        cmds.connectAttr(movingLocator+'.Falloff_Size',self.falloffName+'.Falloff_Size')
        cmds.connectAttr(movingLocator+'.translate', self.falloffName+'.translate')
        cmds.connectAttr(movingLocator+'.rotate', self.falloffName+'.rotate')
        cmds.connectAttr(movingLocator+'.scale', self.falloffName+'.scale')
        cmds.parent(locGroup, movingLocator)

        # attachFalloffObject
        cmds.cycleCheck(e=0)
        controllerShapeName = self.falloffName+'Shape'
        counter = 0
        theSet = ''
        feathers = cmds.listRelatives(self.feathergroupName)
        for ScaleGroup in feathers:
            select(ScaleGroup)
            CTRLgroup = pickWalk(d='down')[0]
            initialScaleX = cmds.getAttr(CTRLgroup+'.scaleX')
            initialScaleY = cmds.getAttr(CTRLgroup+'.scaleY')
            initialScaleZ = cmds.getAttr(CTRLgroup+'.scaleZ')


            pickWalk(d='down')
            featherShape = cmds.ls(selection=True)[0]
            #Distance between feathers and falloffobject
            distNode = cmds.createNode('distanceBetween', n='distance_'+self.falloffName+str(counter))
            cmds.connectAttr(controllerShapeName+'.worldPosition[0]', distNode+'.point1')
            cmds.connectAttr(featherShape+'_DistanceLoc.worldPosition[0]', distNode+'.point2')

            #Divide Distance/FalloffSize
            multDivNode = cmds.createNode('multiplyDivide', n='MultiDiv_distDiv_'+self.falloffName+str(counter))

            cmds.connectAttr(self.falloffName+'.Falloff_Size', multDivNode+'.input2X')
            cmds.setAttr(multDivNode+'.operation', 2)
            cmds.connectAttr(distNode+'.distance', multDivNode+'.input1X')

            #Clamp division to max 1 (Value now between 0 and 1)
            clampNode = cmds.createNode('clamp', n='clamp_'+self.falloffName+str(counter))
            cmds.setAttr(clampNode+'.maxR', 1)
            cmds.connectAttr(multDivNode+'.outputX', clampNode+'.inputR')

            #Scale it with 1-ClampOutput
            plusMinNode = cmds.createNode('plusMinusAverage', n='plusMinAv_'+self.falloffName+str(counter))
            cmds.setAttr(plusMinNode+'.operation', 2)
            cmds.setAttr(plusMinNode+'.input2D[0].input2Dx', 1)
            cmds.connectAttr(clampNode+'.outputR', plusMinNode+'.input2D[1].input2Dx')

            #Make scaling correct and stuffz
            remapPlusMinNode = cmds.createNode('plusMinusAverage', n='remapPlusMinAv_'+self.falloffName+str(counter))
            cmds.setAttr(remapPlusMinNode+'.operation', 2)
            cmds.connectAttr(self.falloffName+'.scaleX', remapPlusMinNode+'.input3D[0].input3Dx')
            cmds.connectAttr(self.falloffName+'.scaleY', remapPlusMinNode+'.input3D[0].input3Dy')
            cmds.connectAttr(self.falloffName+'.scaleZ', remapPlusMinNode+'.input3D[0].input3Dz')
            cmds.setAttr(remapPlusMinNode+'.input3D[1].input3Dx', 1)
            cmds.setAttr(remapPlusMinNode+'.input3D[1].input3Dy', 1)
            cmds.setAttr(remapPlusMinNode+'.input3D[1].input3Dz', 1)



            #Rotation and scaling stuff going strong
            multRotNode = cmds.createNode('multiplyDivide', n='MultiDiv_multRot_'+self.falloffName+str(counter))
            multScaleNode = cmds.createNode('multiplyDivide', n='MultiDiv_multScale_'+self.falloffName+str(counter))

            cmds.connectAttr(plusMinNode+'.output2Dx', multRotNode+'.input1X')
            cmds.connectAttr(plusMinNode+'.output2Dx', multScaleNode+'.input1X')

            multReverseNode = cmds.createNode('multiplyDivide', n='MultiDiv_multReverse_'+self.falloffName+str(counter))
            cmds.setAttr(multReverseNode+'.input2X', -1)

            cmds.connectAttr(multRotNode+'.outputX', multReverseNode+'.input1X')

            #Ranges, ranges, ranges...
            rotRangeNode = cmds.createNode('setRange', n='setRange_RotRange_'+self.falloffName+str(counter))
            scaleRangeNode = cmds.createNode('setRange', n='setRange_ScaleRange_'+self.falloffName+str(counter))

            cmds.setAttr(rotRangeNode+'.oldMinX', -360)
            cmds.setAttr(rotRangeNode+'.oldMaxX', 360)
            cmds.setAttr(rotRangeNode+'.oldMinY', -360)
            cmds.setAttr(rotRangeNode+'.oldMaxY', 360)
            cmds.setAttr(rotRangeNode+'.oldMinZ', -360)
            cmds.setAttr(rotRangeNode+'.oldMaxZ', 360)

            cmds.setAttr(scaleRangeNode+'.minX', 0)
            cmds.setAttr(scaleRangeNode+'.minY', 0)
            cmds.setAttr(scaleRangeNode+'.minZ', 0)

            cmds.setAttr(scaleRangeNode+'.oldMinX', 0)
            cmds.setAttr(scaleRangeNode+'.oldMinY', 0)
            cmds.setAttr(scaleRangeNode+'.oldMinZ', 0)

            cmds.setAttr(scaleRangeNode+'.oldMaxX', 25)
            cmds.setAttr(scaleRangeNode+'.oldMaxY', 25)
            cmds.setAttr(scaleRangeNode+'.oldMaxZ', 25)

            #Connect this..
            cmds.connectAttr(multReverseNode+'.outputX', rotRangeNode+'.minX')
            cmds.connectAttr(multReverseNode+'.outputX', rotRangeNode+'.minY')
            cmds.connectAttr(multReverseNode+'.outputX', rotRangeNode+'.minZ')

            cmds.connectAttr(multRotNode+'.outputX', rotRangeNode+'.maxX')
            cmds.connectAttr(multRotNode+'.outputX', rotRangeNode+'.maxY')
            cmds.connectAttr(multRotNode+'.outputX', rotRangeNode+'.maxZ')

            cmds.connectAttr(multScaleNode+'.outputX', scaleRangeNode+'.maxX')
            cmds.connectAttr(multScaleNode+'.outputX', scaleRangeNode+'.maxY')
            cmds.connectAttr(multScaleNode+'.outputX', scaleRangeNode+'.maxZ')

            cmds.connectAttr(rotRangeNode+'.oldMaxX', multRotNode+'.input2X')
            cmds.connectAttr(scaleRangeNode+'.oldMaxX', multScaleNode+'.input2X')

            cmds.connectAttr(self.falloffName+'.rotateX', rotRangeNode+'.valueX')
            cmds.connectAttr(self.falloffName+'.rotateY', rotRangeNode+'.valueY')
            cmds.connectAttr(self.falloffName+'.rotateZ', rotRangeNode+'.valueZ')

            #Connect to feather shape
            cmds.connectAttr(rotRangeNode+'.outValueX', CTRLgroup+'.rotateX')
            cmds.connectAttr(rotRangeNode+'.outValueY', CTRLgroup+'.rotateY')
            cmds.connectAttr(rotRangeNode+'.outValueZ', CTRLgroup+'.rotateZ')

            endPlusMinNode = cmds.createNode('plusMinusAverage', n='endPlusMinAv_'+self.falloffName+str(counter))

            cmds.setAttr(endPlusMinNode+'.operation', 1)
            cmds.setAttr(endPlusMinNode+'.input3D[0].input3Dx', initialScaleX)
            cmds.setAttr(endPlusMinNode+'.input3D[0].input3Dy', initialScaleY)
            cmds.setAttr(endPlusMinNode+'.input3D[0].input3Dz', initialScaleZ)
            cmds.connectAttr(remapPlusMinNode+'.output3Dx', scaleRangeNode+'.valueX')
            cmds.connectAttr(remapPlusMinNode+'.output3Dy', scaleRangeNode+'.valueY')
            cmds.connectAttr(remapPlusMinNode+'.output3Dz', scaleRangeNode+'.valueZ')

            cmds.connectAttr(scaleRangeNode+'.outValueX', endPlusMinNode+'.input3D[1].input3Dx')
            cmds.connectAttr(scaleRangeNode+'.outValueY', endPlusMinNode+'.input3D[1].input3Dy')
            cmds.connectAttr(scaleRangeNode+'.outValueZ', endPlusMinNode+'.input3D[1].input3Dz')

            cmds.connectAttr(endPlusMinNode+'.output3Dx', CTRLgroup+'.scaleX')
            cmds.connectAttr(endPlusMinNode+'.output3Dy', CTRLgroup+'.scaleY')
            cmds.connectAttr(endPlusMinNode+'.output3Dz', CTRLgroup+'.scaleZ')


            #Add every node to a container
            cmds.select(distNode, r=True)
            cmds.select(multDivNode, add=True)
            cmds.select(clampNode, add=True)
            cmds.select(plusMinNode, add=True)
            cmds.select(multRotNode, add=True)
            cmds.select(multScaleNode, add=True)
            cmds.select(multReverseNode, add=True)
            cmds.select(rotRangeNode, add=True)
            cmds.select(scaleRangeNode, add=True)
            cmds.select(remapPlusMinNode, add=True)
            cmds.select(endPlusMinNode, add=True)
            if cmds.objExists(self.falloffName+'_UtilContainer'):
                cmds.container(self.falloffName+'_UtilContainer', edit=True, includeShapes=True, includeTransform=True, force=True, addNode=cmds.ls(sl=True))
            else:
                cmds.container(n=self.falloffName+'_UtilContainer', includeShapes=True, includeTransform=True, force=True, addNode=cmds.ls(sl=True))

            if cmds.objExists(self.falloffName+'_FeatherfalloffSet'):
                cmds.select(CTRLgroup, r=True)
                cmds.sets(cmds.ls(sl=True), add=theSet)
            else:
                cmds.select(CTRLgroup, r=True)
                theSet = cmds.sets(n=self.falloffName+'_FeatherfalloffSet')
            counter = counter+1
コード例 #37
0
def k_mayaMax_camTransfer():
    u'''
    {'load':'maya_tool','defaultOption':1,'CNname':'Maya立体相机转Max'}
    '''
    cames = [
        a for a in cmds.ls(sl=True)
        if cmds.ls(cmds.listRelatives(a, c=1), type="camera") != []
    ]
    if cames != []:
        cmds.cycleCheck(e=0)
        stm = cmds.playbackOptions(q=True, minTime=True)
        etm = cmds.playbackOptions(q=True, maxTime=True)
        timRgs = etm - stm + 1
        timRg = int(timRgs)

        cmds.polyCube(name='locS_')
        cmds.delete('locS_*')

        localS = []

        for i in cames:
            loco1 = cmds.spaceLocator(name=i)
            loco1New = cmds.rename('locS_' + loco1[0])
            cmds.addAttr(longName='FlimOffset', attributeType='double3')
            cmds.addAttr(longName='XX',
                         attributeType='double',
                         parent='FlimOffset')
            cmds.addAttr(longName='YY',
                         attributeType='double',
                         parent='FlimOffset')
            cmds.addAttr(longName='focalLen',
                         attributeType='double',
                         parent='FlimOffset')
            localS.append(loco1New)

        for i2 in range(0, timRg + 1, 1):
            cons = 0
            for i3 in cames:
                cmds.select(i3)
                caT = cmds.xform(q=1, ws=1, t=1)
                caR = cmds.xform(q=1, ws=1, ro=1)
                hfa = cmds.camera(i3, q=True, hfa=True)
                vfa = cmds.camera(i3, q=True, vfa=True)
                hfo = cmds.camera(i3, q=True, hfo=True)
                vfo = cmds.camera(i3, q=True, vfo=True)
                horHo = hfo / hfa
                vorHo = vfo / hfa
                cFL = cmds.camera(cames[cons], q=True, hfv=True)
                cmds.setAttr(localS[cons] + '.XX', (horHo * -1))
                cmds.setAttr(localS[cons] + '.YY', (vorHo * -1))
                cmds.setAttr(localS[cons] + '.focalLen', cFL)
                cmds.setKeyframe(localS[cons], at='XX')
                cmds.setKeyframe(localS[cons], at='YY')
                cmds.setKeyframe(localS[cons], at='focalLen')

                cmds.setAttr(localS[cons] + '.tx', caT[0])
                cmds.setAttr(localS[cons] + '.ty', caT[1])
                cmds.setAttr(localS[cons] + '.tz', caT[2])
                cmds.setAttr(localS[cons] + '.rx', caR[0])
                cmds.setAttr(localS[cons] + '.ry', caR[1])
                cmds.setAttr(localS[cons] + '.rz', caR[2])
                cmds.setKeyframe(localS[cons], at='tx')
                cmds.setKeyframe(localS[cons], at='ty')
                cmds.setKeyframe(localS[cons], at='tz')
                cmds.setKeyframe(localS[cons], at='rx')
                cmds.setKeyframe(localS[cons], at='ry')
                cmds.setKeyframe(localS[cons], at='rz')
                cons = cons + 1
            cmds.currentTime(stm + i2)
        cmds.currentTime(stm)
        print "MayaCamLocater is created!!",
    else:
        cmds.warning("please select Target camera and do it again!!")
コード例 #38
0
            "default":True
        },{ "name":"displayAffected",
            "command":"cmds.displayAffected(onOff)",
            "default":False
        },{ "name":"undoQueue",
            "command":"if onOff: cmds.undoInfo( state=True, infinity=False, length=300)",
            "default":True
        },{ "name":"scrubbingUndo",
            "command":"commandsMod.scrubbingUndo(onOff)",
            "default":True
        },{ "name":"zoomTowardsCenter",
            "command":"cmds.dollyCtx('dollyContext', edit=True, dollyTowardsCenter=onOff)",
            "default":cmds.dollyCtx('dollyContext', query=True, dollyTowardsCenter=True)
        },{ "name":"cycleCheck",
            "command":"cmds.cycleCheck(evaluation=onOff)",
            "default":cmds.cycleCheck(query=True, evaluation=True)
        }]    





class GeneralTools_Gui(uiMod.BaseSubUI):
        
    def createLayout(self):     
       
        mainLayout = cmds.rowLayout(numberOfColumns=6, parent=self.parentLayout)
        
        #manipulator orientation
        #cmds.iconTextButton("manipOrientButton", style='textOnly',  label='-', h=self.hb, annotation="Selected objects", command=updateManipOrient)  
        #launchManipOrient()
コード例 #39
0
def rsObjectsInPath(l_curves, i_number=3, i_type=0, b_consPos=True, b_consOri=True, b_orientWorld=True, b_parentHierarchy=False, b_selectNewObjs=True, o_toCurve=None, i_instance=0, i_loft=0):
    l_selIn = cmds.ls(sl=True, o=False)
    cmds.select(cl=True)
    l_list = []
    try:
        if cmds.objExists(l_curves):
            l_list.append(l_curves)
    except:
        pass
    for o_obj in l_curves:
        if cmds.objExists(o_obj):
            l_list.append(o_obj)
    if len(l_list) == 0:
        cmds.warning("Wrong input argument")
        return False
    l_curves = l_list
    d_type = {0: "group", 1: "spaceLocator", 2: "joint", 3: "Scene object"}
    l_targets = []
    l_objReturns = []
    for o_obj in l_curves:
        if cmds.objExists(o_obj):
            l_shapes = cmds.listRelatives(o_obj, s=True)
            for o_shape in l_shapes:
                if cmds.nodeType(o_shape) == "nurbsCurve" or cmds.nodeType(o_shape) == "bezierCurve":
                    l_targets.append(o_shape)
        else:
            cmds.warning("%s > A Does not exist" % (o_obj))
    if len(l_targets) > 0:
        l_loft = []
        for o_target in l_targets:
            l_tmpObjReturns = []
            i_openCloseVal = cmds.getAttr("%s.f" % (o_target))
            if i_openCloseVal == 0:
                f_div = 1.00 / (i_number - 1)
            else:
                f_div = 1.00 / i_number
            l_uValues = []
            for z in range(i_number):
                l_uValues.append(f_div * z)
            for z in range(i_number):
                o_obj = None
                if i_type != 3:
                    if i_type in d_type:
                        if i_type == 0:
                            o_obj = cmds.group(em=True)
                        if i_type == 1:
                            o_obj = cmds.spaceLocator()[0]
                        if i_type == 2:
                            o_obj = cmds.joint()
                    else:
                        cmds.warning("Type not recognized")
                        break
                else:
                    if cmds.objExists(o_toCurve):
                        if i_instance == 0:
                            o_obj = cmds.duplicate(o_toCurve)[0]
                        else:
                            o_obj = cmds.instance(o_toCurve)[0]
                    else:
                        cmds.warning("%s > B Does not exist" % (o_toCurve))
                        break
                l_objReturns.append(o_obj)
                l_tmpObjReturns.append(o_obj)
                o_path = cmds.pathAnimation(o_obj, o_target, f=b_consOri, fractionMode=True, followAxis="y", upAxis="z", worldUpType="vector")
                o_incomingConnection = cmds.listConnections("%s.uValue" % (o_path), destination=False, source=True)[0]
                cmds.cycleCheck(e=0)
                cmds.delete(o_incomingConnection)
                cmds.cycleCheck(e=1)
                cmds.setAttr("%s.uValue" % (o_path), l_uValues[z])
                if not b_consOri and not b_consPos:
                    o_incoming = cmds.listConnections("%s.rotateX" % (o_obj), destination=False, source=True)[0]
                    cmds.cycleCheck(e=0)
                    cmds.delete(o_incoming)
                    cmds.cycleCheck(e=1)
                if b_consOri and not b_consPos:
                    o_incomingX = cmds.listConnections("%s.translateX" % (o_obj), plugs=True, destination=False, source=True)[0]
                    o_incomingY = cmds.listConnections("%s.translateY" % (o_obj), plugs=True, destination=False, source=True)[0]
                    o_incomingZ = cmds.listConnections("%s.translateZ" % (o_obj), plugs=True, destination=False, source=True)[0]
                    cmds.disconnectAttr(o_incomingX, "%s.translateX" % (o_obj))
                    cmds.disconnectAttr(o_incomingY, "%s.translateY" % (o_obj))
                    cmds.disconnectAttr(o_incomingZ, "%s.translateZ" % (o_obj))
                if not b_consOri and b_consPos:
                    o_incomingX = cmds.listConnections("%s.rotateX" % (o_obj), plugs=True, destination=False, source=True)[0]
                    o_incomingY = cmds.listConnections("%s.rotateY" % (o_obj), plugs=True, destination=False, source=True)[0]
                    o_incomingZ = cmds.listConnections("%s.rotateZ" % (o_obj), plugs=True, destination=False, source=True)[0]
                    cmds.disconnectAttr(o_incomingX, "%s.rotateX" % (o_obj))
                    cmds.disconnectAttr(o_incomingY, "%s.rotateY" % (o_obj))
                    cmds.disconnectAttr(o_incomingZ, "%s.rotateZ" % (o_obj))
                    cmds.setAttr("%s.follow" % (o_path), b_consOri)
                if not b_consOri and b_orientWorld:
                    cmds.setAttr("%s.rotateX" % (o_obj), 0)
                    cmds.setAttr("%s.rotateY" % (o_obj), 0)
                    cmds.setAttr("%s.rotateZ" % (o_obj), 0)
                cmds.select(cl=True)
            o_loft = ""
            if i_loft > 0:
                if i_loft == 1:
                    o_loftPoly = cmds.loft(l_tmpObjReturns, ch=1, u=1, c=0, ar=1, d=3, ss=1, rn=0, po=1, rsn=True)
                    o_outcoming = cmds.listConnections("%s.outputSurface" % (o_loftPoly[1]), plugs=False, destination=True, source=False)[0]
                    o_loft = o_loftPoly[1]
                    l_loft.append(o_loftPoly[0])
                    cmds.setAttr("%s.polygonType" % (o_outcoming), 1)
                    cmds.setAttr("%s.format" % (o_outcoming), 2)
                    cmds.setAttr("%s.uType" % (o_outcoming), 3)
                    cmds.setAttr("%s.uNumber" % (o_outcoming), 1)
                    cmds.setAttr("%s.vType" % (o_outcoming), 3)
                    cmds.setAttr("%s.vNumber" % (o_outcoming), 1)
                if i_loft == 2:
                    cmds.loft(l_tmpObjReturns, ch=1, u=1, c=0, ar=1, d=3, ss=1, rn=0, po=0, rsn=True)
                if i_loft > 2:
                    cmds.warning("Loft type not recognized")
            cmds.select(cl=True)
            if b_parentHierarchy:
                if not b_consPos and not b_consOri:
                    l_tmpObjReturns.reverse()
                    for z in range(len(l_tmpObjReturns) - 1):
                        cmds.parent(l_tmpObjReturns[z], l_tmpObjReturns[z + 1])
                else:
                    cmds.warning("Objects cannot be in hierarchy, , they have transformations constraints")
            cmds.select(cl=True)
        if b_selectNewObjs:
            if l_objReturns != []:
                cmds.select(l_objReturns)
                if len(l_loft) > 0:
                    cmds.select(l_loft, add=True)
            else:
                if l_selIn != []:
                    cmds.select(l_selIn)
        else:
            if l_selIn != []:
                cmds.select(l_selIn)
    return(l_objReturns, l_targets, l_loft)