1

我对 python 还是比较陌生,我一直在尝试写一些简单的东西来为我的工作风格做 nuke 覆盖。其中之一是删除节点。

import nuke

def removeOverride():
    nuke.thisNode()["operation"].setValue("keep")
    nuke.thisNode()["channels"].setValue("rgb")
##Adds end lined commands to run when node is created by the user.

nuke.addOnUserCreate(removeOverride, nodeClass = "remove")

上面的代码是我尝试将操作旋钮中的值更改为保留而不是 nuke 默认的删除。在我的工作流程中,我发现告诉它我想要保留哪些频道更容易。

4

2 回答 2

1

试试下面的一个。将此代码用于具有特定名称的节点:

def removeOverride():
    nuke.toNode("Remove1")['operation'].setValue('keep')
    nuke.toNode("Remove1")['channels'].setValue('rgb')

nuke.addOnUserCreate(removeOverride(), nodeClass='Remove') 

# use UpperCamelCasing for any class name ('Blur','Read','Remove')

同样对于创建的任何后续节点,请使用以下代码:

def removeOverride():
    for node in nuke.allNodes():
        if node.Class() == "Remove":
            node["operation"].setValue("keep")
            node["channels"].setValue("rgb")

removeOverride()
# OR
nuke.addOnUserCreate(removeOverride(), nodeClass='Remove')

并且最后一个使用nuke.selectedNodes()andnuke.thisNode()方法的配置适用于 DAG 中的选定节点:

def removeOverride():

    thisNode = nuke.thisNode()
    rootDAG = nuke.root()

    with rootDAG:
        allNodesSelected = nuke.selectedNodes()
    try:
        allNodesSelected.remove(thisNode)
    except:
        pass

    for node in allNodesSelected:
        node["operation"].setValue("keep")
        node["channels"].setValue("rgb")

    return allNodesSelected

nuke.addOnUserCreate(removeOverride(), nodeClass='Remove') 
于 2018-01-10T19:02:00.630 回答
0

我认为您可能需要考虑为此使用旋钮默认值而不是回调。

在您的init.py(或者menu.py如果您只希望它应用于在 GUI 会话中创建的新节点):

nuke.knobDefault('Remove.operation', 'keep')
nuke.knobDefault('Remove.channels', 'rgb')
于 2018-04-26T21:45:13.557 回答