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