Hey,
I have this script I've been using fairly often to randomize positions of elements within an object. (Found more or less as is on these forums I believe)
------------------------------------------------
obj = $
jitter = 1.5
minangle = 0.0
maxangle = 3.5
minscale = 0.99
maxscale = 1.15
numfaces = polyop.getnumfaces obj
allfacearr = #{1..numfaces}
for i = 1 to numfaces do
(
if allfacearr[i] then
(
elemarr = polyop.getElementsUsingFace obj i
allfacearr = allfacearr-elemarr
elemarr = elemarr as array
vertarr = #{}
for j = 1 to elemarr.count do
(
vertarr += polyop.getvertsusingFace obj elemarr[j]
)
vertarr2 = vertarr as array
pivt = [0,0,0]
for j = 1 to vertarr2.count do
(
pivt += polyop.getvert obj vertarr2[j]
)
pivt /= vertarr2.count
rot = (angleaxis (random minangle maxangle) (random [-1.0,-1.0,-1.0] [1.0,1.0,1.0])) as quat
scl = random minscale maxscale
for j = 1 to vertarr2.count do
(
vert = polyop.getvert obj vertarr2[j]
vertlocal = (vert - pivt)*scl
vert = (vertlocal*rot)+pivt
polyop.setvert obj vertarr2[j] vert
)
polyop.movevert obj vertarr (random [-jitter,-jitter,-jitter] [jitter, jitter, jitter])
)
)
-----------------------------------------------------------
However as I use it often enough, I wanted it to have a UI to change my variables rather than doing it via the script. This is what I came up with although the UI opens it doesn't actually work. Any help would be appreciated.
---------------------------------------------------------------------
obj = $
numfaces = polyop.getnumfaces obj
allfacearr = #{1..numfaces}
rollout ElementRandomise "Element Randomiser"
(
spinner jitter "Jitter" range:[0,100,0]
spinner minangle "Min Angle" range:[0,100,0]
spinner maxangle "Max Angle" range:[0,100,0]
spinner minscale "Min Scale" range:[0,100,0]
spinner maxscale "Max Scale" range:[0,100,0]
button create "Randomise"
on create pressed do
for i = 1 to numfaces do
(
if allfacearr[i] then
(
elemarr = polyop.getElementsUsingFace obj i
allfacearr = allfacearr-elemarr
elemarr = elemarr as array
vertarr = #{}
for j = 1 to elemarr.count do
(
vertarr += polyop.getvertsusingFace obj elemarr[j]
)
vertarr2 = vertarr as array
pivt = [0,0,0]
for j = 1 to vertarr2.count do
(
pivt += polyop.getvert obj vertarr2[j]
)
pivt /= vertarr2.count
rot = (angleaxis (random minangle maxangle) (random [-1.0,-1.0,-1.0] [1.0,1.0,1.0])) as quat
scl = random minscale maxscale
for j = 1 to vertarr2.count do
(
vert = polyop.getvert obj vertarr2[j]
vertlocal = (vert - pivt)*scl
vert = (vertlocal*rot)+pivt
polyop.setvert obj vertarr2[j] vert
)
polyop.movevert obj vertarr (random [-jitter,-jitter,-jitter] [jitter, jitter, jitter])
)
)
)
createDialog ElementRandomise
-------------------------------------------------------------------------
miauu · 2017-01-19