Thanks Ben
A useful insight!
Howard
>________________________________
>From: Ben Dickson <ben.dick...@rsp.com.au>
>To: Nuke user discussion <nuke-users@support.thefoundry.co.uk>
>Sent: Tuesday, 18 October 2011, 2:59
>Subject: Re: [Nuke-users] Diogo's splitLayers.py script
>
>For "function runs on selected nodes" type utils, I've tried to follow
>the the idiom of:
>
>def make_blurs(nodes = None):
> if nodes is None:
> nodes = nuke.selectedNodes()
>
> created_nodes = []
> for n in nodes:
> new = nuke.nodes.Blur(inputs = [n]) # or something more useful
> # ...
> created_nodes.append(n)
>
> return created_nodes
>
>That allows functions to be chained together nicely, since you can do
>something like:
>
>starting = nuke.selectedNodes()
>blurs = make_blurs(starting)
>grades = make_grades(blurs)
>
>
>The reason to do "nodes=None" is because..
>
>def func(nodes = nuke.selectedNodes()):
> pass
>
>..won't do what you expect - the selectedNodes function gets called a
>function-definition time (so probably when Nuke starts up), it's the
>same as doing:
>
>default_value = nuke.selectedNodes()
>def func(nodes = default_value):
> pass
>
>There's a similar, but subtler issue with having mutable objects (like a
>list or dict) as default argument:
>
>http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument
>
>Basically having anything other than simple numbers, or True/False as a
>default argument value is usually.. "suspicious"
>
>On 18/10/11 05:44, Diogo Girondi wrote:
>> Ooops! Howard is right!
>>
>> You need to feed nuke.selectedNode() or a node object to it. I did that
>> to allow people to use that function from elsewhere while passing node
>> objects from loops and whatnots and not just based on the node selection.
>>
>> Sorry.
>>
>> Cheers,
>> Diogo
>>
>> On 17/10/2011, at 14:21, Howard Jones <mrhowardjo...@yahoo.com
>> <mailto:mrhowardjo...@yahoo.com>> wrote:
>>
>>> Hi
>>> Yes works well - I modified it so it had nuke.selectedNode() fed into
>>> it it.
>>> See below though no doubt the formatting may have screwed.
>>>
>>>
>>> Howard
>>>
>>>
>>> ### Splits each and every layer on their own pipes using
>>> ### shuffle nodes.
>>> ### ------------------------------------------
>>> ### splitLayers.py
>>> ### v1.0 - Last modified: 07/08/2009
>>> ### Written by Diogo Girondi
>>> ### diogogiro...@gmail.com <mailto:diogogiro...@gmail.com>
>>>
>>> import nuke
>>>
>>> def splitLayers( node=nuke.selectedNode() ):
>>>
>>> '''
>>> Splits each and every layer from the selected node into their own
>>> pipes
>>> '''
>>>
>>> ch = node.channels()
>>>
>>> layers = []
>>> valid_channels = ['red', 'green', 'blue', 'alpha', 'black', 'white']
>>>
>>> for each in ch:
>>> layer_name = each.split( '.' )[0]
>>> tmp = []
>>> for channel in ch:
>>> if channel.startswith( layer_name ) == True:
>>> tmp.append( channel )
>>> if len( tmp ) < 4:
>>> for i in range( 4 - len( tmp ) ):
>>> tmp.append( layer_name + ".white" )
>>> if tmp not in layers:
>>> layers.append( tmp )
>>>
>>> for each in layers:
>>> layer = each[0].split( '.' )[0]
>>> ch1 = each[0].split( '.' )[1]
>>> ch2 = each[1].split( '.' )[1]
>>> ch3 = each[2].split( '.' )[1]
>>> ch4 = each[3].split( '.' )[1]
>>>
>>> if ch1 not in valid_channels:
>>> ch1 = "red red"
>>> else:
>>> ch1 = '%s %s' % ( ch1, ch1 )
>>>
>>> if ch2 not in valid_channels:
>>> ch2 = "green green"
>>> else:
>>> ch2 = '%s %s' % ( ch2, ch2 )
>>>
>>> if ch3 not in valid_channels:
>>> ch3 = "blue blue"
>>> else:
>>> ch3 = '%s %s' % ( ch3, ch3 )
>>>
>>> if ch4 not in valid_channels:
>>> ch4 = "alpha alpha"
>>> else:
>>> ch4 = '%s %s' % ( ch4, ch4 )
>>>
>>> prefs = "in %s %s %s %s %s" % (layer, ch1, ch2, ch3, ch4)
>>> shuffle = nuke.createNode( 'Shuffle', prefs, inpanel=False )
>>> shuffle.knob( 'label' ).setValue( layer )
>>> shuffle.setInput( 0, node )
>>>
>>>
>>> ------------------------------------------------------------------------
>>> *From:* JKehler <jdkeh...@atmosphere-vfx.com
>>> <mailto:jdkeh...@atmosphere-vfx.com>>
>>> *To:* Nuke user discussion <nuke-users@support.thefoundry.co.uk
>>> <mailto:nuke-users@support.thefoundry.co.uk>>
>>> *Sent:* Monday, 17 October 2011, 17:26
>>> *Subject:* [Nuke-users] Diogo's splitLayers.py script
>>>
>>> Hey.
>>>
>>> Just wondering if anyone has had any luck using the splitLayers.py
>>> script.?(Diogo maybe)
>>> I tried running it on an .exr file but nothing happened.
>>>
>>> Thanks for the feedback.
>>>
>>> JK
>>> _______________________________________________
>>> Nuke-users mailing list
>>> Nuke-users@support.thefoundry.co.uk
>>> <mailto:Nuke-users@support.thefoundry.co.uk>,
>>> http://forums.thefoundry.co.uk/
>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
>>>
>>>
>>> _______________________________________________
>>> Nuke-users mailing list
>>> Nuke-users@support.thefoundry.co.uk
>>> <mailto:Nuke-users@support.thefoundry.co.uk>,
>>> http://forums.thefoundry.co.uk/
>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
>>
>>
>> _______________________________________________
>> Nuke-users mailing list
>> Nuke-users@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
>
>--
>ben dickson
>2D TD | ben.dick...@rsp.com.au
>rising sun pictures | www.rsp.com.au
>_______________________________________________
>Nuke-users mailing list
>Nuke-users@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users
>
>
>
_______________________________________________
Nuke-users mailing list
Nuke-users@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-users