Maya Python:如何引用文件并立即从该引用文件中选择一个子文

时间:2017-05-16 12:42:19

标签: python maya

我需要编写一个用于自动化的python脚本,我需要执行以下操作:

  • 参考文件
  • 引用文件后,立即选择其中一个子文件。

例如:参考文件的结构如下:

  • rig_grp
    • - > control_grp
    • - > model_grp

我的尝试是这样的:

import maya.cmds as cmds

cmds.file("M:/.../rig.ma", r=True, ignoreVersion = True, namespace = "Rig")

上面的代码引用了rig文件,我的问题是:如何在导入rig文件后立即选择 control_grp

1 个答案:

答案 0 :(得分:1)

大多数情况下,引用文件内容将作为命名空间的一部分进入(在名称前面用名称和冒号标识,例如'reference:pCube1`。如果在引用时控制命名空间您的文件将能够在命名空间内搜索而不是创建集合 - 但是,根据您或您的用户在参考对话框中设置选项的方式,您可能不会提前知道命名空间。

如果你有命名空间,那很简单:

rig_namespace = "rig" # or whatever you call it
control_grp = "control_grp")  # name of the object you want
cmds.select(rig_namespace + ":" + control_grp)

如果您不确定要搜索的命名空间,可以在将引用加载到python set()之前保存场景的内容,然后在引用后从内容中创建新的set()使用set difference()函数,您可以从后加载集中减去预加载集,为您提供所引用文件的所有内容。然后,您可以使用cmds.select从文件中抓取您要查找的项目。

获取导入的文件内容

import maya.cmds as cmds
before = set(cmds.ls(type='transform'))
cmds.file(r"path/to/file.ma", reference=True)
after = set(cmds.ls(type='transform'))
imported = after - before
print imported 

从导入的文件

中获取控件
controls = set(cmds.ls("*control_grp*", type = transform)) # wildcards in 
case maya has added numbers or prefixes
imported_controls = controls & imported # this gets only controls just added
cmds.select(*imported_controls) # you need the asterisk to unpack the set