Hmm, I still can’t get it to crash...

Is there any way you can try this with the latest version of Nuke to see if 
it’s possibly related to a past bug?

As far as your code goes, it works fine. The only changes I would be sure to 
make (without getting too picky) are some order-of-operations things and some 
re-use of variables.


from __future__ import with_statement
import re
import nuke

blurPrefix = 'sg_blur'
mergePrefix = 'sg_merge'
nameRE = re.compile('^(%s|%s)' % (blurPrefix, mergePrefix))

def test():
    tn = nuke.thisNode()

    for name, knob in tn.knobs().iteritems():
        if nameRE.search(name):
            tn.removeKnob(knob)

    with tn:
        for a in nuke.allNodes('Blur') + nuke.allNodes('Merge2'):
            if nameRE.search(a.name()):
                nuke.delete(a)

        for i in range(1, tn['number'].value() + 1):
            blurName = '%s%d' % (blurPrefix, i + 100)
            nuke.createNode('Blur', 'name %s' % blurName, inpanel=False)

            k = nuke.Link_Knob('%s%d' % (blurPrefix, i), 'blur %d' % i)
            k.makeLink(blurName, 'size')
            tn.addKnob(k)

            mergeName = '%s%d' % (mergePrefix, i + 100)
            nuke.createNode("Merge2", 'name %s' % mergeName, inpanel=False)

            k = nuke.Link_Knob('%s%d' % (mergePrefix, i), 'merge %d' % i)
            k.makeLink(mergeName, 'mix')
            tn.addKnob(k)


-Nathan



From: Simon Björk 
Sent: Wednesday, May 02, 2012 1:08 PM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] Re: Adding/Removing knobs and crashing

Hi Nathan, 

attached is a Nuke script that contains a group node with a python button and a 
sticky-note that contains the Python script. Just save it in your Nuke path.

This seems to work a little bit better than my full script, but it still 
crashes a lot. It crashes for example if I set it above 10 and also often when 
I set it back to 1. In my full script I have a couple of more loops that does 
other things (set inputs, moves node around to x,y pos). I'm pretty new to 
Python so I would very much appreciate a nod in the right direction on this 
(the only reason I got this far is because of this list). Thanks.

#! C:/Program Files/Nuke6.3v2/Nuke6.3.exe -nx
version 6.3 v2
define_window_layout_xml {<?xml version="1.0" encoding="UTF-8"?>
<layout version="1.0">
    <window x="0" y="22" w="1680" h="1024" screen="0">
        <splitter orientation="1">
            <split size="1052"/>
            <splitter orientation="1">
                <split size="40"/>
                <dock id="" hideTitles="1" activePageId="Toolbar.1">
                    <page id="Toolbar.1"/>
                </dock>
                <split size="1008"/>
                <splitter orientation="2">
                    <split size="480"/>
                    <dock id="" activePageId="Viewer.1">
                        <page id="Viewer.1"/>
                    </dock>
                    <split size="479"/>
                    <dock id="" activePageId="DAG.1">
                        <page id="DAG.1"/>
                        <page id="Curve Editor.1"/>
                        <page id="DopeSheet.1"/>
                    </dock>
                </splitter>
            </splitter>
            <split size="608"/>
            <dock id="" activePageId="Properties.1">
                <page id="Properties.1"/>
                <page id="Script Editor.1"/>
            </dock>
        </splitter>
    </window>
</layout>
}
Root {
inputs 0
name C:/Users/Simon/Desktop/to_nuke_list.nk
fps 25
format "1920 1080 0 0 1920 1080 1 HD"
proxy_type scale
proxy_format "1024 778 0 0 1024 778 1 1K_Super_35(full-ap)"
}
StickyNote {
inputs 0
name StickyNote1
label "from __future__ import with_statement\nimport os\nimport nuke\nimport 
nukescripts\nimport re\n\ndef test():\n\n    n = nuke.thisNode()\n    blur_name 
= \"sg_blur\"\n    merge_name = \"sg_merge\"\n    blur_reg = 
re.compile(blur_name)\n    merge_reg = re.compile(merge_name)\n\n    # Delete 
knobs\n    for b in n.knobs():\n        if blur_reg.match(b) or 
merge_reg.match(b):\n            n\[b].setValue(0)\n            nuke.message( 
str(n\[b].value()) )\n            n.removeKnob(n.knobs()\[b])\n\n    # Access 
nodes inside group:\n    with n:\n\n        # Delete old nodes.\n        for a 
in nuke.allNodes():\n            old_name = a\[\"name\"].value()\n            
if blur_reg.match(old_name) or merge_reg.match(old_name):\n                if 
a.Class() == \"Merge2\" or a.Class() == \"Blur\":\n                    
nuke.delete(a)\n\n        # Set up values.\n        num = 
n\[\"number\"].value()\n\n        for i in range(num):\n\n            # Create 
blur\n            b = nuke.createNode(\"Blur\")\n            
b\[\"name\"].setValue(blur_name + str(i + 100)) \n\n            # Create blur 
knobs\n            k = nuke.Link_Knob( blur_name + str(i + 1) )\n            
k.makeLink(str(b\[\"name\"].value()), \"size\" )\n            k.setLabel( 
\"blur\" + str(i + 1) )\n            n.addKnob(k)\n\n            #Create merge 
node.\n            m = nuke.createNode(\"Merge2\")\n            
m\[\"name\"].setValue(merge_name + str(i + 100))\n\n            # Create merge 
knobs\n            e = nuke.Link_Knob( merge_name + str(i + 1) )\n            
e.makeLink(str(m\[\"name\"].value()), \"mix\" )\n            e.setLabel( 
\"merge\" + str(i + 1) )\n            n.addKnob(e)\n            "
xpos 216
ypos -253
}
Group {
inputs 0
name Group1
xpos -32
ypos 7
addUserKnob {20 User}
addUserKnob {3 number l "number of loops"}
number 3
addUserKnob {22 run_script l "run script" T "import 
to_nuke_list\n\nto_nuke_list.test()" +STARTLINE}
}
Input {
  inputs 0
  name Input1
  xpos 132
  ypos -89
}
NoOp {
  name NoOp1
  xpos 132
  ypos -49
}
Output {
  name Output1
  xpos 132
  ypos 51
}
Blur {
  inputs 0
  name sg_blur100
}
push 0
Merge2 {
  inputs 2
  name sg_merge100
}
Blur {
  name sg_blur101
}
push 0
Merge2 {
  inputs 2
  name sg_merge101
}
Blur {
  name sg_blur102
}
push 0
Merge2 {
  inputs 2
  name sg_merge102
  selected true
}
end_group
Viewer {
frame 1
viewerProcess rec709
input_process false
name Viewer1
xpos -107
ypos 430
}
StickyNote {
inputs 0
name StickyNote2
label "Save this script in your Nuke-path. Name: to_nuke_list.py"
note_font_size 21
xpos 128
ypos -327
}
_______________________________________________
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