【问题标题】:Invalid flag "testVisibility" in Autodesk Maya 2016Autodesk Maya 2016 中的无效标志“testVisibility”
【发布时间】:2017-10-06 19:06:44
【问题描述】:

我正在尝试确定一组网格节点当前是否可见。使用 pymel 和 isVisible() 有效,但它对性能造成了巨大的影响。 通过查看文档,我发现了一些可以(希望)解决我的问题的东西,即命令 hide 上的标志 testVisibility

根据文档,flag 命令将返回一个值,告诉我指定的节点是否可见。

问题是,那个标志不存在。

import maya.cmds as cmds

cmds.sphere(name='testsphere')
cmds.hide('testsphere', testVisibility = True)

报错

# Error: Invalid flag 'testVisibility'
# Traceback (most recent call last):
#   File "<maya console>", line 4, in <module>
# TypeError: Invalid flag 'testVisibility' # 

与标志“tv”的短名称相同,以及在 MEL 中执行整个操作:hide -testVisibility;

文档包含自 Maya 2016 以来的此标志。这也是我当前使用的 Maya 版本(更具体地说,Maya 2016 SP5)。使用 python 文档的内置链接,我得到了与上面发布的相同的文档。查看 SP6 的更新日志也没有提及任何内容,所以我认为它不会解决我的问题。

我在 Maya 2017 上尝试了相同的命令,它可以工作。不过这对我帮助不大,因为这不是我们团队目前使用的 Maya 版本。

我无法联系 Autodesk 支持,因为我不是订阅者(感谢 Autodesk,帮助很大)。

所以我的问题是:

  • 有什么我遗漏/忽略的东西吗?这些标志是否仅在某种超级骗子开发者插件中实现? Maya 版本是否仅使用以前版本的 API 或其他什么?

    • 有没有办法在不尝试捕获的情况下检查命令是否有标志?
    • 任何解决方法都不像我上面提到的 pymel 路由那样消耗性能?

【问题讨论】:

    标签: python maya mel


    【解决方案1】:

    你是对的。我还为hide 命令尝试了tv 标志,它肯定不起作用。

    试试setter/getter:

    import maya.cmds as cmds
    
    cmds.sphere(name="testsphere")
    cmds.setAttr("testsphere.visibility", False)
    cmds.getAttr("testsphere.visibility")
    

    我在 Maya 2016/2018 中对其进行了测试。

    # Result: False # 
    

    【讨论】:

    • 感谢您的回答。我过去曾尝试使用节点的visibility 属性,但它不可靠(至少对于我的用例而言)。例如,如果节点是嵌套的,则该属性将无济于事。可见性可能是on,但父母是off,因此结果具有误导性。我可以向上遍历 listRelatives 并自己检查每个节点,但我希望自己不要这样做(我怀疑这就是 pymel isVisible() 正在做的事情)。
    • 但是我认为你的答案是正确的,不管我在抱怨什么 :-) 似乎没有办法解决它,所以我会自己实现它,看看是否只在 python 中做(如反对使用 pymel) 至少可以加快一点进程。
    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2018-03-13
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多