应用于NUKE节点的命令:
some_node.width()
显示错误的宽度。
像背景宽度小于它内部的节点宽度(这是正常的!?)
some_node.screenWidth()
始终在终端模式下显示0
宽度。
实际上我需要它来确定背景中的节点。尝试下一个代码:
backdrop_node.selectNodes(True)
print nuke.selectedNodes()
但这个在终端模式下什么都不返回。
在此先感谢您的帮助。
幸运的是,我最近不得不做类似的事情 - 没有在终端中测试过这个,但它并不依赖于那种在这种情况下不可用的东西,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