【问题标题】:a mel delete attributes in maya after import fbx form 3dmax从 3ds max 导入 fbx 后在 Maya 中删除属性
【发布时间】:2018-05-09 16:27:05
【问题描述】:

20180509

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

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 文件从 3dmax 导入到 Maya 之后。 这些对象有一些我不需要的属性。

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

我尝试让 mel 删除它们。

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'

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

【问题讨论】:

    标签: maya mel


    【解决方案1】:

    如果你使用 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]`);
        }
    }
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 此外,他最好使用 FBXASC 前缀并删除所有这些前缀——这是 FBX 复制新属性名称的烦人方式,它总是会标记非 Maya原生属性
      【解决方案3】:

      感谢帮助

      像这样的最后一梅尔

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

      【讨论】:

      • 我会喜欢 haggi 并使用循环来代替属性,所以如果您需要添加/删除属性,那么这样做很容易。
      猜你喜欢
      • 2017-10-28
      • 2016-04-20
      • 2012-06-01
      • 2017-12-17
      • 2018-03-08
      • 2020-11-29
      • 2013-01-25
      • 2011-05-31
      • 2011-11-13
      相关资源
      最近更新 更多