Never mind I figured these both out. For anyone else, here's some options
for this:
1)
m = nuke.menu('Axis').findItem('Snap')
m.addCommand('axisSnap', 'axisSnap.popUp()')
2)
curViewer = nuke.activeViewer()
if curViewer:
viewerNode = curViewer.node()
print viewerNode['frame_range'].getValue()
On Fri, Dec 14, 2012 at 9:43 AM, Dan Rosen <[email protected]> wrote:
> Nathan ... the threading methodology that you suggested for me on a lut
> creation tool is working for a different tool that I wrote. It's for
> snapping an Axis to some selected geo. This really helps for OBJ sequences.
> I step through the viewer and snap on each frame. Very handy. I have a
> couple of questions, both are super simple, but I haven't been able to
> figure them out:
>
> 1) The docs refer to adding a menu to the Axis node itself (I want to add
> to the 'snap_menu'), but I can't figure out how to do that. Any ideas?
> 2) Is there an easy way to get the frame range in the active viewer? I can
> use frameControl to go to start and end and get it and then set the viewer
> back to the original frame it was on, but that seems like a lot of work to
> get the frame range.
>
> thx,
> Dan
>
> On Fri, Nov 2, 2012 at 12:00 PM, Nathan Rusch <[email protected]>wrote:
>
>> Hmm, I see. Well, one other question, I guess, is if you’re getting
>> CDLs, is there a reason you can’t use OCIOCDLTransform nodes to apply them?
>> Or are you using LUTs to make the transforms available outside of Nuke as
>> well?
>>
>> I would try spawning your loop function on a separate thread, and maybe
>> sticking in a short sleep between node connections for good measure. I
>> haven’t tested this, but it should allow the main processing thread to be
>> released to evaluate the nodes in question. Might look something like:
>>
>> import threading
>> import time
>>
>> def writeIt(node):
>> node.setSelected(True)
>> nukescripts.connect_selected_to_viewer(0)
>> node.setSelected(False)
>>
>> def setLutNodes(nodes):
>> for n in nodes:
>> # If it meets the criteria...
>> nuke.executeInMainThread(writeIt, args=(n,))
>> time.sleep(1)
>>
>> # Main entry point (could be in a function...)
>> threading.Thread(target=setLutNodes, args=(nuke.allNodes(),)).start()
>>
>>
>> Hope this helps.
>>
>> -Nathan
>>
>>
>> *From:* Dan Rosen <[email protected]>
>> *Sent:* Friday, November 02, 2012 11:40 AM
>> *To:* Nuke Python discussion <[email protected]>
>> *Subject:* Re: [Nuke-python] control viewer
>>
>> Hi Nathan,
>>
>> Thanks for the reply. We unfortunately don't write the plugin in-house.
>> We are moving away from using it by implementing OCIO, but it currently
>> still provides us the ability to format different luts for other software
>> packages.
>>
>> It's pretty rare, but only time that it comes up for us to process
>> hundreds of luts (via this Nuke/py process) is when working on a show with
>> CDLs per shot from the DP. We've been providing CDLs as 3DL lut files back
>> to production, so it's handy to script the process to format and
>> output/name them all this way.
>>
>> thx
>> Dan
>>
>> On Thu, Nov 1, 2012 at 10:48 PM, Nathan Rusch
>> <[email protected]>wrote:
>>
>>> GUI updates and redrawing cannot occur while a block of Python code
>>> is executing. I don’t know the details of Nuke’s core threading design, but
>>> it seems that things like nuke.message may cause the lock on the thread
>>> responsible for hashing, validation, etc. (which may be separate from the
>>> GUI thread) to be released temporarily, allowing the tree to be evaluated.
>>>
>>> A couple initial questions would be:
>>>
>>> 1) Where in the plugin code is the LUT written? (_validate, engine, etc.)
>>> 2) Is there a reason you can’t/don’t want to make it an executable op?
>>>
>>> -Nathan
>>>
>>>
>>> *From:* Dan Rosen <[email protected]>
>>> *Sent:* Thursday, November 01, 2012 3:23 PM
>>> *To:* Foundry <[email protected]>
>>> *Subject:* [Nuke-python] control viewer
>>>
>>> Hi,
>>>
>>> I have a plugin that writes luts, but only by viewing through the node
>>> itself. There is no execute button a la GenerateLUT or Write. I use python
>>> to troll my Nuke flow-graph when setting up multiple lut outputs.
>>>
>>> The problem is when I have many luts only the last one is writing out in
>>> a for loop. I know that each one should be working since I have a print
>>> statement to show that it should be. Also, if I throw up a
>>> nuke.message("writing lut") then it works and all the luts are written. I
>>> just don't want to have to hit the 'OK' button. That pause is allowing
>>> enough time to get the node to successfully write. Having said that a
>>> regular python pause or a Nuke python progress bar doesn't work in the same
>>> way. My question is if the nuke.message is actually allowing the viewer to
>>> update. Any suggestions of other ways to force viewer update or similar?
>>> I've tried having the viewer forward a frame and back, but that isn't doing
>>> the same thing as the nuke.message. Maybe there's a way to automatically
>>> close the nuke.message pop-up?
>>>
>>> Here's a snippet of the code:
>>>
>>> def writeIt(n):
>>> n.setSelected( True )
>>> nukescripts.connect_selected_to_viewer(0)
>>> n.setSelected( False )
>>>
>>> def setLutNodes():
>>>
>>> for n in nuke.allNodes():
>>>
>>> if n.name() == "SHOT_LUT_CDL_3DL":
>>> n['lookFile'].setValue(file_output_lut_cdl_3dl)
>>> print "writing " + file_output_lut_cdl_3dl
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_3DL":
>>> n['lookFile'].setValue(file_output_lut_3dl)
>>> print "writing " + file_output_lut_3dl
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_3DL_W_OFFSET":
>>> n['lookFile'].setValue(file_output_lut_3dl_w_offset)
>>> print "writing " + file_output_lut_3dl_w_offset
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_CUBE":
>>> n['lookFile'].setValue(file_output_lut_cube)
>>> print "writing " + file_output_lut_cube
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_TXT":
>>> n['lookFile'].setValue(file_output_lut_txt)
>>> print "writing " + file_output_lut_txt
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_LUT":
>>> n['lookFile'].setValue(file_output_lut_lut)
>>> print "writing " + file_output_lut_lut
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_ACV":
>>> n['lookFile'].setValue(file_output_lut_acv)
>>> print "writing " + file_output_lut_acv
>>> writeIt(n)
>>> elif n.name() == "SHOT_LUT_ICC":
>>> n['lookFile'].setValue(file_output_lut_icc)
>>> print "writing " + file_output_lut_icc
>>> writeIt(n)
>>> ------------------------------
>>> _______________________________________________
>>> 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
>>
>>
>> _______________________________________________
>> 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