지원 티켓 만들기
팔로우

Q100385 : Katana의 콜백 및 이벤트 처리기

개요

이 기사에서는 Katana에 콜백 또는 이벤트 처리기를 등록하는 방법을 설명하고 사용 가능한 콜백 및 이벤트 유형 및 해당 콜백 함수의 예상 입력 인수에 대한 정보를 찾는 위치에 대한 세부 정보를 제공합니다.
콜백 및 이벤트에 대한 문서는 Katana 개발자 가이드 에서 찾을 수 있습니다. 아래의 기사는 구현 방법에 대한 실용적인 예제를 제공합니다.

추가 정보

콜백 은 Katana 환경에 추가 된 파이썬 코드 조각으로 Katana에서 다양한 노드 (노드 생성 또는 스크립트로드)와 같은 이벤트가 발생할 때 자동으로 실행됩니다.

이벤트 는 사용자 조치 또는 마우스를 클릭하거나 누르는 키와 같은 다른 소스의 결과로 발생하는 조치입니다. 이벤트 핸들러이벤트 를 처리하는 데 사용되는 루틴으로 프로그래머가 이벤트가 발생할 때 실행될 코드를 작성할 수 있습니다 ( https://www.computerhope.com/jargon.htm의 정의).

콜백은 특정 상황 (예 : 파일 저장 직전)에서 Katana에 의해 트리거되고 호출 코드는 계속하기 전에 콜백이 실행될 때까지 대기하므로 저장 전에 사용자가 프로젝트를 수정할 수 있습니다.

반대로 이벤트는 Katana의 이벤트 시스템에 의해 큐에 저장되고 "나중에"처리됩니다. 즉, 콜백은보다 즉각적이지만 일반적으로 매우 빠르거나 작업하는 동안 UI가 멈출 위험이 있습니다.

콜백과 이벤트 핸들러는 여러 상황에서 유용합니다. 예를 들어 새로운 Katana 프로젝트를 생성 할 때 프로젝트 설정을 변경하거나 특정 노드 매개 변수의 값 변경에 대응할 수 있습니다.

콜백

Katana에서 콜백은 시작되는 소프트웨어,로드되는 Katana 프로젝트 또는 생성되는 노드와 같은 여러 상황에서 사용할 수 있습니다. 사용 가능한 콜백의 전체 목록을 보려면 Python 탭에서 다음 코드를 실행하십시오.

from Katana import Callbacks
print dir(Callbacks.Type)


각 콜백 유형에 전달되는 키워드 인수를 확인하려면 호출시 입력 인수를 인쇄 할 다음 콜백을 등록 할 수 있습니다.

def Hello(**kwargs):
    for i in kwargs.keys():
        print i


이러한 인수는 콜백 함수 내에서 다음과 같이 액세스 할 수 있습니다.

def Hello(**kwargs):
   print(kwargs.get('filename'))

from Katana import Callbacks Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)

이벤트 핸들러

Katana에는 등록 된 핸들러가들을 수있는 많은 이벤트 유형이 있습니다. 사용 가능한 모든 이벤트 유형 목록을 보려면 Python 탭에서 다음을 실행하십시오.

import Utils.EventModule
print Utils.EventModule.GetAllRegisteredEventTypes()

각 이벤트 유형에 대해 제공되는 입력 인수를 찾으려면 특정 이벤트에 대해 다음 처리기를 등록 할 수 있습니다. 이벤트가 트리거되면 핸들러는 인수를 인쇄합니다.

def eventHandler(eventType, eventID, **kwargs):
    for i in kwargs.keys():
        print i


입력 인수가 알려지면 이벤트 처리기 함수 내에서 사용할 수 있습니다. 다음은 사용자 환경 설정의 변경 사항을 수신하도록 등록 할 수 있으며 환경 설정의 이름과 새 값을 출력하는 이벤트 핸들러의 예입니다.

def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
    print prefKey, "preference changed to:", prefValue

Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')

노드 매개 변수 변경 이벤트 처리기

예를 들어, 이벤트 핸들러 함수가 특정 노드 매개 변수의 변경에만 반응해야하는 경우 ' parameter_finalizeValue '이벤트를 수신하도록 등록 할 수 있습니다. 변경된 매개 변수의 이름은 핸들러 함수 내에서 점검되어 관련 함수인지 여부를 판별 할 수 있습니다.

def myParamCallback(eventType, eventID, node, param):
    if (node.getName() == "CameraCreate") and (param.getName() == 'fov'):
        print("FOV for the following camera changed to " + repr(param.getValue(0)) + ": " + node.getParameter('name').getValue(0))

Utils.EventModule.RegisterEventHandler(myParamCallback, "parameter_finalizeValue")

이벤트 핸들러는 이벤트가 대기열에 들어간 직후에 반드시 실행될 필요는 없습니다. 어떤 코드가 처리 된 특정 이벤트에 의존하고 이벤트 처리기가 실행되면 다음 호출이 필요할 수 있습니다.

Utils.EventModule.ProcessAllEvents() 


콜백 및 이벤트 핸들러에 대한 자세한 내용은 Katana 개발자 가이드콜백 및 이벤트 섹션을 참조하십시오 .

Katana 시작시 콜백 또는 이벤트 핸들러 등록


콜백 또는 이벤트 핸들러는 Katana가 다음과 같이 시작할 때 자동으로 등록 될 수 있습니다.

  • 콜백 또는 이벤트 핸들러 함수가 단일 파이썬 함수에서 수행 할 모든 액션을 정의하고 아래 예제 코드와 같이이를 등록하십시오.

from Katana import Utils, Callbacks

def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
    print prefKey, "preference changed to:", prefValue

Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')
def Hello(**kwargs): print(kwargs.get('filename'))
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello) 

  • 이 파일을 복사하여 텍스트 편집기에 붙여넣고 파일을 저장하십시오.

  • 파일을 init.py로 이름을 바꾸고 파일 확장자가 .py 또는 .txt가 아닌지 확인하기 위해 파일 확장자가 파일 브라우저에 표시되는지 확인하십시오.

  • 파일을 .katana 폴더 나 $ KATANA_RESOURCES 환경 변수에 정의 된 경로 아래의 Startup 폴더에 놓습니다 .


KATANA _RESOURCES 에 대한 자세한 내용은 Katana 온라인 도움말 에서 해당 항목을 참조하십시오.

다음에 Katana가 실행될 때, 지정된 액션이 발생할 때 콜백 함수가 실행되고 관련 이벤트가 대기열에 넣어지고 처리 될 때 이벤트 핸들러 함수가 실행됩니다. 위의 예제의 경우, 환경 설정이 변경되거나 Katana 프로젝트가로드되면 새 환경 설정 값 또는 프로젝트 파일 경로가 각각 터미널에 인쇄됩니다.

추가 도움말


콜백 또는 이벤트 처리기를 설정하는 데 문제가 발생하는 경우 지원 티켓을 열고 지금까지 수행 한 문제 및 문제 해결 단계에 대해 알려주십시오.


지원 티켓을 여는 방법에 대한 자세한 내용은 Q100064 : 지원 티켓을 올리는 방법을 참조하십시오 .

도움이 되었습니까?
/

We're sorry to hear that!

Please tell us why.
2명 중 2명이 도움이 되었다고 했습니다.

댓글