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