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