Hi Ivan,

thanks for that, works perfectly. I only want to use the matrix node as a
container for the values, much like a tracker, so the user can copy values
to other nodes. Might not used very often, but I would like to provide the
possibility.

Pushing my luck here with another question on the same topic, but anyway :):

How do I add values to a SplineWarp matrix knob? I guess it would be
something like how you add values to a RotoPain node. I've looked at the
official document (
http://docs.thefoundry.co.uk/nuke/63/pythondevguide/rotopaint.html) and
searched this list, but I can't seem to figure it out . What I would like
to do is to add a new layer to a spline warp, name it, and add a value to
it's "transform_matrix" knob.

This is the last question, I promise :).

Thanks!

Best regards,
Simon



2012/6/29 Ivan Busquets <ivanbusqu...@gmail.com>

> Hi Simon,
>
> You can create a Matrix node with whatever dimension you need by passing
> an initial value to the "matrix" knob:
>
> nuke.createNode("Matrix", "matrix {{1 0 0 0} { 0 1 0 0} { 0 0 1 0} {0 0 0
> 1}}")
>
>
> However, unless I'm misreading the purpose of your tool, I don't see how
> you would correlate the values of a Cornerpin to those in a Matrix node.
>
> The Matrix node does not apply a transformation. Its matrix knob is used
> to define a convolution, not a transformation.
>
>
> If you are dealing with transforms and just want to populate a
> transformation matrix, I think Cornerpin (filling in "extra_matrix") is
> your best bet, as Pete pointed out.
>
>
> Hope that helps,
>
>
> Ivan
>
> On Fri, Jun 29, 2012 at 12:17 AM, Simon Björk <bjork.si...@gmail.com>wrote:
>
>> Hi Pete,
>>
>> I'm building a tool where I can output several types of nodes, Cornerpin
>> beeing one, Matrix another. I could create just a cornerpin node and let
>> the user copy valus from that, it's just that it would be a lot neater to
>> create a matrix node.
>>
>> Best regards,
>> Simon
>>
>>
>> 2012/6/28 Pete O'Connell <pedrooconn...@gmail.com>
>>
>>> Hi Simon. Why not just create any node that has an extra_matrix knob,
>>> like Cornerpin, that's 4x4.
>>>
>>> Pete
>>>
>>>
>>> On Thu, Jun 28, 2012 at 7:20 PM, Simon Björk <bjork.si...@gmail.com>wrote:
>>>
>>>> Thanks for that script Pete, it helped me understand how to approach
>>>> this :).
>>>>
>>>> On a side note, I'm also trying to create a 4x4 matrix node, but I'm
>>>> not sure how to do it as it defaults to 3x3 if you use
>>>> nuke.createNode("Matrix"). I see that Nuke calls
>>>> nukescripts.create_matrix() when creating a matrix Node, but I can't seem
>>>> to find that script either. Any suggestions?
>>>>
>>>> Thanks again.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> 2012/6/27 Pete O'Connell <pedrooconn...@gmail.com>
>>>>
>>>>> Hi Simon. I think the code below should apply the returned variable of
>>>>> the getTheCornerpinAsMatrix() function to a new cornerpin node's matrix.
>>>>> See how getTheCornerpinAsMatrix() is being used in a loop below?
>>>>>
>>>>> Is that kind of what you are after?
>>>>> Pete
>>>>>
>>>>> #####################################################
>>>>> # by Pete O'Connell
>>>>> import nuke
>>>>> def convertCornerpinToMatrix():
>>>>>     theFirstFrame = int(nuke.root()['first_frame'].value())
>>>>>     theLastFrame = int(nuke.root()['last_frame'].value())
>>>>>
>>>>>     theAnimatedMatrixList = []
>>>>>     nuke.frame(theFirstFrame)
>>>>>     for i in range(theFirstFrame,theLastFrame+1):
>>>>>         theCurveToolNode = nuke.nodes.CurveTool()
>>>>>         theCurveToolNode['operation'].setValue('Auto Crop')
>>>>>         theCurveToolNode['name'].setValue("curveToolNode")
>>>>>
>>>>>         nuke.execute("curveToolNode",i,i)
>>>>>         # note: the next line refers to the getTheCornerpinAsMatrix()
>>>>> function
>>>>>         theAnimatedMatrixList.append(getTheCornerpinAsMatrix())
>>>>>         nuke.delete(theCurveToolNode)
>>>>>
>>>>>     theNewCornerpinNode = nuke.createNode("CornerPin2D")
>>>>>
>>>>>     theNewCornerpinNode['transform_matrix'].setAnimated()
>>>>>
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][0],aFrame,0)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][1],aFrame,1)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][2],aFrame,2)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][3],aFrame,3)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][4],aFrame,4)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][5],aFrame,5)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][6],aFrame,6)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][7],aFrame,7)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][8],aFrame,8)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][9],aFrame,9)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][10],aFrame,10)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][11],aFrame,11)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][12],aFrame,12)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][13],aFrame,13)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][14],aFrame,14)
>>>>>     for aFrame in range(theFirstFrame,theLastFrame+1):
>>>>>
>>>>> theNewCornerpinNode['transform_matrix'].setValueAt(theAnimatedMatrixList[aFrame-theFirstFrame][15],aFrame,15)
>>>>> #######################################################
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Jun 27, 2012 at 2:55 AM, Magno Borgo <mag...@pop.com.br>wrote:
>>>>>
>>>>>> **
>>>>>> Does  your corner pin uses expressions? You may need to bake/generate
>>>>>> the animated values.
>>>>>>
>>>>>> Magno.
>>>>>>
>>>>>>
>>>>>> Hi Magno,
>>>>>>
>>>>>> thanks for your reply and sorry for not replying earlier.
>>>>>>
>>>>>> I did take a look at your script, but couldn't get it to work. I
>>>>>> copied to corner pin matrix values to a new corner pin, but they don't 
>>>>>> seem
>>>>>> to match. Any idea? Then again, I'm no python expert.
>>>>>>
>>>>>> The script Pete O'Connel posted to this list eralier works, but I
>>>>>> don't get any animated values out of it. Anyone know how to modyfi it?
>>>>>> Basically I want to run the script on a corner-pin node, and create a
>>>>>> Gridwarp with that transform matrix.
>>>>>>
>>>>>> Here's Pete's script again. Hope you don't mind me reposting it.
>>>>>>
>>>>>>
>>>>>> import nukedef getTheCornerpinAsMatrix():
>>>>>>     projectionMatrixTo = nuke.math.Matrix4()     projectionMatrixFrom
>>>>>> = nuke.math.Matrix4()         #dir(projectionMatrix)    theCornerpinNode 
>>>>>> =
>>>>>> nuke.selectedNode()
>>>>>>     imageWidth = float(theCornerpinNode.width())     imageHeight =
>>>>>> float(theCornerpinNode.height())             to1x =
>>>>>> theCornerpinNode['to1'].value()[0]     to1y =
>>>>>> theCornerpinNode['to1'].value()[1]    to2x =
>>>>>> theCornerpinNode['to2'].value()[0]     to2y =
>>>>>> theCornerpinNode['to2'].value()[1]    to3x =
>>>>>> theCornerpinNode['to3'].value()[0]     to3y =
>>>>>> theCornerpinNode['to3'].value()[1]    to4x =
>>>>>> theCornerpinNode['to4'].value()[0]     to4y =
>>>>>> theCornerpinNode['to4'].value()[1]         from1x =
>>>>>> theCornerpinNode['from1'].value()[0]    from1y =
>>>>>> theCornerpinNode['from1'].value()[1]     from2x =
>>>>>> theCornerpinNode['from2'].value()[0]    from2y =
>>>>>> theCornerpinNode['from2'].value()[1]     from3x =
>>>>>> theCornerpinNode['from3'].value()[0]    from3y =
>>>>>> theCornerpinNode['from3'].value()[1]     from4x =
>>>>>> theCornerpinNode['from4'].value()[0]    from4y =
>>>>>> theCornerpinNode['from4'].value()[1]
>>>>>> projectionMatrixTo.mapUnitSquareToQuad(to1x,to1y,to2x,to2y,to3x,to3y,to4x,to4y)
>>>>>>
>>>>>> projectionMatrixFrom.mapUnitSquareToQuad(from1x,from1y,from2x,from2y,from3x,from3y,from4x,from4y)
>>>>>>        theCornerpinAsMatrix =
>>>>>> projectionMatrixTo*projectionMatrixFrom.inverse()
>>>>>> theCornerpinAsMatrix.transpose()         return theCornerpinAsMatrix
>>>>>>
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Simon
>>>>>>
>>>>>> 2012/6/14 Magno Borgo <mag...@pop.com.br>
>>>>>>
>>>>>>> The attached script should get you started.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I found this,
>>>>>>> http://forums.thefoundry.co.uk/phpBB2/viewtopic.php?t=5810&view=previous&sid=5a7db5ea82b78d9cb79f400e14b18493
>>>>>>>  but
>>>>>>> unless I'm missing something it doen't seem to work for animated corner
>>>>>>> pins. Anyone know of a way?
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Simon
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> **************************
>>>>>>> Magno Borgo
>>>>>>>
>>>>>>> www.borgo.tv
>>>>>>> www.boundaryvfx.com
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> **************************
>>>>>> Magno Borgo
>>>>>>
>>>>>> www.borgo.tv
>>>>>> www.boundaryvfx.com
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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
>>
>>
>
> _______________________________________________
> 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