Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
# Write Node Switch Panel v11.0 # Written by EToth / JCollier # Updated 10/20/2016 import sys import nuke # JC: added this so it doesn't just fail to init from functools import partial from PySide2.QtGui import * from PySide2.QtCore import * #Function to clean up the filepath string, #should return just the file and extension def filePath(FilePath): FilePath=FilePath.split("/") FilePath=FilePath[-1] FilePath=FilePath.replace(".%04d","") return FilePath #Function to disable all Write Nodes def disableAll(): for node in nuke.allNodes("Write"): node['disable'].setValue(True) for node in nuke.allNodes("WriteTank"): node['disable'].setValue(True) for node in nuke.allNodes("WriteGeo"): node['disable'].setValue(True) #Function to enable all Write Nodes def enableAll(): for node in nuke.allNodes("Write"): node['disable'].setValue(False) for node in nuke.allNodes("WriteTank"): node['disable'].setValue(False) for node in nuke.allNodes("WriteGeo"): node['disable'].setValue(False) #Function to restore Write nodes to what they were when the panel was first opened. def currentStatus(nodeList,self): #print 'nodeList: {}'.format(str(nodeList)) #checkboxes = [] for node in range(0,len(nodeList)): nuke.toNode(nodeList[node][0])['disable'].setValue(nodeList[node][2]) temp = nodeList[node][0] #print temp, nodeList[node][2] if nodeList[node][2] == True: exec("self.checkbox_"+temp+".setChecked(False)") #print nodeList[node][0], "TRUE" else: exec("self.checkbox_"+temp+".setChecked(True)") #print nodeList[node][0], "FALSE" #Function to select all write nodes (Shotgun nodes included) def selectAll(): for node in nuke.allNodes("Write"): node['selected'].setValue(True) for node in nuke.allNodes("WriteTank"): node['selected'].setValue(True) for node in nuke.allNodes("WriteGeo"): node['selected'].setValue(True) #Function to select all Shotgun Write nodes def selectSG(): for node in nuke.allNodes(): node['selected'].setValue(False) for node in nuke.allNodes("WriteTank"): node['selected'].setValue(True) #Function to select all non-SG Write nodes def selectWrite(): for node in nuke.allNodes(): node['selected'].setValue(False) for node in nuke.allNodes("Write"): node['selected'].setValue(True) #Function to select nothing def selectNone(): for node in nuke.allNodes(): node['selected'].setValue(False) #Function to return a list of all Write, WriteGeo, SGTK Write Nodes #as a list of nodes wih their attributes inside def nodeList(): NodeList=[] #find all Write Nodes and append to NodeList for node in nuke.allNodes('Write'): nodeInfo=[] nodeInfo.append(node['name'].getValue()) nodeInfo.append(filePath(node['file'].getValue())) nodeInfo.append(node['disable'].value()) nodeInfo.append(node.Class()) NodeList.append(nodeInfo) #find all WriteGeo Nodes and append to NodeList for node in nuke.allNodes('WriteGeo'): nodeInfo=[] nodeInfo.append(node['name'].getValue()) nodeInfo.append(filePath(node['file'].getValue())) nodeInfo.append(node['disable'].value()) nodeInfo.append(node.Class()) NodeList.append(nodeInfo) #find all WriteGeo Nodes and append to NodeList for node in nuke.allNodes('WriteTank'): nodeInfo=[] nodeInfo.append(node['name'].getValue()) nodeInfo.append(node['path_filename'].value().replace(".%04d","")) nodeInfo.append(node['disable'].value()) nodeInfo.append(node.Class()) NodeList.append(nodeInfo) NodeList.sort(key=lambda x: x[0]) #print NodeList return NodeList #Function to open help def selfHelp(): print("Opening writeNodeSwitch help...") # the Qt for this would be: # helpURL = "https://mammal.atlassian.net/wiki/display/MC/Write+Nodes+Switch+Panel" # QtGui.QDesktopServices.openUrl(QtCore.QUrl(helpURL)) nuke.tcl("start https://mammal.atlassian.net/wiki/display/MC/Write+Nodes+Switch+Panel") class Panel(QWidget): def __init__(self): #Check allWidgets to see if "Panel" already exists, if it does, SHUT IT DOWN! for entry in QApplication.allWidgets(): if type(entry).__name__ == 'Panel': entry.close() super(Panel, self).__init__() #name the panel self.setWindowTitle("Write Node Switch Panel") #maximize #self.showMaximized() self.setGeometry(375,100,1,1) #get the nodeList self.NodeList = nodeList() layoutMaster = QHBoxLayout() layoutGroupWriteNodes = QVBoxLayout() groupWriteNodes = QGroupBox("Nuke Write Nodes") groupWriteNodes.setStyleSheet("QGroupBox {font-size: 12pt; font-weight:Bold}") layoutSGTKWriteNodes = QVBoxLayout() groupSGTKNodes = QGroupBox("Shotgun Write Nodes") groupSGTKNodes.setStyleSheet("QGroupBox {font-size: 12pt; font-weight:Bold}") layoutWriteGeoNodes = QVBoxLayout() groupWriteGeoNodes = QGroupBox("Write Geo Nodes") groupWriteGeoNodes.setStyleSheet("QGroupBox {font-size: 12pt; font-weight:Bold}") for i in range(0,len(self.NodeList)): nodeName='self.checkbox_'+str(self.NodeList[i][0]) exec(nodeName+"=QCheckBox(self.NodeList[i][0])") exec(nodeName+".setText(self.NodeList[i][0]+str(' : ')+self.NodeList[i][1])") exec(nodeName+".setChecked(1-self.NodeList[i][2])") # set the checkbox True/False exec(nodeName+".setToolTip(self.NodeList[i][0]+str(' : ')+self.NodeList[i][1])") exec(nodeName+".clicked.connect(self.who_clicked)") nodeName=str("self.checkbox_"+self.NodeList[i][0]) if self.NodeList[i][3] == "Write": layoutGroupWriteNodes.addWidget(eval(nodeName)) if self.NodeList[i][3] == "WriteTank": layoutSGTKWriteNodes.addWidget(eval(nodeName)) if self.NodeList[i][3] == "WriteGeo": layoutWriteGeoNodes.addWidget(eval(nodeName)) #addStretch to push buttons together #(otherwise they stretch to fit the vertical limit) layoutGroupWriteNodes.addStretch() layoutSGTKWriteNodes.addStretch() layoutWriteGeoNodes.addStretch() groupWriteNodes.setLayout(layoutGroupWriteNodes) groupSGTKNodes.setLayout(layoutSGTKWriteNodes) groupWriteGeoNodes.setLayout(layoutWriteGeoNodes) layoutMaster.addWidget(groupWriteNodes) layoutMaster.addWidget(groupSGTKNodes) layoutMaster.addWidget(groupWriteGeoNodes) layoutButtons = QVBoxLayout() groupButtons = QGroupBox("Buttons") #Enable All Write Nodes enableAllButton = QPushButton("Enable All") enableAllButton.clicked.connect(enableAll) enableAllButton.clicked.connect(self.enableDisable) enableAllButton.setStyleSheet("background-color: DarkGreen; font-weight: bold; font-size: 14pt") enableAllButton.setMinimumHeight(60) #Disable All Write Nodes disableAllButton = QPushButton("Disable All") disableAllButton.clicked.connect(disableAll) disableAllButton.clicked.connect(self.enableDisable) disableAllButton.setStyleSheet("background-color: DarkRed; font-weight: bold; font-size: 14pt") disableAllButton.setMinimumHeight(60) disableAllButton.setMinimumWidth(200) #Restore Write Nodes To Current Status currentStatusButton = QPushButton("Current Status") currentStatusButton.clicked.connect(partial(currentStatus, self.NodeList, self)) currentStatusButton.setStyleSheet("background-color: DarkGoldenRod; font-weight: bold; font-size: 14pt") currentStatusButton.setMinimumHeight(60) #Select All Write Nodes (Shotgun nodes included) selectAllButton = QPushButton("Select All") selectAllButton.clicked.connect(selectAll) selectAllButton.setMinimumHeight(40) #Select All Shotgun Write Nodes selectSGButton = QPushButton("Select Shotgun\nNodes") selectSGButton.clicked.connect(selectSG) selectSGButton.setMinimumHeight(40) #Select Nuke Write Nodes selectWriteButton = QPushButton("Select Nuke\nNodes") selectWriteButton.clicked.connect(selectWrite) selectWriteButton.setMinimumHeight(40) #Select Nothing selectNoneButton = QPushButton("Select None") selectNoneButton.clicked.connect(selectNone) selectNoneButton.setMinimumHeight(40) #Horizontal Lines line1 = QFrame() line1.setFrameShape(QFrame.HLine) line1.setFrameShadow(QFrame.Sunken) line2 = QFrame() line2.setFrameShape(QFrame.HLine) line2.setFrameShadow(QFrame.Sunken) line3 = QFrame() line3.setFrameShape(QFrame.HLine) line3.setFrameShadow(QFrame.Sunken) #Close the panel closeButton = QPushButton("Close") closeButton.clicked.connect(self.closePanel) closeButton.setMinimumHeight(60) closeButton.setStyleSheet("font-weight: bold; font-size: 14pt") #Help Button selfHelpButton = QPushButton("Help") selfHelpButton.clicked.connect(selfHelp) selfHelpButton.setMinimumHeight(40) #Layout the buttons across the UI layoutButtons.addWidget(enableAllButton) layoutButtons.addWidget(disableAllButton) layoutButtons.addWidget(currentStatusButton) layoutButtons.addWidget(line1) layoutButtons.addWidget(selectAllButton) layoutButtons.addWidget(selectSGButton) layoutButtons.addWidget(selectWriteButton) layoutButtons.addWidget(selectNoneButton) layoutButtons.addStretch() layoutButtons.addWidget(line2) layoutButtons.addWidget(selfHelpButton) layoutButtons.addWidget(line3) layoutButtons.addStretch() layoutButtons.addWidget(closeButton) groupButtons.setLayout(layoutButtons) layoutMaster.addWidget(groupButtons) self.setLayout(layoutMaster) #Function to close the panel # JC: I moved this into your widget class # because it was incorrectly scoped # I also fixed the corresponding connector for the # close button to call "self.closePanel" def closePanel(self): self.close() #Function to close if ESC key is pressed def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: self.close() #Function to check enable/disable in the UI Panel def who_clicked(self): sender = self.sender() senderText = self.sender().text() buttons=[] for button in range(0,len(self.NodeList)): buttons.append(self.NodeList[button][0]+' : '+self.NodeList[button][1]) x=0 for i in buttons: if i == senderText: onOff=nuke.toNode(self.NodeList[x][0]) if onOff['disable'].value() == True: onOff['disable'].setValue(False) print(self.NodeList[x][0:2], "ENABLED") else: onOff['disable'].setValue(True) print(self.NodeList[x][0:2], "DISABLED") x+=1 #Function to check all the checkboxes on/off depending on #user input of ENABLE/DISABLE ALL def enableDisable(self): sender=self.sender() senderText=self.sender().text() #print senderText checkboxes = [] for checkbox in range(0,len(self.NodeList)): checkboxes.append(self.NodeList[checkbox][0]) if senderText == "Enable All": for temp in checkboxes: #print temp exec("self.checkbox_"+temp+".setChecked(True)") elif senderText == "Disable All": for temp in checkboxes: exec("self.checkbox_"+temp+".setChecked(False)") ''' def main(): # JC: we call things as
.main() in menu.py # init the Panel instance # then show the panel panel = Panel() panel.show() if __name__ == "__main__": main() ''' # ET: In the absence of menu.py; Let's just run this in the script editor for now... panel = Panel() panel.show()
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)