For the sake of functionality, I gave it three purposes:
Usage:
- select many objects
- adjust settings between height by colour / random colour / random greyscale
- run script
- I needed this to give an even distribution of colours, so introduced a new method which sorts based on position, then assigns a colour based on sort order. slightly long-winded code, sorry!
-- MixeScript snippet: Colour Objects (random/by pos) -- Removes material from objects and applies a random colour, or colour based on their position. --USAGE -- select many objects -- adjust settings between height by colour / random colour / random greyscale -- run script --SETTINGS useposcolour = true --if false, uses a random colour. greyscale = false -- if true then r=g=b (grey tones) sortbasedcolouring = false -- if true, sorts objects then colours based on sort order. ensures even distribution of colours and no matching colours. if sortbasedcolouring == false then ( minx = $.min.x maxx = $.max.x xdifference = maxx - minx miny = $.min.y maxy = $.max.y ydifference = maxy - miny minz = $.min.z maxz = $.max.z zdifference = maxz - minz sort for o in $ do ( o.mat = undefined xcolour = (o.center.x - minx) / xdifference * 255 ycolour = (o.center.y - miny) / ydifference * 255 zcolour = (o.center.z - minz) / zdifference * 255 if useposcolour then ( r = zcolour ; g = zcolour ; b = zcolour ) else ( if greyscale then ( r = random 0 255 ; g = r ; b = r ) else ( r = random 0 255 ; g = random 0 255 ; b = random 0 255 ) ) o.wirecolor = [r,g,b] ) ) else ( mysel = getcurrentselection() fn CompareX newobj prevobj = ( case of ( (newobj.center.x > prevobj.center.x): 1 (newobj.center.x < prevobj.center.x): -1 default:0 ) ) fn CompareY newobj prevobj = ( case of ( (newobj.center.y > prevobj.center.y): 1 (newobj.center.y < prevobj.center.y): -1 default:0 ) ) fn CompareZ newobj prevobj = ( case of ( (newobj.center.z > prevobj.center.z): 1 (newobj.center.z < prevobj.center.z): -1 default:0 ) ) selsize = mysel.count --print ("SELSIZE = " + (selsize as string)) qsort mysel CompareX for i = 1 to selsize do ( newcolour = (((i-1.0) / (selsize-1.0) * 255) as string) mysel[i].wirecolor = [(newcolour as integer),mysel[i].wirecolor.g,mysel[i].wirecolor.b] --print ("XVALUE: i = " + (i as string) + " , colour = " + (mysel[i].wirecolor as string)) ) qsort mysel CompareY for i = 1 to selsize do ( newcolour = (((i-1.0) / (selsize-1.0) * 255) as string) mysel[i].wirecolor = [mysel[i].wirecolor.r,(newcolour as integer),mysel[i].wirecolor.b] --print ("YVALUE: i = " + (i as string) + " , colour = " + (mysel[i].wirecolor as string)) ) qsort mysel CompareZ for i = 1 to selsize do ( newcolour = (((i-1.0) / (selsize-1.0) * 255) as string) mysel[i].wirecolor = [mysel[i].wirecolor.r,mysel[i].wirecolor.g,(newcolour as integer)] --print ("ZVALUE: i = " + (i as string) + " , colour = " + (mysel[i].wirecolor as string)) ) --optionally, use this to greyscale. --for o in mysel do (o.wirecolor = [o.wirecolor.b,o.wirecolor.b,o.wirecolor.b]) )
No comments:
Post a Comment