Maxscript_基础_遍历与递归


1. 遍历

例子1:对所有所选的物体做一些事

-- selection 是内建的表示当前所选的集合
-- 遍历当前所选,打印它们的名字
fn LoopSelection=
(
    for s in selection do
    (
        print s.name
    )
    /* -- 也可以写成:
    for s = 1 to selection.count do
    (
        print (selection[s].name)
    )
    */
)

例子2:对场景内所有几何体做一些事

-- geometry 是3dsMax内建的表示场景中所有几何体的集合
fn PrintGeomNames =
(
    -- 遍历场景里所有的几何体
    for g in geometry do
    (
        -- 打印几何体的名称
        print g.name
    )
)

例子3:多维遍历的应用:

-- 例子: 创建一个彩色盒子矩阵
fn CreateAColorCube=
(
    -- 每行的数量
    local num = 10.00
    
    -- 每个box的大小
    local size = 10.0
    
    -- 遍历
    -- 三层遍历最终会创建 10 x 10 x 10 个box
    for r = 1 to num do
    (
        for g = 1 to num do
        (
            for b =1 to num do
            (
                -- 创建box并设置属性
                theBox = box()
                theBox.name = "box_" + ((r as string) +"_") + ((g as string) +"_") +(b as string) -- 每个box的名称
                
                theBox.width = size -- 宽
                theBox.height = size -- 高
                theBox.length = size -- 长
                
                theBox.pos = [r,g,b] * size -- 位置
                
                theBox.wirecolor = [(r/num * 255),(g/num *255.00),(b/num *255.00)] -- 颜色
            )
        )
    )
)

While_Do的例子

-- 注意1 条件判断,如果永远达不到停止条件,会成死循环,3dsMax会成假死状态
-- 注意2 while . . . do 和 do . . . while 的区别

maxnul = 10
i = 1

while( i < maxnum )do
(
    print i  i+=1
)


/* do
(
    print i  i+=1)while( i <= maxnum
)
*/ ```

2,递归

  • 例子:撸 Bip骨骼,搜集一个Bip所有的骨骼到一个集合内:

-- 声明一个集合,用于搜集Bipglobal RecurseCollector = #()
-- 递归函数
fn RecurseChildren currNode=
(
    -- 当前物体是否为Biped实体骨骼
    if(classof currNode == Biped_Object)then
    (
        --收集操作
        append RecurseCollector currNode
    )
    local childNodes = currNode.children
    if(childNodes.count &gt;0)then for c in childNodes do
    (
        RecurseChildren c
    )
)

-- 递归开始
fn RecurseStart currNode=
(
    -- 清空集合
    RecurseCollector = #()
    
    -- 开始递归
    RecurseChildren currNode
    
    -- 返回  
    return RecurseCollector
)
    
    -- 选择 BIP的根骨骼
    -- 搜集所有的Bip001上所有的骨骼
    bipList = RecurseStart $Bip001_Pelvis


作者:TAZORN

著作权归作者所有






【相关阅读】:

Maxscript_基础_回调函数http://tk.v5cg.com/help/246.html 

Maxscript_基础_材质处理http://tk.v5cg.com/help/247.html 

Maxscript_基础_修改器操作http://tk.v5cg.com/help/248.html 

Maxscript_基础_创建窗口http://tk.v5cg.com/help/249.html 

Maxscript_基础_遍历与递归http://tk.v5cg.com/help/250.html 

Maxscript_与DotNet交互http://tk.v5cg.com/help/251.html 


【上传发布插件】:

编写3DMAX插件到发布上线全流程http://tk.v5cg.com/help/147.html 

代码上传与工具发布http://tk.v5cg.com/help/99.html 

代码发布,部署实例参考http://tk.v5cg.com/help/140.html 

PS【动作库】代码部署指南http://tk.v5cg.com/help/141.html 

CG云盘 - 开发者使用说明http://tk.v5cg.com/help/34.html