我需要编写一个用于自动化的python脚本,我需要执行以下操作:
例如:参考文件的结构如下:
我的尝试是这样的:
import maya.cmds as cmds
cmds.file("M:/.../rig.ma", r=True, ignoreVersion = True, namespace = "Rig")
上面的代码引用了rig文件,我的问题是:如何在导入rig文件后立即选择 control_grp 。
答案 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