Try this threading technique. there's a sleep in there to give time for
Nuke to evaluate.
import threading
import time
def doIT():
nukeNode = nuke.selectedNode()
firstFrame = int(nuke.Root()['first_frame'].getValue())
lastFrame = int(nuke.Root()['last_frame'].getValue())
totalFrames = lastFrame - firstFrame
print( firstFrame, lastFrame )
#toggle frame to initiate getting the correct value
current_frame = nuke.frame()
nuke.frame( current_frame -1 )
nuke.frame( current_frame )
width = nukeNode.width()
height = nukeNode.height()
maxWidth = 0
maxHeight = 0
task = nuke.ProgressTask('Getting width and height in range ' +
str(firstFrame) + ' ' + str(lastFrame))
progIncr = 100.0 / totalFrames
for frame in range(firstFrame, lastFrame+1):
if task.isCancelled():
nuke.executeInMainThread(nuke.message, args=('Aborted',))
return
nuke.frame( frame )
#Giving time for Nuke to evaluate
time.sleep(.1)
width = nukeNode.width()
height = nukeNode.height()
task.setProgress(int(frame * progIncr))
task.setMessage( str(frame) + ' ' + str(width) + ' ' + str(height)
)
if width > maxWidth:
maxWidth = width
if height > maxHeight:
maxHeight = height
print (frame, width, height)
print( maxWidth, maxHeight )
nuke.frame( current_frame )
threading.Thread(target=doIT).start()
On Thu, May 8, 2014 at 12:22 PM, Haarm-Pieter Duiker <
[email protected]> wrote:
> Hi,
>
> Simple question. Is there a way to query the width and height of a node at
> different times?
>
> Here's the context.
> I'm working with data sets that include image sequences that vary
> resolution from frame to frame. I'd like to find the max width and height
> for a given image in a given frame range. I wrote the following code to
> test things out.
>
> nukeNode = nuke.selectedNode()
>
>
> firstFrame = int(nuke.Root()['first_frame'].getValue())
>
> lastFrame = int(nuke.Root()['last_frame'].getValue())
>
> print( firstFrame, lastFrame )
>
>
> maxWidth = 0
>
> maxHeight = 0
>
> for frame in range(firstFrame, lastFrame):
>
> nuke.frame( frame )
>
> width = nukeNode.width()
>
> height = nukeNode.height()
>
> print( frame, width, height )
>
> if width > maxWidth:
>
> maxWidth = width
>
> if height > maxHeight:
>
> maxHeight = height
>
>
> print( maxWidth, maxHeight )
>
>
> The width and height values don't update to reflect the value for the
> current frame. This seems to parallel the functionality of the Knob
> getValue vs. getValueAt functions. Since width and height aren't knobs,
> those functions don't help though.
>
>
> Is there a way to query the width and height of a node at different times,
> like the Knob getValueAt method?
>
>
> HP
>
>
>
>
>
>
> _______________________________________________
> 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