使用python设置Autolabel,但保留常用的标签功能

问题描述 投票:0回答:1

我正在编写一些Python来创建一个更动态的角钉节点。我之前在其他管道中看到过这种做法,我喜欢它,并且这似乎是一个继续学习用于 nuke 的 python 的好项目。 (或者根本是Python哈哈)

我已设置“自动标签”以将节点显示为“稳定”或“匹配移动”,但是当我设置自动标签时,我无法在标签旋钮中输入 tcl 并使其工作。我已经尝试了一些方法来让它发挥作用,但我仍然不太明白。不知道是什么问题,也不知道如何解决。

我尝试设置自动标签,然后在其上附加“标签”,我什至尝试过 nuke.tcl() 来解释标签中的 [value ref_frame] 并显示它,这有效,但它只是在创建节点时吐出值,而不是将该文本放入标签中并允许其被解释为 tcl。

这是代码:

def customCornerPin():

    n = nuke.thisNode()
    n.addKnob(nuke.Int_Knob('ref_frame',"reference frame"))
    n.addKnob(nuke.PyScript_Knob('setFrame', "set to current frame", "{nuke.thisNode()['ref_frame'].setValue(nuke.frame())}"))
    n.addKnob(nuke.Boolean_Knob('stabilize',"stabilize"))

    n["stabilize"].setFlag(nuke.STARTLINE)

    n["from1"].setExpression("to1(ref_frame)")
    n["from2"].setExpression("to2(ref_frame)")
    n["from3"].setExpression("to3(ref_frame)")
    n["from4"].setExpression("to4(ref_frame)")
    n["invert"].setExpression("stabilize")


    n["ref_frame"].setValue(1001)
    n["label"].setValue("[value ref_frame]")

    def cornerPinLabel():
        
        n = nuke.thisNode()
        customAutoLabel = n.name() + '\n' + "(" + str('stabilize' if n['stabilize'].value()==1 else 'matchmove') + ")"

        if n['label'].value():
            customAutoLabel = customAutoLabel + '\n' + nuke.tcl("expr", "[value ref_frame]") + n['label'].value()
        return customAutoLabel
    nuke.addAutolabel(cornerPinLabel, nodeClass="CornerPin2D")

nuke.addOnCreate(customCornerPin, nodeClass="CornerPin2D")

我可以忽略自动标签位,并使用 setValue() 将 stable/matchmove if/else 语句放入标签中,但我更愿意保持标签框尽可能干净。

我还尝试过此版本的 customAutoLabel = line:

customAutoLabel = customAutoLabel + '\n' + n['label'].value()
,它允许您在节点的标签中输入任何内容,但如果我输入 [value to1],它不会将其评估为 tcl或者无论如何,它实际上并没有这样做,它只是将其显示为字符串。

我正在尝试以最有效的方式做到这一点,而不是减慢核武器的速度。据我所知,通过 python 来做是最好的,但也许我错了,我应该只做 tcl。

python tcl nuke
1个回答
0
投票

我自己没有使用过 autolabel,但文档表明它的工作方式与其他回调函数类似,因为它期望第一个参数是这样的函数:

def AutoLabelFunction(*args, **kwargs):
  return "text for label"

nuke.addAutoLabel(AutoLabelFunction, nodeClass="CornerPin2D")

您可以在“addAutoLabel”中使用可选的args、kwargs参数将信息传递给函数。

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