Ok,
Here's a simple, yet pointless example:


1.) Open a script editor, paste this code in, and execute it... so the
function is defined


def rebuildNode(node):

    if(len(nuke.allNodes(group=node)) < 3):

        nuke.createNode('Blur', inpanel=False)


     return(1)





2.)  Paste this Group into Nuke. It starts as an empty group.  The
expression defined on the inputChange knob will call the function we
defined above.  Anytime there are less than 3 nodes inside the Group, a
Blur node will be created.  (To see it in action, Interact with the Group,
change the input, Expand the Group, delete the Blur, and then see it
recreated, etc )



set cut_paste_input [stack 0]

version 6.3 v1

push $cut_paste_input

Group {

 name Group1

 selected true

 xpos 872

 ypos -149

 addUserKnob {20 User}

 addUserKnob {7 inputChange}

 inputChange {{"\[python -execlocal ret\\ =\\
rebuildNode(nuke.thisNode())]"}}

}

 Input {

  inputs 0

  name Input1

  xpos 878

  ypos -161

 }

 Output {

  name Output1

  xpos 878

  ypos -21

 }

end_group




3.) Redefine the rebuildNode function to be this. (NOTE: change the path in
the nodePaste command to a .nk file that exists on your computer.  I simply
ran "Export Nodes as Script" on a Grade node to generate C:/test.nk):


def rebuildNode(node):

    if(len(nuke.allNodes(group=node)) < 3):

        nuke.nodePaste(r'C:/test.nk')


    return(1)



4.) Delete the Group from step 2 and then repaste it into Nuke again.


As far as I can tell, nuke.nodePaste() doesn't work in this context.  I get
error messages like this:
RuntimeError: The Grade command is not allowed in a string or expression.

Is the nodePaste being interpreted as a code string for the expression to
execute?



-Paul


On Thu, Dec 1, 2011 at 10:45 AM, Paul Hudson <[email protected]> wrote:

> Hi,
>
> I am building a Group node that rebuilds it's internals based on what its
> input is.
>
> I have written a function that works fine when launched via the script
> editor, like so:
> rebuildNode(nuke.selectedNodes()[0])
>
> I am trying to trigger it when the input changes, so I tried putting my
> function in a Python Expression on a knob (in "series of statements" mode):
> rtn = rebuildNode(nuke.thisNode())
>
> This does not work and it appears to be a call to nuke.nodePaste() that is
> causing the problem.  When I put a nuke.nodePaste() call directly in the
> expression I get this error:
> "RuntimeError: The Group command is not allowed in a string or expression."
>
> So the question is, Does nuke.nodePaste() not work inside a Python
> Expression  or is it a context issue?  In my original function I used
> myGroup.begin() before the nodePaste.  I have tried it with and without the
> myGroup.begin() call in the Expression... doesn't work either way.
>
>
> Thanks for your help,
> Paul
>
>
>
>
>
>
>
>
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to