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 <danrosenro...@yahoo.com> 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 <nathan_ru...@hotmail.com>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 <danrosenro...@yahoo.com>
>> *Sent:* Friday, November 02, 2012 11:40 AM
>> *To:* Nuke Python discussion <nuke-python@support.thefoundry.co.uk>
>> *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 
>> <nathan_ru...@hotmail.com>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 <danrosenro...@yahoo.com>
>>> *Sent:* Thursday, November 01, 2012 3:23 PM
>>> *To:* Foundry <nuke-python@support.thefoundry.co.uk>
>>> *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
>>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>>
>>> _______________________________________________
>>> Nuke-python mailing list
>>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>>
>>>
>>
>> ------------------------------
>> _______________________________________________
>> Nuke-python mailing list
>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>
>>
>> _______________________________________________
>> Nuke-python mailing list
>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>
>>
>
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to