我遇到了maya函数referenceEdit
的问题。
为了我的工作,我为我们的客户清理动画师场景,以确保网格上没有动画,没有隐藏网格等等......
所以我想在动画师验证他的镜头时删除所有网格上的referenceEdits。但是如果我在网格上进行for循环删除它们的referenceEdits,如果它们是任意的话,Maya需要比预期更多的时间,即使在batchMode中我也可以跳过每个场景30-90分钟的时间,仅用于此步骤的清理。
我尝试使用线程进行,但Maya似乎不喜欢它,这是我没有线程的代码:
import time
start = time.time()
debug=False
meshes = cmds.ls( type='mesh', ap=True, recursive=True )
tr_meshes = [ cmds.listRelatives( x, p=True, path=True)[0] for x in meshes ]
to_test = list( set( meshes+tr_meshes ) )
edit_types = ['addAttr', 'connectAttr', 'deleteAttr', 'disconnectAttr', 'parent', 'setAttr', 'lock', 'unlock']
if to_test:
for x in to_test:
if debug: print '.',x
for edit_type in edit_types:
edits = cmds.referenceQuery( x, editStrings=True, editCommand=edit_type, successfulEdits=True, failedEdits=True )
if edits:
# Then Delete ReferenceEdits on it
cmds.referenceEdit( x, removeEdits=True, editCommand=edit_type, successfulEdits=True, failedEdits=True )
if debug:
for y in edits:
print '\t.',y
print time.time() - start
有人知道如何更快地实现这个目标吗?喜欢Maya API中的东西?或其他什么?
我的另一个方法是直接编辑.ma,但它是非常危险的吗?
[编辑]我忘了说我打开我的场景而不加载refs,启动我的脚本然后保存它并重新打开它进行其他清洁操作只是为了确保在步骤中没有任何代价