Skip to content

Instantly share code, notes, and snippets.

@Arahnoid
Last active April 21, 2019 23:17
Show Gist options
  • Save Arahnoid/bb3641ac749f15076f40 to your computer and use it in GitHub Desktop.
Save Arahnoid/bb3641ac749f15076f40 to your computer and use it in GitHub Desktop.
#3dmax
-- Randomly jiggle elements within an object
-- http://forums.cgsociety.org/archive/index.php?t-1030430.html
-- (c) 2012 Created by 3ak (Alexander Loboda)
obj = $
jitter = 2.0
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.getEdgesUsingVert obj elemarr[j]
polyop.moveVert obj vertarr (random [-jitter,-jitter,-jitter] [jitter, jitter, jitter])
)
)'
-- and here is another quick script that does movement, rotation and scaling of elements of the poly object.
-- select your poly object, modify vars in the begining of the script and run it.
-- (c) 2012 Created by 3ak (Alexander Loboda)
-- To do list: use tm matrices instead
obj = $
jitter = 2
minangle = 0.0
maxangle = 360
minscale = 0.5
maxscale = 1.5
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])
)
)
fn moveElements oPoly x y z =
(
if (classOf oPoly != Editable_Poly) do throw "Wrong input in function: moveElements()"
faceArr = getFaceSelection oPoly
if faceArr do (
elemArr = polyop.getElementsUsingFace obj i
faceArr = faceArr - elemArr
elemArr = elemArr as array
vertArr = #{}
for i=1 to elemArr.count do
vertArr += polyop.getVertsUsingFace oPoly elemArr[i];
polyop.moveVert oPoly vertArr [x,y,z]
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment