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