Maxscript_基础_修改器操作
  • 设置面板操作

  • 因为修改器的 许多操作 是要在修改器面板上实现的,所以通过脚本来控制时 可能当前面板不是修改器面板,有可能出现些奇怪的错误,所以这个命令会比较常见

setCommandPanelTaskMode #modify
-- 可以设置的其它面板包括: #create | #modify | #hierarchy | #motion | #display | #Utility
  • 子物体

-- 修改器子物体
subObjectLevel = 0 / 1 / 2 / 3 / 4 / 5
-- 设置物体的subLevel
-- 正确设置会返回True,否则Falsefn fnSetSubLevel iLevel=
(
    try
    (
        -- 强制转到Modify面板
        -- 因为在其他面板做此操作是无效的
        setCommandPanelTaskMode #modify

        -- 设置SubLevel
        subObjectLevel = iLevel
        return true

    )
    catch(return false)
)

/* -- 调用例子:
-- 如果能够设置到那个层级会返回True,进行下一步操作,否则就什么都不做了
if(fnSetSubLevel 5)then
(
    -- 做一些事情
)
else(print "set subLevel failed!")
*/

搜集当前物体所有的修改器

mods = $.modifiers

添加修改器

-- 声明一个修改器
smoothMod = smooth()

-- 显示所有属性 showproperties smoothMod
-- 设置属性:
smoothMod.autoSmooth = truesmoothMod.threshold = 180

-- 添加到所选的物体上
for s in selection do addmodifier s smoothMod

-- 注意这里所有选择的物体用得是同一个修改器
-- 如果要给每个物体赋予独立的修改器,那么把修改器声明放在遍历里面

删除修改器

deleteModifier <node> <modifier_or_index>

查找修改器的方法

fn fnGetModifiers obj=
(
    mods = obj.modifiers
    return (for m in mods collect (m.name as name))
)
-- 调用: 获得单个选择物体的修改器列表
-- mods = fnGetModifiers $

查找指定物体上的修改器

-- 返回一个列表(因为一个物体上可能有 多个同名的修改器)
fn fnFindModifier obj modName=
(
   local foundList = #()
    local mods = obj.modifiers
    for m in mods do 
    (
        if(m.name == modName)then
        (
            append foundList m
        )
    )    
    return foundList
)

-- 例子: 查找Smooth
-- smMod = fnFindModifier $ "Smooth"

批量设置物体修改器

/*
    随意在场景里建一些几何体
    随意加上Smooth修改器,或其他的修改器
    脚本会查找Smooth修改器并设置属性
*/

-- 批量设置物体修改器
fn fnBatchSetSmoothModifiers=
(
    -- 遍历所有几何体
    for g in geometry do
    (
        -- 用于收集修改器的数组 
        local modList = #()
        
        -- 查找物体上是否有Smooth修改器
        if(g.modifiers[#Smooth] != undefined)then
        (
            -- 搜集到列表内
            append modList (g.modifiers[#Smooth])
        )
        -- 遍历修改器列表
        if( modList.count > 0 )then for m in modList do
        (
            m.AutoSmooth = true
            m.threshold = 180
        )
    )
)


作者: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