Q100372: 더 명확한 연결을 위해 Python을 사용하여 입력 및 출력 포트의 이름을 바꾸는 방법

팔로우

요약

여러 입력(예: 병합, 스위치 또는 전역 상태 변수 노드)이 있는 노드를 설정할 때 연결 목적을 명확히 하기 위해 각 연결 포트의 이름을 수동으로 바꾸는 것은 상당히 지루할 수 있습니다. 프로세스를 자동화하려면 이름 바꾸기를 처리하는 Python을 사용하여 사용자 정의 선반 항목 또는 SuperTool을 생성할 수 있습니다. 이 문서에서는 이를 달성하는 방법을 설명합니다.

추가 정보

선택한 각 노드의 입력 포트를 반복하고 이름을 특정 값으로 바꾸는 예제 스크립트가 아래에 포함되어 설명되어 있습니다.

예를 들어 Merge 또는 VariableSwitch 노드를 사용하여 Katana 내에서 테스트할 수 있습니다.

예제 스크립트

# Grab all currently selected nodes
selectedNodes = NodegraphAPI.GetAllSelectedNodes()

# Loop through each selected node for node in selectedNodes:
# Get all the import ports within the node     inputPorts = node.getInputPorts()
# Loop through each port within the node     for inputs in inputPorts:         index = inputs.getIndex()         name = node.getInputPortByIndex(index).getName()
# Name each port 'Shot' plus their indexed location         node.renameInputPort(name,('Shot'+repr(index+1)))

스크립트 사용

Katana 내에서 간단히 Merge 또는 VariableSwitch 노드를 생성하고 여기에 여러 입력 포트를 추가하여 스크립트를 테스트할 수 있습니다(입력 포트를 추가하려면 노드의 큰 화살표를 클릭).



노드가 선택된 동안 위 스크립트를 Python 탭에 붙여넣거나 실행하면 기본 입력 포트의 이름이 다음과 같이 바뀌어야 합니다.

첨부된 ' renameInputPorts.py ' 파일을 다운로드하고 사용자 홈 영역 ' .katana/Shelves/ ' 디렉터리의 선반 폴더 이름 아래에 배치하여 위 스크립트를 사용자 정의 선반 항목으로 테스트할 수도 있습니다.

예를 들어:

Windows: C:\Users\username\.katana\Shelves\RenameShelf\renameInputPorts.py
리눅스: /home/username/.katana/Shelves/RenameShelf/renameInputPorts.py

이 설정은 맞춤형 Shelf 또는 SuperTool의 기초입니다. 여기에서 각 포트의 이름을 바꿀 수 있는 팝업 위젯을 추가로 추가하거나 SuperTool 노드 자체의 일부로 코드를 포함할 수 있습니다.

연결 설정, 선반 항목 및 SuperTools 생성에 대한 자세한 내용은 아래 링크를 사용하여 Katana 사용자 가이드 및 Katana 개발자 가이드를 확인하세요.

Python 연결 노드: Katana 개발자 가이드 - 노드 작업 - 노드 연결
선반 스크립트: Katana 사용자 가이드 - Katana 의 스크립팅 및 프로그래밍 - 선반 항목 스크립트
SuperTools: Katana 사용자 가이드 - 그룹, 매크로 및 슈퍼 도구 - SuperTools


스크립트 설명

selectedNodes = NodegraphAPI.GetAllSelectedNodes()

NodegraphAPI를 사용하면 먼저 스크립트 로직을 적용할 대상 노드를 찾습니다. 이는 이름으로 노드를 지정하거나 현재 선택된 노드를 쿼리하는 두 가지 방법으로 수행할 수 있습니다. 위의 줄은 현재 선택된 노드 객체의 목록을 " selectedNodes "로 찾아서 저장합니다.

for node in selectedNodes:
inputPorts = node.getInputPorts()

노드 객체 목록이 있으면 for 루프를 통해 각 객체를 반복하고 노드의 모든 입력 포트를 얻는 getInputPorts() 함수를 호출할 수 있습니다.

for inputs in inputPorts:         
index = inputs.getIndex()

이제 각 노드의 포트가 있으므로 이름이나 인덱싱된 위치를 통해 개별 포트를 반복하도록 설정할 수 있습니다. 위의 줄은 getIndex() 함수를 사용하여 인덱스 위치를 찾습니다.

name = node.getInputPortByIndex(index).getName()
node.renameInputPort(name,('Shot'+repr(index+1))) 

위의 줄은 노드 포트의 현재 이름을 검색하고 이름을 Shot 으로 바꾸고 그 뒤에 해당 포트의 인덱스를 붙입니다. 최종 이름은 노드에 있는 포트 수에 따라 Shot1, Shot2, Shot3과 같습니다.

첨부 파일

우리는 문제로 불편을 끼쳐 드려 죄송합니다

이유를 알려주세요