线程很重要,你可以在后台干事,而不让nuke假死。这样背后运行系统命令,程序啥的就很方便。
根据你想干啥,可以很方便地调用python的Threading借口来实现:
threading.Thread( target=<function_name>, args=<tuple_of_arguments> ).start()
也可以用threading.Thread创建自己的线程类:
class MyClass( threading.Thread ):
def __init__( self ):
threading.Thread.__init__( self )
当想从子线程和主线程通信(nuke session),下面的方法就可用:
executeInMainThread(call, args=(), kwargs={})
args是可选参数,kwargs是有名字的参数,在nuke主线程执行完立马返回
executeInMainThreadWithResult(call, args=(), kwargs={})
参数同上,执行后等待结果可用才返回。
注意: 不要在nuke 主线程运行上述函数,nuke会挂起
Examples
MirrorNodes
Node graph里面的mirrors小工具,在组织复杂节点数的时候很有帮助。这段脚本利用线程来慢慢将节点移动到新位置(而不是瞬间),显式的过程,疑惑更少,也更有趣。先来看下基础,下面的代码片段显示了如何平行移动所选节点 。
nodes = nuke.selectedNodes()
positions = [ n.xpos()+n.screenWidth()/2 for n in nodes]
axis = float( sum( positions ) ) / len( positions )