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(), 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]>> 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]>>>
>     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]>>>
>     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]>>
>     >         *Sent:* Monday, April 11, 2011 6:39 PM
>     >         *To:* [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]>>
>     >        
>     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]>>
>     >        
>     http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>     >
>     >
>     >
>     >
>     >     --
>     >     Pete
>     >
>     >
>     >
>     >
>     > --
>     > 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
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

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

Reply via email to