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
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
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
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
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
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 []
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 []