Nuke –如何使用Python选择随机节点?

时间:2019-07-06 11:05:38

标签: python nuke

我不太精通Python-我希望在一些代码上有所帮助。我正在尝试从nuke中的所有选定节点中选择两个随机节点。

我已经做得足够多了,可以在所选节点的数组中打印两个随机选择的节点名称,但是谁能帮忙完成代码,以便选择两个具有匹配名称的节点?本质上,我在想节点名称是否包含chosen_nodes字符串,请选择这些节点。

谢谢。

import nuke
import random

array = [] 
for node in nuke.selectedNodes(): 
    n = node['name'].value()
    array.append(n) 

chosen_nodes = random.sample(array, k=2)
print chosen_nodes

2 个答案:

答案 0 :(得分:0)

使用此代码,您可以从几个选定的节点中选择两个随机节点:

import nuke
import random

array = [] 

for node in nuke.selectedNodes():
    name = node['name'].value()
    array.append(name) 

print(array)

if nuke.selectedNodes():
    for index in nuke.selectedNodes():
        index['selected'].setValue(False)

for i in range(1, 3, 1):      # range(start, non-inclusive stop, step)
    r = random.randint(1, len(array))
    nuke.toNode(array[r-1]).setSelected(True)
    array.remove(array[r-1])  # delete randomly generated element from array

array = []

enter image description here

答案 1 :(得分:0)

  

基本上,我在想节点名称是否包含chosen_nodes字符串,请选择这些节点。

这应该接近您想要的!

match = 'chosen_nodes'

for node in nuke.selectedNodes():
    node.setSelected(False)
    if match in node['name'].value():
        node.setSelected(True) 

稍微复杂一点的版本:

def selectNodesWithFuzzyName(name, nodes=None):
    """
    Set the selected nodes to only those that match the passed name.

    Parameters
    ----------
    node : str
        Glob-style name of a node e.g. 'Grade*'
    nodes : Optional[Iterable[nuke.Node]]
        If provided, only operate on only these nodes. Otherwise
        the currently selected nodes will be used.
    """
    import fnmatch

    if nodes is None:
        nodes = nuke.selectedNodes()

    for node in nodes:
        node.setSelected(False)
        if fnmatch.fnmatch(node['name'].value(), name):
            node.setSelected(True)


selectNodesWithFuzzyName('Grade*')