从 Maya 中的引用导入对象
import objects from references in maya
我想在当前场景中导入多个引用的场景
当我只有 1 级引用时,我已经找到了如何做到这一点,如下所示:
场景
...|_reference
但是当我有多个引用级别时它不起作用,因为不尊重层次结构
我的层次结构:
场景
...|_reference
.........|_reference1
...............|_reference2
这是我的代码:
import maya.cmds as cmds
refs = cmds.ls(type='reference')
print refs
for ref in refs:
rFile = cmds.referenceQuery(ref, f=True)
cmds.file(rFile, importReference=True)
it returns 多层次引用:
line 8: The specified reference file cannot be imported because its parent file is not the top-level scene file. #
如何使用 python 导入我的场景中的所有引用,以及多级引用?
谢谢
Maya 需要您遵守一些规则:
- 您只能导入顶级引用。如果它是嵌套引用,它将引发错误。
- 必须加载引用,否则会引发错误。
调用 cmds.ls(type='reference')
的问题在于它将 return 所有引用,包括嵌套引用,这将违反规则 #1。
让它工作有点困难,因为我认为有一个简单的参数可以传递给 importReference
以导入其整个嵌套引用链,但似乎没有任何。所以这是如何做到的:仅遍历所有顶级引用并导入它们。这将导致所有直接子引用现在成为顶级,因此重新迭代以导入它们。冲洗并重复,直到没有更多的迭代。
这是如何完成的(这将跳过所有未加载的引用):
import maya.cmds as cmds
all_ref_paths = cmds.file(q=True, reference=True) or [] # Get a list of all top-level references in the scene.
for ref_path in all_ref_paths:
if cmds.referenceQuery(ref_path, isLoaded=True): # Only import it if it's loaded, otherwise it would throw an error.
cmds.file(ref_path, importReference=True) # Import the reference.
new_ref_paths = cmds.file(q=True, reference=True) # If the reference had any nested references they will now become top-level references, so recollect them.
if new_ref_paths:
for new_ref_path in new_ref_paths:
if new_ref_path not in all_ref_paths: # Only add on ones that we don't already have.
all_ref_paths.append(new_ref_path)
我想在当前场景中导入多个引用的场景
当我只有 1 级引用时,我已经找到了如何做到这一点,如下所示:
场景
...|_reference
但是当我有多个引用级别时它不起作用,因为不尊重层次结构
我的层次结构:
场景
...|_reference
.........|_reference1
...............|_reference2
这是我的代码:
import maya.cmds as cmds
refs = cmds.ls(type='reference')
print refs
for ref in refs:
rFile = cmds.referenceQuery(ref, f=True)
cmds.file(rFile, importReference=True)
it returns 多层次引用:
line 8: The specified reference file cannot be imported because its parent file is not the top-level scene file. #
如何使用 python 导入我的场景中的所有引用,以及多级引用?
谢谢
Maya 需要您遵守一些规则:
- 您只能导入顶级引用。如果它是嵌套引用,它将引发错误。
- 必须加载引用,否则会引发错误。
调用 cmds.ls(type='reference')
的问题在于它将 return 所有引用,包括嵌套引用,这将违反规则 #1。
让它工作有点困难,因为我认为有一个简单的参数可以传递给 importReference
以导入其整个嵌套引用链,但似乎没有任何。所以这是如何做到的:仅遍历所有顶级引用并导入它们。这将导致所有直接子引用现在成为顶级,因此重新迭代以导入它们。冲洗并重复,直到没有更多的迭代。
这是如何完成的(这将跳过所有未加载的引用):
import maya.cmds as cmds
all_ref_paths = cmds.file(q=True, reference=True) or [] # Get a list of all top-level references in the scene.
for ref_path in all_ref_paths:
if cmds.referenceQuery(ref_path, isLoaded=True): # Only import it if it's loaded, otherwise it would throw an error.
cmds.file(ref_path, importReference=True) # Import the reference.
new_ref_paths = cmds.file(q=True, reference=True) # If the reference had any nested references they will now become top-level references, so recollect them.
if new_ref_paths:
for new_ref_path in new_ref_paths:
if new_ref_path not in all_ref_paths: # Only add on ones that we don't already have.
all_ref_paths.append(new_ref_path)