has anyone tried the valueAt() method to get a matrix at a given frame?

It seems to return a different array than using value() and making sure the 
current frame in the root is the one you're after.

in my scenario (camera with "frame" expression in translate.x):

for i in range(0,16):
    m[i] = node['world_matrix'].value(  i%4, i/4)
print '\n%s'%m

returns this on frame 7:
{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 0, 0, 1}


while this:

for i in range(0,16):
    m[i] = node['world_matrix'].valueAt( 7,  i%4, i/4)
print '\n%s'%m


returns:
{1, 0, 0, 7, 1, 0, 0, 7, 1, 0, 0, 7, 1, 0, 0, 7}



I guess I will have to manually step through frames for this?!

Cheers,
frank



On Mar 9, 2011, at 2:53 PM, Frank Rueter wrote:

> thanks for the confirmation. I'm looping through the fields manually for now 
> which seems to work
> 
> On Mar 9, 2011, at 2:16 PM, Ivan Busquets wrote:
> 
>> Yeah, I've found this to be flaky too, or at least not consistent with other 
>> knobs.
>> 
>> As pixelcowboy was saying, the value() method of that matrix knob expects 2 
>> indices (1 for the row, one for the column).
>> But you're right, Frank, I think this should return a list with all values 
>> when no index is given, just like what you get from valueAt().
>> 
>> Also, toScript() doesn't seem to work correctly on them either (returns all 
>> 0s)
>> 
>> As for setting the values, I've always resorted to iterating through them. :(
>> 
>> Bug report?
>> 
>> 
>> 
>> On Tue, Mar 8, 2011 at 4:59 PM, [email protected] 
>> <[email protected]> wrote:
>> cam['world_matrix'].array()
>> Works fine on the color matrix node, but doesn't seem to be doing the
>> right thing on the camera matrix knobs...
>> 
>> 
>> On Tue, Mar 8, 2011 at 4:54 PM, [email protected]
>> <[email protected]> wrote:
>> > I think you need to give it an index:
>> > print cam['world_matrix'].value(0,0)
>> >
>> > On Tue, Mar 8, 2011 at 4:45 PM, Frank Rueter <[email protected]> wrote:
>> >> matrix knobs seem o behave in mysterious ways:
>> >>
>> >> this will give me a single float value:
>> >> cam = nuke.toNode('Camera4')
>> >> print cam['world_matrix'].value()
>> >>
>> >>
>> >> while this will give me all 16 values:
>> >> print cam['world_matrix'].valueAt(300)
>> >>
>> >> Also, this only assigns the first four values, not the whole thing:
>> >>
>> >> cam = nuke.toNode('Camera4')
>> >> newCam = nuke.toNode('Camera1')
>> >> newCam['useMatrix'].setValue( True )
>> >> newCam['matrix'].setValue( cam['world_matrix'].valueAt(300) )
>> >>
>> >>
>> >> Do I really have to manually iterate over the values to assign them or 
>> >> has someone found a nicer way of doing this?
>> >>
>> >> Cheers,
>> >> frank_______________________________________________
>> >> 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
> 
> _______________________________________________
> 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