nukescripts.create

Package nukescripts :: Module create |
[hide private]
[frames] | no frames]

# Source Code for Module nukescripts.create

      1  # Copyright (c) 2009 The Foundry Visionmongers Ltd.  All Rights Reserved.
      2
      3  import nuke
      4  import os
      5
      6 -def create_curve():
      7    root = nuke.toNode("root")
      8    curve_name = nuke.getInput("New curve name", "f")
      9    if curve_name is not None:
     10      if not len(curve_name) > 0:
     11        nuke.message("Curve name can't be blank.")
     12      else:
     13        curve_knob = root.knob(curve_name)
     14        if curve_knob is None:
     15          root.addKnob(nuke.Double_Knob(curve_name, curve_name))
     16          nuke.animation("root."+curve_name, "expression", ("",))
     17
     18
     19 -def create_read(defaulttype="Read"):
     20    '''Create a Read node for a file selected from the file browser.
     21    If a node is currently selected in the nodegraph and it has a 'file'
     22    (or failing that a 'proxy') knob, the value (if any) will be used as the default
     23    path for the file browser.'''
     24    # Get the selected node, and the path on it's 'file' knob if it
     25    # has one, or failing that, it's 'proxy' node, if it has that.
     26    sel_node = None
     27    default_dir = None
     28    try:
     29      sel_node = nuke.selectedNode()
     30    except:
     31      pass
     32    if ( sel_node is not None ) and ( sel_node != '' ):
     33      if 'file' in sel_node.knobs():
     34        default_dir = sel_node['file'].value()
     35      if (default_dir == None or default_dir == '') and 'proxy' in sel_node.knobs():
     36        default_dir = sel_node['proxy'].value()
     37
     38    # Revert default_dir to None if it's empty so that the file browser
     39    # will do it's default unset behaviour rather than open on an empty path.
     40    if default_dir == '': default_dir = None
     41
     42    # Raise the file browser and get path(s) for Read node(s).
     43    files = nuke.getClipname( "Read File(s)", default=default_dir, multiple=True )
     44    if files != None:
     45      for f in files:
     46        nodeType = defaulttype
     47        if isAudioFilename( f ):
     48          nodeType = "AudioRead"
     49        if isGeoFilename( f ):
     50          nodeType = "ReadGeo2"
     51        if isDeepFilename( f ):
     52          nodeType = "DeepRead"
     53        nuke.createNode( nodeType, "file {"+f+"}", inpanel = True)
     54
     55 -def isGeoFilename(filename):
     56    filenameLower = filename.lower()
     57    _, ext = os.path.splitext( filenameLower )
     58
     59    if ext in ['.fbx', '.obj']:
     60      return True
     61    else:
     62      return False
     63
     64 -def isDeepFilename(filename):
     65    filenameLower = filename.lower()
     66    _, ext = os.path.splitext( filenameLower )
     67
     68    if ext in ['.dtex', '.dshd', '.deepshad']:
     69      return True
     70    else:
     71      return False
     72
     73 -def isAudioFilename(filename):
     74    filenameLower = filename.lower()
     75    _, ext = os.path.splitext( filenameLower )
     76
     77    if ext in ['.wav', '.wave', '.aif', '.aiff']:
     78      return True
     79    else:
     80      return False
     81
     82 -def create_viewsplitjoin():
     83    views = nuke.views()
     84    if len(views) < 2:
     85      nuke.message("Only one view, nothing to split and rejoin.")
     86      return
     87
     88    sel = nuke.selectedNode()
     89    if sel == None:
     90      nuke.message("You need to select a node to split views from and rejoin.")
     91      return
     92
     93    nodes = []
     94    for i in views:
     95      n = nuke.createNode("OneView", inpanel=False)
     96      n.knob("label").setValue(i)
     97      nodes.append(n)
     98
     99    selx = sel.knob("xpos").getValue()
    100    sely = sel.knob("ypos").getValue()
    101
    102    join = nuke.createNode("JoinViews", inpanel=False)
    103
    104    for idx in range(0, len(nodes)):
    105      nodes[idx].knob("view").setValue(idx+1)
    106      nodes[idx].setInput(0, sel)
    107      nodes[idx].knob("xpos").setValue(selx + idx * 100 - (len(nodes)-1)*50)
    108      nodes[idx].knob("ypos").setValue(sely + 90)
    109      join.setInput(idx, nodes[idx])
    110
    111    join.knob("xpos").setValue(selx)
    112    join.knob("ypos").setValue(sely+180)
    113