| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- ## read_from_write.py
 - ##
 - ## written by stefan ihringer (stefan@bildfehler.de)
 - ## parts by Diogo Girondi (diogogirondi@gmail.com) http://www.creativecrash.com/nuke/downloads/scripts-plugins/c/read-from-write
 - ##
 - ## version 1.0 (2010-06-07)
 - ## version 1.1 Martin Saechsinger: fixed colorspace when using OCIO.
 - 
 - import nuke
 - import os, re
 - 
 - 
 - def _get_directory(rawpath):
 -     """
 -     Make a path cross-platform by replacing network shares 
 -     """
 -     path = rawpath
 -     if (nuke.env["WIN32"]):
 -         path = path.replace("/Volumes/O/", "//calculon/o/")
 -         path = path.replace("/","\\")
 -     else:
 -         path = path.replace("//calculon/o/", "/Volumes/O/")
 - 
 -     return os.path.dirname(path)
 - 
 - 
 - def _hashreplace(match):
 -     """
 -     Internally called by regular expression.
 -     Replaces #### by %04d (or any other number of hashes)
 -     """
 -     return "%%0%dd" % len(match.group())
 - 
 - 
 - def ReadFromWrite():
 -     """
 -     Creates a read node from a selected write node.
 -     """
 - 
 -     try:
 -         the_node = nuke.selectedNode()
 -         if the_node.Class() != "Write":
 -             nuke.message("Please select a write node.")
 -             return
 -     except:
 -         nuke.message("Please select a write node.")
 -         return
 - 
 -     # get values from Write knobs
 -     filestr = the_node.knob("file").value()
 -     proxystr = the_node.knob('proxy').value()
 -     colorstr = int(the_node.knob('colorspace').getValue())
 -     #colorstr = the_node.knob('colorspace').value()
 -     premult = the_node.knob('premultiplied').value()
 -     rawdata = the_node.knob('raw').value()
 -     xpos = the_node.knob('xpos').value()
 -     ypos = the_node.knob('ypos').value()
 - 
 -     # #-Zeichen finden (falls vorhanden) und durch ein Konstrukt wie %04d ersetzen.
 -     filestr = re.sub("#+", _hashreplace, filestr)
 - 
 -     # Dateiliste holen um automatisch ersten und letzten Frame zu erkennen
 -     # (von http://www.vfxtalk.com/forum/showpost.php?p=79846&postcount=15)
 -     expaddpatt = re.compile(r"(?<=\.)\d*(?=\.)")
 -     paddpatt   = re.compile(r'%+\d+d')
 -     try:
 -         padding = paddpatt.search(filestr).group()
 -         seqlist = sorted(glob.glob(paddpatt.sub("*",filestr)))
 -         start = int(padding % (int(expaddpatt.search(seqlist[0]).group())))
 -         end = int(padding % (int(expaddpatt.search(seqlist[-1]).group())))
 -     except:
 -         # wenn Sequenzlaenge nicht ermittelbar (z.B. kein Dateiname in der write-node)
 -         # wird als default die Shotlaenge verwendet:
 -         start = int(nuke.root().knob('first_frame').value())
 -         end = int(nuke.root().knob('last_frame').value())
 - 
 -     new_read = nuke.nodes.Read(file = filestr, proxy = proxystr, first = start, last = end, colorspace = colorstr, premultiplied = premult, raw = rawdata)
 -     new_read.knob('xpos').setValue(xpos + 80)
 -     new_read.knob('ypos').setValue(ypos + 80)
 -     nuke.inputs(new_read, 0)
 
 
  |