Help - Getting script to work with UI
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
-------------------------------------------------------------------------
Comments
Thanks for your response.I
Thanks for your response the help is much appreciated.
.
You have to optimize your code. Your code randomize each element as many times as faces those element have. To speed up the script you can randomize each element only once.
Tools and Scripts for Autodesk 3dsMax