Untitled
unknown
plain_text
2 years ago
4.9 kB
4
Indexable
''' ShuffleControl v1.0 by Jorrit Schulte Add this to menu.py: toolbar = nuke.toolbar("Nodes") toolsMenu = toolbar.addMenu("Tools") toolsMenu.addCommand("ShuffleControl", "nuke.load('ShuffleControl')") ''' try: from PySide.QtGui import * from PySide.QtCore import * except ImportError: from PySide2.QtWidgets import * from PySide2.QtCore import * from PySide2.QtGui import * from ShuffleControl_interface import Ui_MainWindow #checks if there is a node selected before opening the ui showWindow = True try: node = nuke.selectedNode() channels = node.channels() channels = list( set([channel.split('.')[0] for channel in channels]) ) channels.sort() except: showWindow = False nuke.message('No node selected') class Panel(QMainWindow, Ui_MainWindow): def __init__(self): super(Panel, self).__init__() self.setupUi(self) self.center() for channel in channels: if channel != 'rgba': self.inList.addItem(channel) self.shuffleButton.clicked.connect(self.preRun) self.close #checks if there is at least one channel selected def preRun(self): if self.outList.count() > 0: self.run() self.close() else: self.close() nuke.message('no channels were chosen.') def run(self): undo = nuke.Undo() undo.begin("ShuffleControl") out = [] x = self.horizontalSpacing.value() y = self.verticalSpacing.value() latestDot = node latestMerge = '' count = self.outList.count() for index in range(count): channelName = str( self.outList.item(index).text() ) out.append(channelName) #build dot node dot = nuke.nodes.Dot() dot.setInput(0, latestDot) if latestMerge == '': dot['xpos'].setValue(latestDot.xpos()+node.screenWidth()/2 - 6) dot['ypos'].setValue(latestDot.ypos()+200) else: dot['xpos'].setValue(latestDot.xpos()+x) dot['ypos'].setValue(latestDot.ypos()) dot['label'].setValue(channelName) dot['note_font_size'].setValue(50) #build shuffle node shuffle = nuke.nodes.Shuffle() shuffle.setInput(0, dot) shuffle['in'].setValue(channelName) shuffle['alpha'].setValue(0) shuffle['postage_stamp'].setValue(True) shuffle['xpos'].setValue(dot.xpos()-34) shuffle['ypos'].setValue(dot.ypos()+18) #build merge node if latestMerge == '': merge = nuke.nodes.Dot() merge['xpos'].setValue(dot.xpos()) merge['ypos'].setValue(shuffle.ypos()+y+4) merge.setInput(0, shuffle) else: merge = nuke.nodes.Merge2() merge.setInput(0, latestMerge) merge.setInput(1, shuffle) merge['xpos'].setValue(dot.xpos() - merge.screenWidth()/2 + 6) merge['ypos'].setValue(shuffle.ypos()+y) merge['operation'].setValue('plus') #redefine latest nodes latestDot = dot latestMerge = merge #create Expression node if self.expressionNodeBox.isChecked() == True: #expression dot node Xdot = nuke.nodes.Dot() Xdot.setInput(0, latestDot) Xdot['xpos'].setValue(latestDot.xpos()+x) Xdot['ypos'].setValue(latestDot.ypos()) Xdot['label'].setValue('difference') Xdot['note_font_size'].setValue(50) #write expression r = 'red' g = 'green' b = 'blue' for i in out: r += ' - ' + i + '.red' g += ' - ' + i + '.green' b += ' - ' + i + '.blue' #buid expression node expression = nuke.nodes.Expression() expression.setInput(0, Xdot) expression['expr0'].setValue(r) expression['expr1'].setValue(g) expression['expr2'].setValue(b) expression['expr3'].setValue('0') expression['postage_stamp'].setValue(True) expression['xpos'].setValue(Xdot.xpos()-34) expression['ypos'].setValue(Xdot.ypos()+18) merge = nuke.nodes.Merge2() merge.setInput(0, latestMerge) merge.setInput(1, expression) merge['xpos'].setValue(Xdot.xpos() - merge.screenWidth()/2 + 6) merge['ypos'].setValue(shuffle.ypos()+y) merge['operation'].setValue('plus') latestDot = Xdot latestMerge = merge #create Copy Alpha node if self.alphaBox.isChecked() == True: #alpha dot node Adot = nuke.nodes.Dot() Adot.setInput(0, latestDot) Adot['xpos'].setValue(latestDot.xpos()+x) Adot['ypos'].setValue(latestDot.ypos()) Adot['label'].setValue('alpha') Adot['note_font_size'].setValue(50) #build Copy node copy = nuke.nodes.Copy() copy.setInput(0, latestMerge) copy.setInput(1, Adot) copy['xpos'].setValue(Adot.xpos() - copy.screenWidth()/2 + 6) copy['ypos'].setValue(latestMerge.ypos() - 6) copy['from0'].setValue('rgba.alpha') copy['to0'].setValue('rgba.alpha') undo.end() #Center widget to correct screen def center(self): frameGm = self.frameGeometry() screen = QApplication.desktop().screenNumber(QApplication.desktop().cursor().pos()) centerPoint = QApplication.desktop().screenGeometry(screen).center() frameGm.moveCenter(centerPoint) self.move(frameGm.topLeft()) if showWindow: panel = Panel() panel.show()
Editor is loading...