有时,你希望随机选择对象的子集来应用材质或效果。手动操作随机选择是一件麻烦的事,而且随机的效果也不理想,最好的方法是编写一个脚本来执行。以下是MAXScript随机选择函数的示例。
function getRandomFromCollection collection percentage rseed:123456789 = (seed rseed -- set the randomization seedlocal cCount = collection.count as floatlocal dec = (percentage as float) / 100.0local cuttoff = cCount * declocal results = for obj in collection where ((random 1.0 cCount) <= cuttoff) collect objresults)
你可以在任何集合上使用它,从对象选择到自定义结构数组。你可以在这样的脚本中使用它,其中objs是场景中的对象阵列,并且你希望随机选择阵列中25%的对象,以下是调用该函数的方法:
select (getRandomFromCollection objs 25 rseed:(random 1 123345678))
现在,打开MAXScript编辑器。然后将以上代码粘贴到其中,并通过单击“工具”>“计算所有”或CTRL+E来执行MAXScript。
你可以在3DMAX会话期间调用该函数。还可以将MAXScript代码扩展为一个更完整的脚本,该脚本始终调用当前场景选择中的函数,并将其绑定到菜单中的键盘快捷键或按钮。
下面是使用这个函数编写的一个简单的随机选择工具的完整代码:(将这段代码复制并保存为.ms文件,拖放到3dMax视口中执行)
rollout select_rollout "随机选择"(spinner perSpn "百分比" fieldwidth:70 range:[0,100,25]button selBtn "选择"function getRandomFromCollection collection percentage rseed:123456789 = (seed rseed -- set the randomization seedlocal cCount = collection.count as floatlocal dec = (percentage as float) / 100.0local cuttoff = cCount * declocal results = for obj in collection where ((random 1.0 cCount) <= cuttoff) collect objresults)on selBtn pressed do(select (getRandomFromCollection selection perSpn.value rseed:(random 1 123345678)))--end on)--end rolloutcreateDialog select_rollout 145 50
代码运行结果:
需要说明的是:
1.如果你想使结果保持可预测性,请传递一个静态rseed值(当前是一个动态的随机值)。
2.此函数不能保证返回指定的对象的百分比。相反,它会提供你的百分比作为一段时间的平均值。因此,如果你传递一个由100个对象组成的集合并请求25%,通常会得到的结果是25个,但有时会得到24或26个。
集合越小,百分比结果的准确性就越低;集合越大,就越准确。
3dmax随机选择工具本站下载:
https://download.csdn.net/download/mufenglaoshi/89294284