It's because the Node's hash isn't updated in all cases. To get around this, a method on a Node has been added for 6.3v1 called 'forceValidate()' (bug 17896). You can call nuke.sample() in 6.2 and before to force nodes' hashes to be updated.

    --Wouter

On 26/04/2011 11:54, Pete O'Connell wrote:
Hey Jonathan that's interesting that setXYpos works. If only autoplace
would too. I submitted a bug report to the Foundry. I am trying to use
executeInMainThread to wrap the whole thing, but that also doesn't seem
to wake up the snap function.
Hmmm

Pete

On Tue, Apr 26, 2011 at 3:30 AM, Jonathan King <[email protected]
<mailto:[email protected]>> wrote:

    Did you try setXYpos() ?  Annoying, because it seems like setXYpos()
    works, but setYpos() doesn't.  Not the most efficient, but could be
    a workaround.

    # this seems to work fine

    nuke.createNode('Blur')
    theSelectedNode = nuke.selectedNode()
    theYpos = theSelectedNode.ypos()
    theXpos = theSelectedNode.xpos()

    theYpos += 1000
    theNewNode = nuke.createNode("Blur")
    theNewNode.setXYpos(theXpos, theYpos)

    # this doesn't work

    nuke.createNode('Blur')
    theSelectedNode = nuke.selectedNode()
    theYpos = theSelectedNode.ypos()
    theYpos += 1000
    theNewNode = nuke.createNode("Blur")
    theNewNode.setYpos(theYpos)



    JCK

    ------------------------------------------------------------------------
    *From: *"Frank Rueter" <[email protected]
    <mailto:[email protected]>>
    *To: *"Nuke Python discussion" <[email protected]
    <mailto:[email protected]>>
    *Sent: *Sunday, April 24, 2011 4:31:47 PM
    *Subject: *Re: [Nuke-python] snap to grid on user create?


    both those examples work for me but it does seem like the onCreate
    callback can't change the knobs on creation. Same for knobChanged.

    I'd report it as a bug.

    On Apr 25, 2011, at 2:48 AM, John RA Benson wrote:

        Not helping, but this looks like a bug because this makes no
        sense at all : i happened to try your snippet with a Camera
        node selected (and then some other 3D nodes) and it did work as
        expected. When the blur is the selected node, it doesn't. Why
        would getting a ypos from a 3D node be any different than any
        other node?


        nuke.createNode('Camera2')
        theSelectedNode = nuke.selectedNode()
        theYpos = theSelectedNode.ypos()
        theYpos +=1000
        theNewNode = nuke.createNode("Blur")
        theNewNode['ypos'].setValue(theYpos)
        nuke.tprint( 'offset from camera ypos.value(): %s' %
        theNewNode['ypos'].value())
        nuke.tprint( 'offset from camera ypos(): %s' % theNewNode.ypos())
        # both values match and the blur accepted the setValue

        nuke.createNode('Blur')
        theSelectedNode = nuke.selectedNode()
        theYpos = theSelectedNode.ypos()
        theYpos +=1000
        theNewNode = nuke.createNode("Blur")
        theNewNode['ypos'].setValue(theYpos)
        nuke.tprint( 'offset from Blur ypos.value(): %s' %
        theNewNode['ypos'].value())
        nuke.tprint( 'offset from Blur ypos(): %s' % theNewNode.ypos())
        # values do not match and the new blur is located at the ypos()
        position, not the reported ['ypos'].value() position

        Cheers
        JRAB

        On Apr 24, 2011, at 1:57 PM, Pete O'Connell wrote:

            Hi Frank. Well I think the problem I am running in to here
            is that nuke.createNode doesn't seem to allow knobs to be
            changed immediately after it's creation. Like in the code
            below, the node doesn't hop down 1000 units as I would
            expect it to.
            #########################
            theSelectedNode = nuke.selectedNode()
            theYpos = theSelectedNode['ypos'].value()
            theNewNode = nuke.createNode("Blur")
            theNewNode['ypos'].setValue(theYpos+1000)
            ##############################

            Using nuke.nodes seems more promising because at least it
            isn't doing
            anything under the hood but at the same time it will be
            harder to
            implement.
            Thanks for the idea of using node.screenWidth
            Pete


            On Sat, Apr 23, 2011 at 12:35 PM, Frank Rueter
            <[email protected] <mailto:[email protected]>> wrote:

                I haven't looked at suggestions in this thread but my
                gut feeling would be to try and adjust the node
                positions through the onUserCreate callback
                using node.xpos, node.ypos, node.screenWidth and
                screenHeight and of course the grid settings from the prefs.


                On Apr 22, 2011, at 11:47 PM, Pete O'Connell wrote:

                    Hi Ben thanks for your script. I am not so much
                    concerned with overlapping as I am with having every
                    node be always on the grid. This seems to be
                    especially tricky when nodes are being created. Like
                    in this image:

                    Pete



                    On Thu, Apr 21, 2011 at 8:43 PM, Ben Dickson
                    <[email protected]
                    <mailto:[email protected]>> wrote:

                        Ahh.. You could possibly traverse down the tree,
                        offsetting nodes that
                        overlap..

                        Something like this:

                        from math import sqrt

                        mindist = 30
                        def avoid_overlapping(startnode, offset = mindist):
                            sx, sy = startnode.xpos(), startnode.ypos()
                            for n in startnode.dependent():
                                nx, ny = n.xpos(), n.ypos()
                                if sqrt((nx - sx)**2 + (ny - sy)**2) <
                        mindist:
                                    print "Node %s is too close, it's
                        being moved by %s"%(
                        n.name <http://n.name/>(), offset)
                                    n.setYpos(n.ypos() + offset)
                                    offset += mindist
                                avoid_overlapping(n, offset = offset)

                        avoid_overlapping(nuke.selectedNode())


                        If you arrange up a bunch of nodes so they
                        overlap, then select the
                        top-most node, the code should shove them
                        apart.. Doesn't handle some
                        things too well (nodes overlapping
                        horizontally), but seems to do a
                        decent job, and should probably incorporate the
                        node's screenheight for
                        tall nodes


                        Pete O'Connell wrote:
                         > Hi Ben. That code still doesn't solve the
                        problem of creating nodes when
                         > other nodes are selected, so for example if
                        in the dag I hit the letter
                         > "b" seven times, each subsequent blur node
                        lands further and further off
                         > the grid in y. I find myself having to
                        reposition my nodes a lot because
                         > of this.
                         > Know what I mean?
                         > pete
                         >
                         > On Thu, Apr 14, 2011 at 1:52 PM, Ben Dickson
                        <[email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>> wrote:
                         >
                         >     You can press \ and it'll auto-snap all
                        (or all selected) nodes to
                         >     the grid.
                         >
                         >     Programatically, is the snap to grid code
                        in the nukescripts code
                         >     somewhere? If not, I guess you could make
                        a snap-to-grid function quite
                         >     easily.. Something like:
                         >
                         >     node = nuke.selectedNode()
                         >     gridsize = 50 # could be grabbed from
                        preferences
                         >
                         >     orig_y = node.ypos()
                         >     new_y = round(float(orig_y) / gridsize) *
                        gridsize
                         >     node.setYpos(new_y)
                         >
                         >     Pete O'Connell wrote:
                         > > Well it seemd to be a bit more
                        complicated... If I use Nathan's script
                         > > and make a blur node with, it snaps to the
                        grid, but if I make a
                         >     second
                         > > blur node with the first blur still
                        selected, it isn't snapped to the
                         > > grid and that one I have to repo by hand.
                        The second blur seems to be
                         > > positioned a relative amount offset under
                        the first node. I am
                         >     trying to
                         > > reduce all the repositioning I have to do
                        in the dag throughout
                         >     the day.
                         > > Isn't there  a way to have every node
                        always be forced onto the
                         >     grid. I
                         > > am also trying to avoid that situation
                        where one node is directly
                         >     on top
                         > > of another after snapping (by making sure
                        that eveything is
                         >     initially on
                         > > the grid).
                         > >
                         > > Did I miss this page in the manual?
                         > > Pete
                         > >
                         > >
                         > > On Tue, Apr 12, 2011 at 5:30 PM, Pete O'Connell
                         > <[email protected]
                        <mailto:[email protected]>
                        <mailto:[email protected]
                        <mailto:[email protected]>>
                         > > <mailto:[email protected]
                        <mailto:[email protected]>
                        <mailto:[email protected]
                        <mailto:[email protected]>>>>
                         >     wrote:
                         > >
                         > >     That works!
                         > >
                         > >     Thanks Nathan
                         > >     Pete
                         > >
                         > >
                         > >     On Tue, Apr 12, 2011 at 5:22 PM, Nathan
                        Rusch
                         > > <[email protected]
                        <mailto:[email protected]>
                        <mailto:[email protected]
                        <mailto:[email protected]>>
                         > <mailto:[email protected]
                        <mailto:[email protected]>
                        <mailto:[email protected]
                        <mailto:[email protected]>>>>
                         >     wrote:
                         > >
                         > >         What about just using the
                        .autoplace() node method?
                         > >
                         > >         def apCreated():
                         > >             nuke.thisNode().autoplace()
                         > >
                         > >         nuke.addOnUserCreate(apCreated)
                         > >
                         > >         -Nathan
                         > >
                         > >
                         > >         *From:* Pete O'Connell
                        <mailto:[email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>>
                         > >         *Sent:* Monday, April 11, 2011 6:39 PM
                         > >         *To:*
                        [email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>
                         > >
                        <mailto:[email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>>
                         > >         *Subject:* [Nuke-python] snap to
                        grid on user create?
                         > >
                         > >         Hello Nuke python enthusiasts. I am
                        trying to have every
                         >     node I
                         > >         create be snapped to the grid as I
                        create them. It is proving
                         > >         trickier thatn I thought.
                         > >         I have been working on variations
                        on the code below which
                         > >         doesn't work I assume because the
                        node becomes selected
                         >     after it
                         > >         is created. Maybe the node needs to
                        be an argument to the
                         > >         autosnap function?
                         > >
                         > >
                        ################################################3
                         > >         import nuke
                         > >         def
                        autoplaceSnapSelectedNodesOnUserCreate():
                         > >             m = nuke.selectedNodes()
                         > >             for i in m:
                         > >                 nuke.autoplaceSnap(i)
                         > >         if __name__ == '__main__':
                         > >
                        autoplaceSnapSelectedNodesOnUserCreate()
                         > >
                         > >
                         > >
                        
nuke.addOnUserCreate(autoplaceSnapSelectedNodesOnUserCreate)
                         > >
                         >
                        
########################################################################
                         > >
                         > >         Any Suggestions would be greatly
                        appreciated
                         > >         Pete
                         > >
                         > >
                         >
                        
------------------------------------------------------------------------
                         > >
                        _______________________________________________
                         > >         Nuke-python mailing list
                         > > [email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>
                         > >
                        <mailto:[email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>>
                         > >
                         >
                        
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
                         > >
                         > >
                        _______________________________________________
                         > >         Nuke-python mailing list
                         > > [email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>
                         > >
                        <mailto:[email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>>
                         > >
                         >
                        
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
                         > >
                         > >
                         > >
                         > >
                         > >     --
                         > >     Pete
                         > >
                         > >
                         > >
                         > >
                         > > --
                         > > Pete
                         > >
                         > >
                         > >
                         >
                        
------------------------------------------------------------------------
                         > >
                         > > _______________________________________________
                         > > Nuke-python mailing list
                         > > [email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>
                         > >
                        
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
                         >
                         >     --
                         >     ben dickson
                         >     2D TD | [email protected]
                        <mailto:[email protected]>
                        <mailto:[email protected]
                        <mailto:[email protected]>>
                         >     rising sun pictures | www.rsp.com.au
                        <http://www.rsp.com.au/> <http://www.rsp.com.au
                        <http://www.rsp.com.au/>>
                         >
                        _______________________________________________
                         >     Nuke-python mailing list
                         > [email protected]
                        <mailto:[email protected]>
                         > <mailto:[email protected]
                        <mailto:[email protected]>>
                         >
                        
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
                         >
                         >
                         >
                         >
                         > --
                         > Pete
                         >
                         >
                         >
                        
------------------------------------------------------------------------
                         >
                         > _______________________________________________
                         > Nuke-python mailing list
                         > [email protected]
                        <mailto:[email protected]>
                         >
                        
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

                        --
                        ben dickson
                        2D TD | [email protected]
                        <mailto:[email protected]>
                        rising sun pictures | www.rsp.com.au
                        <http://www.rsp.com.au/>
                        _______________________________________________
                        Nuke-python mailing list
                        [email protected]
                        <mailto:[email protected]>
                        
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python




                    --
                    Pete
                    
<nukeNodeCreationExample.png>_______________________________________________

                    Nuke-python mailing list
                    [email protected]
                    <mailto:[email protected]>
                    
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python



                _______________________________________________
                Nuke-python mailing list
                [email protected]
                <mailto:[email protected]>
                
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python




            --
            Pete
            _______________________________________________
            Nuke-python mailing list
            [email protected]
            <mailto:[email protected]>
            http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python


        _______________________________________________
        Nuke-python mailing list
        [email protected]
        <mailto:[email protected]>
        http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python



    _______________________________________________
    Nuke-python mailing list
    [email protected]
    <mailto:[email protected]>
    http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

    _______________________________________________
    Nuke-python mailing list
    [email protected]
    <mailto:[email protected]>
    http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python




--
Pete



_______________________________________________
Nuke-python mailing list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python


--
Wouter Klouwen, Software Engineer
The Foundry, 6th Floor, The Communications Building,
48 Leicester Square, London, WC2H 7LT, UK
T: +442079686828 - F: +442074341550 - thefoundry.co.uk
The Foundry Visionmongers Ltd - Reg.d in England and Wales No: 4642027
_______________________________________________
Nuke-python mailing list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to