Search code examples
mayamel

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


20180509

Thanks for your information. I'd finished mel like that.

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];
}
}

Show another error Cannot delete static attribute 'currentUVSet' from node 'ObjectName'

Does children of a compound attribute cannot be deleted?

Or is it not nesserary to delete attribute 'currentUVSet'?


20180508

After I import fbx file to maya from 3dmax. Those objects have some attributes that I don't need.

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

I try to have a mel delete them.

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";
    }
}

If I select all objects. mel will show error message like : does not have attribute 'UDP3DSMAX'

Because those objects don't have the same nodes. How to delete all attributes at correct way?


Solution

  • You can reduce the complexity a littel bit if you use the catch command:

    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]`);
        }
    }
    

    This way you do not have to care about non existing attributes, but of course you do not see other errors that may occurs.