Untitled
unknown
plain_text
2 years ago
5.4 kB
2
Indexable
Never
def AG_RemoveAll(): #disable undo recording undo = nuke.Undo() undo.disable() if nuke.ask('are you sure you want to remove all areas?'): node = nuke.thisNode() knobs = ['Start', 'End', 'Area', 'Grow', 'Color', 'Remove', '_panelDropped'] for knob in node.allKnobs(): kn = knob.name() if kn.startswith('A') and kn.endswith(tuple(knobs)): node.removeKnob(knob) #delete radial nodes with node: for n in nuke.allNodes(): if n.Class() == 'Radial': nuke.delete(n) node['count'].setValue(0) #re-anable undo recording undo.enable() def AG_RemoveArea(): #disable undo recording undo = nuke.Undo() undo.disable() node = nuke.thisNode() name = nuke.thisKnob().name().replace('Remove', '') #delete radial node with node: nuke.delete(nuke.toNode(name)) knobs = ['Start', 'End', 'Area', 'Grow', 'Color', 'Remove', 'Color_panelDropped'] for i in knobs: try: node.removeKnob(node.knobs()[name + i]) except: pass #re-anable undo recording undo.enable() def AG_AddArea(): #disable undo recording undo = nuke.Undo() undo.disable() node = nuke.thisNode() colorMode = node['colormode'].getValue() count = int(node['count'].value() + 1) node['count'].setValue(count) #Open Group Knob gk = nuke.Tab_Knob('A' + str(count) + 'Start', 'area ' + str(count), 1) node.addKnob(gk) #Add Area Knobs removeKnob = nuke.PyScript_Knob('A' + str(count) + 'Remove', 'remove area', 'AG_RemoveArea()') node.addKnob(removeKnob) areaKnob = nuke.BBox_Knob('A' + str(count) + 'Area', 'area') areaKnob.setValue((-50,-50,50,50)) node.addKnob(areaKnob) growKnob = nuke.Double_Knob('A' + str(count) + 'Grow', 'grow') node.addKnob(growKnob) colorKnob = nuke.Color_Knob('A' + str(count) + 'Color', 'color') if colorMode == 0: colorKnob.setFlag(0x00040000) node.addKnob(colorKnob) #Close Group Knob gk = nuke.Tab_Knob('A' + str(count) + 'End', ' ', -1) node.addKnob(gk) #stuff inside main node with node: merge = nuke.toNode('RadialMerge') #add radial node radialName = 'A' + str(count) radial = nuke.nodes.Radial(name = radialName, cliptype = 0) radial['area'].setExpression('[python {AG_GrowArea("%s")[0]}]' % (radialName), 0) radial['area'].setExpression('[python {AG_GrowArea("%s")[1]}]' % (radialName), 1) radial['area'].setExpression('[python {AG_GrowArea("%s")[2]}]' % (radialName), 2) radial['area'].setExpression('[python {AG_GrowArea("%s")[3]}]' % (radialName), 3) radial['color'].setValue([0,0,0,1]) radial['color'].setExpression('colormode ? %sColor : [python AG_SampleSource("%s", 0)]' % (radialName,radialName), 0) radial['color'].setExpression('colormode ? %sColor : [python AG_SampleSource("%s", 1)]' % (radialName,radialName), 1) radial['color'].setExpression('colormode ? %sColor : [python AG_SampleSource("%s", 2)]' % (radialName,radialName), 2) #connect to merge node inputs = merge.inputs() if inputs == 2: inputs += 1 merge.setInput(inputs,radial) #re-anable undo recording undo.enable() def AG_SampleSource(areaName, indx): try: inputNode = nuke.thisGroup().input(0) area = list(nuke.thisGroup()[areaName + 'Area'].value()) xpos = (area[0] + area[2])/2 ypos = (area[1] + area[3])/2 xsize = max(area[0], area[2]) - min(area[0], area[2]) ysize = max(area[1], area[3]) - min(area[1], area[3]) if indx == 0: return inputNode.sample('rgb.red', xpos+.5, ypos+.5, xsize, ysize) if indx == 1: return inputNode.sample('rgb.green', xpos+.5, ypos+.5, xsize, ysize) if indx == 2: return inputNode.sample('rgb.blue', xpos+.5, ypos+.5, xsize, ysize) else: return 0 except: return 0 def AG_GrowArea(name): node = nuke.thisGroup() area = list(node[name + 'Area'].value()) xsize = max(area[0], area[2]) - min(area[0], area[2]) ysize = max(area[1], area[3]) - min(area[1], area[3]) grow = node[name+'Grow'].value() grow = grow if grow >= 0 else grow/(1-grow) growGlobal = node['growGlobal'].value() growGlobal = growGlobal if growGlobal >= 0 else growGlobal/(1-growGlobal) total = (grow+1)*(growGlobal+1) xg = (xsize*total - xsize)/2 yg = (ysize*total - ysize)/2 if area[0] > area[2]: area[0] = area[0] + xg area[2] = area[2] - xg else: area[0] = area[0] - xg area[2] = area[2] + xg if area[1] > area[3]: area[1] = area[1] + yg area[3] = area[3] - yg else: area[1] = area[1] - yg area[3] = area[3] + yg return area def AG_MakeRenderFarmFriendly(node): import inspect import AreaGradient a = inspect.getsource(AreaGradient.AG_SampleSource) b = inspect.getsource(AreaGradient.AG_GrowArea) node['onCreate'].setValue(a+b)