123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- # autobackdrop.py
- # Conversion to Python by michael@yawpitchroll.com
- # Derived from a TCL original by frank@beingfrank.info [last modified 10.01.2006]
- # Creates a backdrop node that automatically encompasses all selected nodes and has a random color
- # Python version last midified 03.04.2008
-
- # 110608 mod by Gabor L. Toth: Backdrop now using not-so-bright-and-saturated-colors. Pastel colors only.
-
- """
- AutoBackDrop for Nuke:
- Creates a Backdrop node that automatically encompasses all selected nodes
- and assigns a random color to the Backdrop.
- """
-
- import nuke
- import nukescripts
- #from random import randint
- import random
-
- def AutoBackDrop():
- """
- Creates a backdrop node with a random color between minCol and maxCol.
- Allows some customization to the border around the selected nodes by
- modification of some in-file variables. Also allows the user to set
- a boolean to decide if they want the Backdrop non-stick (allows backdrop
- to be repositioned without moving nodes, will have to click on the DAG
- to 'stick' nodes to backdrop) or sticky (backdrop automatically de-
- selected, nodes 'stuck' to backdrop (similar to using the Group
- command in Shake as an organization Backdrop).
- """
-
- # -----> BEGIN USER CUSTOMIZATION <-----
- # minCol and maxCol restrict color range
- # 1 (full black) to 109951162776 (full white)
-
- minCol = 1
- maxCol = 1099511627776
-
- # leftBord, rightBord, topBord, and bottomBord define the border width of the backdrop from
- # the left-most, right-most, top-most, and bottom-most nodes (respectively). Positive integers
- # will expand the border from default, while negative integers will shrink it.
-
- leftBord = 0
- rightBord = 0
- topBord = 0
- bottomBord = 0
-
- # nonStick defines the "sticky" behavior of the encompassed nodes when
- # the backdrop is built. If 'true' the nodes will not be 'sticky' and
- # user will have to click on elsewhere on the DAG to 'activate' the backdrop
- # (same as normal Backdrop behavior). If 'false' the nodes will 'stick' as
- # soon as the AutoBackDrop is created. Default is 'false'
-
- nonStick = False
-
- # -----> END USER CUSTOMIZATION <-----
-
-
- #Check for selected nodes, create simple backdrop if empty, else create autobackdrop
- selection = nuke.selectedNode()
-
- if selection is None:
- bd = nuke.createNode("BackdropNode")
- #bd.knob("tile_color").setValue(randint(minCol, maxCol))
- bd.knob("tile_color").setValue(getRandomPastelColor())
- bd.knob("selected").setValue(True)
- return
-
- selection = nuke.selectedNodes()
-
- #Find the extreme X and Y positions of the selected nodes
- curX = set([i.knob("xpos").value() for i in selection if i.Class()!="BackdropNode"])
- curY = set([i.knob("ypos").value() for i in selection if i.Class()!="BackdropNode"])
-
- bdropX = set([i.knob("xpos").value() for i in selection if i.Class()=="BackdropNode"])
- bdropY = set([i.knob("ypos").value() for i in selection if i.Class()=="BackdropNode"])
- bdropW = set([(i.knob("bdwidth").value() + i.knob("xpos").value()) for i in selection if i.Class()=="BackdropNode"])
- bdropT = set([(i.knob("bdheight").value() + i.knob("ypos").value()) for i in selection if i.Class()=="BackdropNode"])
-
- minX = min(curX|bdropX)
- minY = min(curY|bdropY)
-
- curX = set([(i+120) for i in curX])
- bdropW = set([(i + 40) for i in bdropW])
-
- maxX = max(curX|bdropW)
-
- curY = set([(i+120) for i in curY])
- bdropT = set([(i + 56) for i in bdropT])
-
- maxY = max(curY|bdropT)
-
- #Create BackDrop encompassing all selected nodes and assign random color to Backdrop
- bd = nuke.createNode("BackdropNode")
- bd.knob("xpos").setValue(minX-(20+leftBord))
- bd.knob("ypos").setValue(minY-(30+topBord))
- bd.knob("bdwidth").setValue((maxX-minX)+(rightBord))
- bd.knob("bdheight").setValue((maxY-minY)+(bottomBord))
- bd.knob("tile_color").setValue(getRandomPastelColor())
- bd.knob("selected").setValue(nonStick)
-
-
- def getRandomPastelColor():
- import random
-
- med = random.random()/4+0.10
- #print 'Mean= ' + str(med)
-
- treshold = 0.1
- r = abs(random.triangular(med-treshold, med+treshold))
- g = abs(random.triangular(med-treshold, med+treshold))
- b = abs(random.triangular(med-treshold, med+treshold))
- a = 1
- print ('r: ' + str(r) + ' g: ' + str(g) + ' b: ' + str(b) )
- color = int('%02x%02x%02x%02x' % (r*255,g*255,b*255,a*255),16)
- return color
|