>>> print "HELLO".center(50, "-") ----------------------HELLO-----------------------
mardi 21 mai 2013
joli print avec .center =)
Petit poste rapide pour vous présenter une façon de faire des prints ou commentaires de manière cool et visible; grâce a la fonction .center du module string:
jeudi 9 mai 2013
reseau to local script nuke
Rien
de bien étonnant, nuke demande énormément en appels disques et
donc sur notre réseau supinfocom, et bien ça rame pas mal !
La
solution la plus simple que j'ai trouvé a un mois de la fin et bien
c'est de rapatrier toutes nos séquences de rendu en local, rien de
bien fou... sauf que je veux garder exactement les mêmes chemins
dans mes reads pour pouvoir passer de la séquence réseau a la
séquence local juste en changeant la lettre du root (pour notre cas
de D: a W:).
De
plus j’avais pas envie de perdre de temps a faire ça manuellement
donc j'ai écris un script pour automatiser tout ceci.
Voici
le script :
import os, nuke import shutil, glob, threading from PySide import QtGui, QtCore #creation de la class progress bar en pyside class progBar(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.pBar = QtGui.QProgressBar(self) #je set la taille de la fenetre ainsi que sa position dans l'espace self.setGeometry(500,500,10,20) #je set un flag tophint pour que la progress bar soit toujours en top self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) #j'affiche le widget progress bar self.show() #creation d'une simple fonction pour seter la valeur de la progress bar def prog(self, p): self.pBar.setValue(p) #creation de la class principal derive du module thread class readOnLocalClass(threading.Thread): def __init__(self, init = True, parent = None): threading.Thread.__init__(self, parent) self.init = init if self.init: self.ini() else: self.notIni() #fonction a executer si l'argument init est True def ini(self): #ouverture d'une fenetre de dialogue pour selectionner une sequences d'image files = nuke.getClipname("files sequences : ", multiple = True) #remplacement du root W: en D: self.newPathLocal = files[0].replace("W:", "D:") #split du path pour avoir que le path self.newPathLocalSplit = os.path.split(self.newPathLocal) #si le dossier local n'existe pas alors on le cree avec makedirs, #makedirs cree de maniere recursive tout l'abre du dossier if os.path.isdir(self.newPathLocalSplit[0]): pass else: os.makedirs(self.newPathLocalSplit[0]) #je liste tout les fichiers present dans le dossier reseau self.allFiles = glob.glob(os.path.split(files[0])[0] + "\*.*") #j'appel la class progressbar et je l'affiche self.ProgBar = progBar() self.ProgBar.show() #fonction a executer si l'argument init est False #recupere le path du read selectionner et remplace le D: par W: #liste les fichiers reseau a partir du path local def notIni(self): files = nuke.selectedNode().knob("file").value() self.newPathLocal = files.replace("D:", "W:") self.allFiles = glob.glob(os.path.split(self.newPathLocal)[0] + "\*.*") self.newPathLocal = files.replace("W:", "D:") self.newPathLocalSplit = os.path.split(self.newPathLocal) #j'appel la class progressbar et je l'affiche self.ProgBar = progBar() self.ProgBar.show() #derive la fonction run du module thread def run(self): i = 0 #tant que i est pas egal au nombre de fichier present dans le dossier reseau while i != len(self.allFiles): #copie le fichier dans le nouveau dossier local shutil.copy(self.allFiles[i], self.newPathLocalSplit[0]) i+=1 #calcule du pourcentage pour la progression de la bar progr = (float(i)/float(len(self.allFiles)))*100 #progression de la bar self.ProgBar.prog(progr) print "le thread est finit" self.ProgBar.close() self.creaRead() #fonction pour creer le node read ainsi que le bouton reload def creaRead(self): if self.init: #creation du node read self.read = nuke.createNode('Read', 'file {' + self.newPathLocal + '}', inpanel = False) #creation du knob button reload bk = nuke.PyScript_Knob("Reload_Copy") #set la command du bouton, ici la fonction reload() bk.setCommand("reaload()") #ajoute le kno au node read self.read.addKnob(bk) else: print "reload" nuke.selectedNode().knob("reload").execute() def readOnLocal(): b = readOnLocalClass(init = True) #lance le thread, la fonction run() b.start() def reaload(): b = readOnLocalClass(init = False) #lance le thread, la fonction run() b.start()
Et en bonus :p le script pour changer de root:
import os import nuke #remplace la lettre de disque, demande une nouvelle lettre en str et une list de node read def changeRoot(): p = nuke.getInput("Change Root Letter") allReads = nuke.allNodes("Read") for r in allReads: n = r.knob("file").value() rr = n.split(":/") nn = rr[0].replace(rr[0], p ) nnP = os.path.join(nn + ":", rr[1]) r.knob("file").setValue(nnP)
Inscription à :
Articles (Atom)