从 3ds max 导入 fbx 后,mel 在 maya 中删除属性

a mel delete attributes in maya after import fbx form 3dmax

20180509

感谢您的信息。 我就这样完成了梅尔。

select -all -hi;
string $allObj[] =`ls -sl -fl `;
for($i=0;$i<`size$allObj`;$i++)
    {
    select -r $allObj[$i];
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032viewFBXASC032dependent"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032viewFBXASC032dependent" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032method"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032method" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032smoothingFBXASC032on"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032smoothingFBXASC032on" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032edgeFBXASC032length"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032edgeFBXASC032length" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032maxFBXASC032displace"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032maxFBXASC032displace" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level"`;
if ($attrExists) {
    deleteAttr -at "mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "UDP3DSMAX"`;
if ($attrExists) {
    deleteAttr -at "UDP3DSMAX" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "MaxHandle"`;
if ($attrExists) {
    deleteAttr -at "MaxHandle" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "MaxVisibility"`;
if ($attrExists) {
    deleteAttr -at "MaxVisibility" $allObj[$i];
}
    int $attrExists = `attributeQuery -node $allObj[$i] -exists "currentUVSet"`;
if ($attrExists) {
    deleteAttr -at "currentUVSet" $allObj[$i];
}
}

显示另一个错误 Cannot delete static attribute 'currentUVSet' from node 'ObjectName'

是否不能删除复合属性的子项?

或者是否不需要删除属性'currentUVSet'?


20180508

我从3dmax导入fbx文件到maya后。 这些对象有一些我不需要的属性。

"mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings"
"mrFBXASC032displacementFBXASC032viewFBXASC032dependent"
"mrFBXASC032displacementFBXASC032method"
"mrFBXASC032displacementFBXASC032smoothingFBXASC032on"
"mrFBXASC032displacementFBXASC032edgeFBXASC032length"
"mrFBXASC032displacementFBXASC032maxFBXASC032displace"
"mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level"
"UDP3DSMAX"
"MaxHandle"
"currentUVSet"

我试着让梅尔删除它们。

string $allObj[] =`ls -sl -fl `;
for($i=0;$i<`size$allObj`;$i++)
    {
    select -r $allObj[$i];
    deleteAttr -at "mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings";
    deleteAttr -at "mrFBXASC032displacementFBXASC032viewFBXASC032dependent";
    deleteAttr -at "mrFBXASC032displacementFBXASC032method";
    deleteAttr -at "mrFBXASC032displacementFBXASC032smoothingFBXASC032on";
    deleteAttr -at "mrFBXASC032displacementFBXASC032edgeFBXASC032length";
    deleteAttr -at "mrFBXASC032displacementFBXASC032maxFBXASC032displace";
    deleteAttr -at "mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level";
    deleteAttr -at "UDP3DSMAX";
    deleteAttr -at "MaxHandle";
    deleteAttr -at "currentUVSet";
    }
}

如果我select所有对象。 mel 将显示如下错误消息: does not have attribute 'UDP3DSMAX'

因为这些对象没有相同的节点。 如何正确删除所有属性?

在调用deleteAttr之前,可以先检查属性是否存在:

int $attrExists = `attributeQuery -node yourObject -exists "yourAttr"`;
if ($attrExists) {
    deleteAttr -at "yourAttr" youObject;
}

感谢帮助

像这样的最后一个梅尔

global proc SB_CheckFile()
{
    select -all -hi;
    string $allObj[] =`ls -sl -fl `;
    for($i=0;$i<`size$allObj`;$i++)
    {
        select -r $allObj[$i];
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032viewFBXASC032dependent"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032viewFBXASC032dependent" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032method"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032method" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032smoothingFBXASC032on"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032smoothingFBXASC032on" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032edgeFBXASC032length"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032edgeFBXASC032length" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032maxFBXASC032displace"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032maxFBXASC032displace" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level"`;
        if ($attrExists) 
        {
            deleteAttr -at "mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "UDP3DSMAX"`;
        if ($attrExists) 
        {
            deleteAttr -at "UDP3DSMAX" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "MaxHandle"`;
        if ($attrExists) 
        {
            deleteAttr -at "MaxHandle" $allObj[$i];
        }
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "MaxVisibility"`;
        if ($attrExists) 
        {
            deleteAttr -at "MaxVisibility" $allObj[$i];
        }

    }
    select (`ls -type "transform"`);
    string $allObj[] =`ls -sl -fl `;
    for($i=0;$i<`size$allObj`;$i++)
    {
        select -r $allObj[$i];
        int $attrExists = `attributeQuery -node $allObj[$i] -exists "currentUVSet"`;
        if ($attrExists) 
        {
            deleteAttr -at "currentUVSet" $allObj[$i];
        }
    }
}

如果使用 catch 命令,可以稍微降低复杂性:

string $attr[] = {"mrFBXASC032displacementFBXASC032useFBXASC032globalFBXASC032settings"
"mrFBXASC032displacementFBXASC032viewFBXASC032dependent"
"mrFBXASC032displacementFBXASC032method"
"mrFBXASC032displacementFBXASC032smoothingFBXASC032on"
"mrFBXASC032displacementFBXASC032edgeFBXASC032length"
"mrFBXASC032displacementFBXASC032maxFBXASC032displace"
"mrFBXASC032displacementFBXASC032parametricFBXASC032subdivisionFBXASC032level"
"UDP3DSMAX"
"MaxHandle"
"currentUVSet"};
string $sel[] = `ls -sl`;
for($i = 0; $i < size($sel); $i++)
{
    for( $k = 0; $k < size($attr); $k++)
    {
        catch(`deleteAttr -at $attr[$k] $sel[$i]`);
    }
}

这样您就不必关心不存在的属性,当然您也不会看到可能发生的其他错误。