What you should be able to do, and what I'm actually in the middle of doing, is essentially save a list of the elements in the RotoKnob, and then when the knobChanged fires, look to see if the list of elements has any new entries in it.
This is actually something I'm working on right now, so I'll let you know if it works or not :) From: [email protected] [mailto:[email protected]] On Behalf Of Ean Carr Sent: Tuesday, June 28, 2011 5:12 AM To: Nuke Python discussion Subject: Re: [Nuke-python] Roto shape "onCreation" callback entry? Hi David, Welcome to the list. If you don't mind using the older Bezier node, you can get what you want by setting the gl_color with an onUserCreate callback. Of course, you'll have to use 1 Bezier for each shape and put up with the other limitations in that node. In a menu.py: def randomBezierGLColorCB(minlum=.7, maxlum=1): tn = nuke.thisNode() r = random.random() * minlum + (maxlum - minlum) g = random.random() * minlum + (maxlum - minlum) b = random.random() * minlum + (maxlum - minlum) hexv = int('%02x%02x%02x%02x' % (r*255,g*255,b*255,255),16) tn['gl_color'].setValue(hexv) nuke.addOnUserCreate(randomBezierGLColorCB, nodeClass='Bezier') I suppose you could do the same thing with Roto/RotoPaint nodes, but it seems wasteful to use these heavier nodes for only 1 shape each just to get the different colors for each shape. -Ean On Tue, Jun 28, 2011 at 4:58 AM, Nathan Rusch <[email protected]> wrote: There's no callback for onShapeCreation (you can find a list of the existing callbacks in the User Guide). The only callback that would currently come anywhere close to handling the kind of behavior you're after would be knobChanged, and it won't be able get you what you want. You could get as far as grabbing the correct knob, but until you actually finish the shape, its attribute object doesn't exist (or isn't editable), so you run into a dependency problem. Also, you have no way of knowing which shape was just created if you have any kind of layer hierarchy in your RotoPaint node and aren't creating shapes at the top layer. Finally, the knobChanged callback only lets you access very general information about the knob (knob, node, group context, etc.), so you would have no way of knowing whether the number of shapes in the RotoPaint node had actually changed, or if someone was just editing another shape (without saving its size to a custom knob every time a new shape was added). Hope this answers your question. -Nathan -----Original Message----- From: Melazoma Sent: Monday, June 27, 2011 7:43 PM To: [email protected] Subject: [Nuke-python] Roto shape "onCreation" callback entry? Hi all, First time posting here. I'm trying to insert a piece of code that assigns a random color to a roto shape upon its creation, giving each shape a unique-ish color automatically. I'm still not that familiar with Nuke python, and I'm having a hard time finding a callback entry for something like "onShapeCreation" in the rotopaint module. I'm also at a loss with where to register this callback (if it exists). Should it be done in an init script (i.e. init.py or menu.py) or somewhere in Nuke's UI? Any pointers are greatly apprecited. This is the code I'm trying to run at each roto shape creation: ---------- knob = nuke.toNode('Roto1')['curves'] shape = knob.toElement('Bezier1') # perhaps grab the newly created shape object without referencing it by name? Is that possible? attrs = shape.getAttributes() randR = nuke.expression('random()') randG = nuke.expression('random()') randB = nuke.expression('random()') attrs.set('r', randR) attrs.set('g', randG) attrs.set('b', randB) # refresh viewer and color knob ---------- Thanks in advance. Best, -David _______________________________________________ Nuke-python mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python _______________________________________________ Nuke-python mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________ Nuke-python mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
