Hi Nathan

Thanks - I think that helps. It's getting a lot more complicated than just 
searching for 'x's in a %clipboard% and changing these values but then again I 
dont know how you write back to the clipboard so you can paste..yet ;)

Thanks for the help and thanks for bake expressions - been really useful!

Howard





________________________________
From: Nathan Rusch <[email protected]>
To: Howard Jones <[email protected]>; Nuke Python discussion 
<[email protected]>
Sent: Tue, 8 March, 2011 6:19:03
Subject: Re: [Nuke-python] knobs fields


As I touched on briefly in that Nukepedia article, <knob>.animations  is 
actually quite unreliable, as it just returns a list of all the animated  
indices in order, with no reference for which curve belongs to which  component.
 
You should be able to do what you’re after by combining the index-checking  
logic with a simple loop through the views in your comp. You can check out the  
Bake Expressions function on Nukepedia for an example of how to safely loop  
through Array knobs without stepping outside the array size, though you may 
want  
to add a knob class check. http://www.nukepedia.com/gizmos/bake-expressions/.
 
Both the .isAnimated() and .animation() knob methods accept an optional  view 
parameter, so you can pretty much loop blindly, check for animation data at  
every view and index, and offset it if it exists. Even if you haven’t split a  
knob by view, it still actually has discrete AnimationCurve objects per view  
(but until you split the knob, the first view’s AnimationCurve is just applied  
to all components).
 
Hope this helps some,
 
-Nathan

 
From: Howard Jones 
Sent: Monday, March 07, 2011 2:48 PM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] knobs fields
  Hi Nathan and all


Thanks  for that - it got me some way except in my case for stereo. Is there a 
way then  to see if a knob has been split off?

The  issue is working with your examples on nukepedia that if you pass a higher 
 
number into animation(n) than exists it segment faults Nuke (now Bug  17174  - 
nuke.animation causes segmentation fault )
 
So  what I am trying to do is to find the number of fields so that I never go 
over  the amount.

Below  is the code I am working on - which for a mono project will take all 
selected  keyframes in a selected node (haven't got round that bit yet) and 
pastes these  further down the line. 


Ideally  I would like to just get this from nuke.animations() but I cant see 
how 
to use  that information and no-one has come back so I'm stuck.
Anyway  clunky code but gets someway towards pasting at position, but doesn't 
paste into  another curve. If I can get the exact number of fields (ie split or 
not) then  this will work on multiviews otherwise it can only work on  mono.


#  gets segmentation fault unless you can figure out how many curves there are 
per  knob
def pasteKeyframes():
  sn=nuke.selectedNodes()
   s=len(sn)
  numViews=len(nuke.views())
  if s :
  
    '''get the array size of the knob so that animation(num)  doesn't cause a 
segmentation fault and check that
    the knob  supports an arraySize() - note a couple of things also slip  
through'''
    for n in sn :
       firstKeyFound=0
       offset=0

      
      for k in  n.knobs():
         try:
           ks=n[k].arraySize()
         except:
          ks=('wrong  type')
         num=0
         i=0
        if ks is not 'wrong  type':
          while  num<ks:
             ''' get the number of keys on the  curve'''
             try:
               na=n[k].animation(num)
               ns=na.size()

              
               '''step through the keys - check if they are selected the paste 
the values from  timebar  onwards'''
               while i <  ns:
                   keySelected=  (na.keys()[i].selected)
                   if  keySelected:
                     firstKeyFound+=1
                     print  k,ks,num
                     keyVals= (na.keys()[i].x,  na.keys()[i].y)
                     if  firstKeyFound==1:
                       offset=nuke.frame()-keyVals[0]
                     print ('keySelected: '+str(keySelected)+' keyvalues: 
'+str(keyVals)+'  firstKeyFound: '+str(firstKeyFound)+ ' offset:  '+str(offset))
                     na.setKey(keyVals[0]+offset,keyVals[1])
                   else:
                     print ('key not  selected')
                   i+=1
             except  AttributeError:
               pass
             num+=1
  else:
    nuke.message ('Please select a node  as well as keyframes')


________________________________
 From: Nathan Rusch    <[email protected]>
>To: Howard Jones    <[email protected]>; Nuke Python discussion    
><[email protected]>
>Sent: Monday, 7 March 2011,    18:43
>Subject: Re:    [Nuke-python] knobs fields
>
>
>I think you’re after <knob>.arraySize()
> 
>Keep in mind that this will only work with knobs inherited from    Array_Knob. 
>And as far as multiple views go, you just need to multiply the    arraySize() 
>value by the number of views.
> 
>-Nathan
>
> 
>From: Howard Jones 
>Sent: Monday, March 07, 2011 10:38 AM
>To: Nuke Python    discussion 
>Subject: [Nuke-python] knobs fields
>  Dear all
>
>
>
>Whats    the best way to determine the amount of fields a knob will have.
>ie    XY position knob has 2 fields but 4 in stereo (I think?)
>
>
>What    I'd like to do is query the knob and get an integer for its    fields.
>
>
>
>Any    help much appreciated
>
>
>Howard
>
> 
________________________________
 _______________________________________________
>Nuke-python mailing    list
>[email protected]
>http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
>
________________________________
 _______________________________________________
Nuke-python mailing  list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________
Nuke-python mailing list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to