Мел удаляет атрибуты в Maya после импорта fbx формы 3dmax - PullRequest
0 голосов
/ 08 мая 2018

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

После того, как я импортирую файл fbx в Maya из 3dmax. У этих объектов есть некоторые атрибуты, которые мне не нужны.

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

Если я выберу все объекты. mel покажет сообщение об ошибке вроде: does not have attribute 'UDP3DSMAX'

Потому что эти объекты не имеют одинаковых узлов. Как правильно удалить все атрибуты?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Спасибо за помощь

Последний мел, как этот

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];
        }
    }
}
0 голосов
/ 09 мая 2018

Вы можете немного уменьшить сложность, если используете команду 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]`);
    }
}

Таким образом, вам не нужно заботиться о несуществующих атрибутах, но, конечно, вы не видите других ошибок, которыеможет произойти.

0 голосов
/ 08 мая 2018

Перед вызовом deleteAttr вы можете проверить, существует ли атрибут первым:

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