如何在终端模式执行(批处理模式)中查找节点的宽度?

问题描述 投票:2回答:2

应用于NUKE节点的命令:

some_node.width() 

显示错误的宽度。

像背景宽度小于它内部的节点宽度(这是正常的!?)

some_node.screenWidth()

始终在终端模式下显示0宽度。

实际上我需要它来确定背景中的节点。尝试下一个代码:

backdrop_node.selectNodes(True)
print nuke.selectedNodes()

但这个在终端模式下什么都不返回。

在此先感谢您的帮助。

python nuke
2个回答
0
投票

幸运的是,我最近不得不做类似的事情 - 没有在终端中测试过这个,但它并不依赖于那种在这种情况下不可用的东西,AFAIK。

def locateNodes():
    '''get all backdrop nodes in a script, and return a dictionary of {backdropName:[list of nodes]}'''


    bdNodes=nuke.allNodes(filter="BackdropNode")

    containedNodes={}

    #create a dictionary of backdropName : (xpos, ypos, xpos+width, ypos+height)
    regions={}
    for backdropNode in bdNodes:
        regions[backdropNode.name()]=(backdropNode.knob('xpos').value(), 
                                        backdropNode.knob('ypos').value(),
                                        backdropNode.knob('xpos').value()+backdropNode.knob('bdwidth').value(),
                                        backdropNode.knob('ypos').value()+backdropNode.knob('bdheight').value())

    for node in nuke.allNodes():
        if node.Class()!="BackdropNode":
            pos=(node.knob('xpos').value(), node.knob('ypos').value())
            for backdropNodeName in regions:
                backdropRegion=regions[backdropNodeName]
                if pos[0]>=backdropRegion[0] and pos[0]<=backdropRegion[2] and pos[1]>=backdropRegion[1] and pos[1]<=backdropRegion[3]:
                    try:
                        containedNodes[backdropNodeName].append(node)
                    except KeyError:
                        containedNodes[backdropNodeName]=[node]

    return containedNodes

0
投票

如果你想知道The Foundry NUKE(我使用的是mac版本11.3v3)中bdwidth属性的值,你应该输入一个非常简单的Python命令:

nuke.toNode('BackdropNode1').knob(21).value()

此命令在脚本编辑器和终端模式下有效。

enter image description here \

要找出NUKE UI中Backdrop旋钮的值,只需选择一个节点并按键盘上的快捷键i即可查看DetailNodeInfo窗口。

enter image description here

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.