示例#1
0
    def createShaderFromConfig(cls, shaderConfig):
        """create a shader and engine if not already available"""

        if not cls.shaderExistsInScene(shaderConfig):
            shader = cmds.shadingNode(
                shaderConfig['type'],
                name=shaderConfig['uid'],
                asShader=True)
            cmds.setAttr(shader + '.color', *shaderConfig['color'], type='double3')
            if 'transparency' in shaderConfig:
                cmds.setAttr(
                    shader + '.transparency',
                    *shaderConfig['transparency'], type='double3')

            shaderEngine = cmds.sets(
                renderable=True,
                noSurfaceShader=True,
                empty=True,
                name=shader + '_SG')
            cmds.connectAttr(shader + '.outColor', shaderEngine + '.surfaceShader')
        else:
            shader  = shaderConfig['uid']
            engines = cmds.listConnections(shader + '.outColor')
            if engines:
                shaderEngine = engines[0]
            else:
                shaderEngine = cmds.sets(
                    renderable=True,
                    noSurfaceShader=True,
                    empty=True,
                    name=shader + '_SG')
                cmds.connectAttr(shader + '.outColor', shaderEngine + '.surfaceShader')

        return shader, shaderEngine
示例#2
0
    def getTrackManagerNode(cls, trackSetNode =None, createIfMissing =False):
        """ Returns the name of the track manager nodeName for the current
            Cadence scene.

            trackSetNode: The track set nodeName on which to find the track
            manager nodeName.  If no nodeName is specified the method will look
            it up internally.

            createIfMissing: If true and no track manager nodeName is found one
            will be created and connected to the track set nodeName, which will
            also be created if one does not exist. """

        if not trackSetNode:
            trackSetNode = cls.getTrackSetNode(createIfMissing=createIfMissing)

        connects = cmds.listConnections(
                trackSetNode + '.usedBy',
                source=True,
                destination=False)
        if connects:
            for node in connects:
                if cmds.nodeType(node) == 'trackManager':
                    return node

        if createIfMissing:
            node = cmds.createNode('trackManager')
            cmds.connectAttr(
                node + '.trackSet', trackSetNode + '.usedBy', force=True)
            return node

        return None
示例#3
0
文件: Track.py 项目: sernst/Cadence
    def nextNode(self):
        connections = cmds.listConnections(self.node + '.message', d=True, p=True)
        if not connections:
            return None

        for c in connections:
            if c.endswith('.prevTrack'):
                node = c.split('.')[0]
                return node
        return None
示例#4
0
def bouncingBubble(amp, sampFreq, scaleFactor):
    startRadius = 1.0  #2.865
    spf = sampFreq / 24  # approximate samples per frame
    sphere = cmds.polySphere(
        n='bubble',
        r=startRadius)[0]  # bakes in radius, scale of 1.0 makes radius 2.865
    shader = str(
        cmds.listConnections(cmds.listHistory(sphere, f=1), type='lambert')[0])

    print('Created ' + sphere + ' with shader ' + shader)
    # cmds.xform('column', t = [0,.5,0], sp=[0,-.5,0]) # move scale pivot to bottom of shape

    frameWin = BoxOnSphere.SPHERE_STEP
    print('Calculating average amplitude for every ' + str(frameWin) +
          '-frame (' + str(frameWin / 24.) + ' second) ' + 'window')
    avgs = averageAmplitude(amp, spf * frameWin)
    curProg = 1
    tenPercent = len(avgs) / 10
    # scaleFactor = 10.0
    print('Keyframing size translations')
    for i in range(1, len(avgs)):
        h = normalize(
            avgs, i
        ) * scaleFactor  # take away or add + 1 to allow or disallow the sphere to decay infinitely small
        cmds.setKeyframe(sphere, v=h, at='scaleX', t=(i - 1) * frameWin)
        cmds.setKeyframe(sphere, v=h, at='scaleY', t=(i - 1) * frameWin)
        cmds.setKeyframe(sphere, v=h, at='scaleZ', t=(i - 1) * frameWin)
        if i % tenPercent == 0:
            if not (curProg == 0 or curProg == 10):
                sys.stdout.write(str(curProg) + '0%...')
                curProg += 1
    print('100%')

    frameWin = 10
    print('Calculating average amplitude for every ' + str(frameWin) +
          '-frame (' + str(frameWin / 24.) + ' second) ' + 'window')
    avgs = averageAmplitude(amp, spf * frameWin)
    curProg = 1
    tenPercent = len(avgs) / 10
    print('Keyframing color translations')
    for i in range(1, len(avgs)):
        norm = normalize(avgs, i)
        rgb = colorsys.hsv_to_rgb(norm, 1, min(
            norm + .2, 1))  # hue and value both vary with amplitude
        # listConnections returns a list with unicode strings
        cmds.setAttr(shader + '.color', rgb[0], rgb[1], rgb[2], type='double3')
        cmds.setKeyframe(shader + '.color', at='color', t=i * frameWin)
        if i % tenPercent == 0:
            if not (curProg == 0 or curProg == 10):
                sys.stdout.write(str(curProg) + '0%...')
                curProg += 1
    print('100%')
    return sphere
示例#5
0
    def createShader(self, shaderName, shaderType ='blinn'):
        shaderEngine = None
        if not cmds.objExists(shaderName):
            shader       = cmds.shadingNode(shaderType, asShader=True)
            shader       = cmds.rename(shader, shaderName)
            shaderEngine = cmds.sets(renderable=True, empty=True, noSurfaceShader=True, name=shader + '_SG')
            cmds.connectAttr(shader + '.outColor', shaderEngine + '.surfaceShader')
        else:
            shader  = shaderName
            engines = cmds.listConnections(shader + '.outColor')
            if engines:
                shaderEngine = engines[0]

        return shader, shaderEngine
示例#6
0
    def getNext(cls, target=None):
        if not target:
            target = cmds.ls(selection=True, exactType='transform')[0]

        conns = cmds.listConnections(
            target + '.message',
            destination=True,
            plugs=True
        )
        nexts = []
        if conns:
            for c in conns:
                if c.endswith('.' + cls._PREVIOUS_PRINT_ATTR):
                    nexts.append(c.split('.')[0])
            return nexts

        return []
示例#7
0
    def getPrevious(cls, target=None):
        if not target:
            target = cls.getTargets(1)[0]

        if not cmds.attributeQuery(cls._PREVIOUS_PRINT_ATTR, node=target, exists=True):
            return []

        conns = cmds.listConnections(
            target + '.' + cls._PREVIOUS_PRINT_ATTR,
            source=True,
            plugs=True
        )
        prevs = []
        if conns:
            for c in conns:
                if c.endswith('.message'):
                    prevs.append(c.split('.')[0])
            return prevs

        return []