그래서 이것은 포럼에 대한 나의 첫 번째 질문이며 내가 올바르게하고 있기를 바랍니다. 일반적인 질문 : 사용자가 변경하려는 컨텍스트 또는 매개 변수에 따라 다른 데이터 유형의 값을 입력 할 수 있도록하는 스크립트를 작성할 때 Python이 오류를 반환하지 않도록하려면 어떻게해야합니까? 좀 더 구체적 : 저는 파이썬을 처음 접했고 The Foundry의 Nuke 사용자가 한 번에 같은 클래스의 여러 노드에서 값을 변경할 수 있도록하는 스크립트를 작성하고 싶습니다. 변경할 매개 변수가 체크 박스 ( 'bool')이고 RGBA 입력 ( '4 floats')인지 여부에 따라 입력은 다른 유형이어야합니다. 포럼을 검색 한 결과 type () 함수 로 유형을 확인 하고 isinstance ()를 사용하여 if 문에서 비교할 수 있음을 발견했습니다.함수. 나는 그것을 사용할 수 있다고 생각하지만, 예를 들어 Gradenode의 곱하기 노브의 유형은 'AColor_Knob'유형을 반환합니다. 나는 플로트와 같은 것을 기대했습니다. 그리고 isinstance ()에서 비교해도 내가 비교하는 데이터 유형에 관계없이 일치하지 않습니다.
지금까지 본문 :
nukescripts.clear_selection_recursive()
userInput = nuke.getInput('Which type of nodes would you like to select? (!!!first char has to be capitalized!!!)',
'Shuffle')
matchingNodes = []
for each in nuke.allNodes():
if each.Class() == userInput:
matchingNodes.append(each)
else:
pass
for i in matchingNodes:
i.setSelected(True)
nuke.message(str(len(
matchingNodes)) + ' matching Nodes have been found and are now selected! (if 0 there either is no node of this type or misspelling caused an error!)')
userInput_2 = nuke.getInput('Which parameter of these nodes would you like to change? \n' +
'(!!!correct spelling can be found out by hovering over parameter in Properties Pane!!!)',
'postage_stamp')
userInput_3 = nuke.getInput('To what do you want to change the specified parameter? \n' +
'(allowed input depends on parameter type (e.g. string, int, boolean(True/False)))', 'True')
for item in matchingNodes:
item.knob(userInput_2).setValue(userInput_3)
지금까지 데이터 유형을 확인한 방법 :
selected = nuke.selectedNode()
knobsel = selected.knob('multiply')
print(type(knobsel))
#if type(knobsel) == bool:
if isinstance(knobsel, (str,bool,int,float,list)):
print('match')
else:
print('no match')
nuke.tcl ()을 사용하여 TCL 명령을 호출 할 수 있습니다. TCL에서는 모든 것이 문자열이므로 유형은 관련이 없습니다 (일부 명령에서).
p = nuke.Panel('Property Changer')
p.addSingleLineInput('class', '')
p.addSingleLineInput('knob', '')
p.addSingleLineInput('value', '')
p.show()
node_class = p.value('class')
knob_name = p.value('knob')
knob_value = p.value('value')
for node in nuke.allNodes(node_class):
tcl_exp = 'knob root.{0}.{1} "{2}"'.format(node.fullName(),knob_name,knob_value)
print tcl_exp
nuke.tcl(tcl_exp)
그것은 당신의 질문에 답할 것입니다. 하려는 작업에 접근하는 방법에는 여러 가지가 있습니다. 모든 것을 Python으로 유지하려면 노브 값에 대한 유형 검사를 수행 할 수 있습니다. 예를 들면 :
b = nuke.nodes.Blur()
print type(b.knob('size').value()).__name__
이것은 Blur 노드를 만들고 유형의 문자열 값을 인쇄합니다. 이 경로를 권장하지는 않지만이를 사용하여 값을 변환 할 수 있습니다.
example = '1.5'
print type(example)
exec('new = {}(example)'.format('float'))
print type(new)
아래로 이동하는 다른 경로는 노브 유형 및 예상 값에 대한 사용자 지정 조회 테이블을 직접 만드는 것입니다.
편집하다:
TCL Nuke 명령 : http://www.nukepedia.com/reference/Tcl/group__tcl__builtin.html#gaa15297a217f60952810c34b494bdf83d
Nuke Node Graph에서 X를 누르거나 File> Comp Script Command로 이동하면 TCL을 선택하고 다음을 실행할 수 있습니다.
knob root.node_name.knob_name knob_value
예:
knob root.Grade1.white "0 3.5 2.1 1"
이름이 지정된 노브의 값을 설정합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다