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 maxFiles = nuke.numvalue("preferences.maxPanels") 46 n = len(files) 47 for f in files: 48 sceneBrowserRequired = False 49 stripped = nuke.stripFrameRange(f) 50 nodeType = defaulttype 51 if isAudioFilename( stripped ): 52 nodeType = "AudioRead" 53 if isSceneBrowserFilename( stripped ): 54 sceneBrowserRequired = True 55 if isGeoFilename( stripped ): 56 nodeType = "ReadGeo2" 57 if isDeepFilename( stripped ): 58 nodeType = "DeepRead" 59 60 # only specify inpanel for the last n nodes. Old panels are kicked out using 61 # a deferred delete, so reading large numbers of files can internally build 62 # large numbers of active widgets before the deferred deletes occur. 63 useInPanel = True 64 if (maxFiles != 0 and n > maxFiles): 65 useInPanel = False 66 n = n-1 67 68 if sceneBrowserRequired: 69 nuke.createScenefileBrowser( f, "" ) 70 else: 71 try: 72 nuke.createNode( nodeType, "file {"+f+"}", inpanel = useInPanel) 73 except RuntimeError, err: 74 nuke.message(err.args[0])
75
76 -def isSceneBrowserFilename(filename):
77 filenameLower = filename.lower() 78 _, ext = os.path.splitext( filenameLower ) 79 usd_extensions = ['.usd', '.usda', '.usdz', '.usdc'] 80 abc_extensions = ['.abc'] 81 82 if ext in usd_extensions + abc_extensions: 83 return True 84 return False
85
86 -def isGeoFilename(filename):
87 filenameLower = filename.lower() 88 _, ext = os.path.splitext( filenameLower ) 89 90 if ext in ['.fbx', '.obj']: 91 return True 92 else: 93 return False
94
95 -def isDeepFilename(filename):
96 filenameLower = filename.lower() 97 _, ext = os.path.splitext( filenameLower ) 98 99 if ext in ['.dtex', '.dshd', '.deepshad']: 100 return True 101 else: 102 return False
103
104 -def isAudioFilename(filename):
105 filenameLower = filename.lower() 106 _, ext = os.path.splitext( filenameLower ) 107 108 if ext in ['.wav', '.wave', '.aif', '.aiff']: 109 return True 110 else: 111 return False
112
113 -def create_viewsplitjoin():
114 views = nuke.views() 115 if len(views) < 2: 116 nuke.message("Only one view, nothing to split and rejoin.") 117 return 118 119 sel = nuke.selectedNode() 120 if sel == None: 121 nuke.message("You need to select a node to split views from and rejoin.") 122 return 123 124 nodes = [] 125 for i in views: 126 n = nuke.createNode("OneView", inpanel=False) 127 n.knob("label").setValue(i) 128 nodes.append(n) 129 130 selx = sel.knob("xpos").getValue() 131 sely = sel.knob("ypos").getValue() 132 133 join = nuke.createNode("JoinViews", inpanel=False) 134 135 for idx in range(0, len(nodes)): 136 nodes[idx].knob("view").setValue(idx+1) 137 nodes[idx].setInput(0, sel) 138 nodes[idx].knob("xpos").setValue(selx + idx * 100 - (len(nodes)-1)*50) 139 nodes[idx].knob("ypos").setValue(sely + 90) 140 join.setInput(idx, nodes[idx]) 141 142 join.knob("xpos").setValue(selx) 143 join.knob("ypos").setValue(sely+180)
144