🔹 Open RV에서 Python을 사용하는 이유
Open RV는 기본적으로 Mu 스크립팅 언어를 사용하지만, Python을 활용하여 RV의 기능을 확장하고 자동화할 수 있습니다. Python은 Mu와 동등한 수준으로 지원되며, Python과 Mu를 상호 호출하는 것도 가능합니다.
✅ Python을 RV에서 사용하는 이유:
- 강력한 확장성 – RV의 기능을 커스터마이징하고 자동화 가능
- Mu보다 친숙한 환경 – 기존 Pythn 개발자에게 익숙한 문법 제공
- RV 내부 모듈 직접 제어 가능 – rv.commands, rv.extra_commands, rv.rvtypes, rv.rvui 등의 API 활용
1️⃣ RV에서 Python 기본 사용법
RV에서 Python을 사용하려면 "모드(Mode)" 를 생성해야 하며, 이는 RV 패키지(rvpkg) 내에서 이루어집니다.
🔹 간단한 Python 모드 예제
아래 예제는 Z 키를 누르면 재생/정지를 토글하는 기능을 추가하는 Python 모드입니다.
import rv.rvtypes
import rv.commands
class PyHello(rv.rvtypes.MinorMode):
"""간단한 재생/정지 토글 기능 추가"""
def togglePlayback(self, event):
if rv.commands.isPlaying():
rv.commands.stop()
else:
rv.commands.play()
def __init__(self):
rv.rvtypes.MinorMode.__init__(self)
self.init("pyhello", [("key-down--Z", self.togglePlayback, "Z 키")], None)
def createMode():
"""RV가 모드를 생성할 때 호출하는 함수"""
return PyHello()
✅ 위 코드를 실행하면, Z 키를 누를 때마다 RV의 미디어가 재생/정지됨
2️⃣ Python에서 Mu 호출하기
RV는 Mu와 Python 간의 상호 호출을 지원합니다. Mu에서 Python 함수 실행하거나, Python에서 Mu 함수를 호출할 수 있습니다.
🔹 Python에서 Mu 함수 호출 예제
Python에서 Mu 함수를 실행하려면 pymu.MuSymbol 을 사용합니다.
from pymu import MuSymbol
# Mu의 "commands.play()" 함수 호출
F = MuSymbol("commands.play")
F() # RV에서 미디어 재생 실행
✅ Mu 함수에서 반환값을 받는 예제
from pymu import MuSymbol
is_playing = MuSymbol("commands.isPlaying") # 재생 중인지 확인하는 Mu 함수
set_title = MuSymbol("commands.setWindowTitle") # RV 윈도우 타이틀 변경 함수
if is_playing():
set_title("PLAYING") # RV 타이틀을 "PLAYING"으로 변경
3️⃣ Mu에서 Python 호출하기
Mu에서도 Python 모듈을 불러와 Python 코드를 실행할 수 있습니다.
🔹 Mu에서 Python 함수 호출 예제
require python;
let pyModule = python.PyImport_Import("os");
let pyMethod = python.PyObject_GetAttr(pyModule, "getcwd");
string result = to_string(python.PyObject_CallObject(pyMethod, python.PyTuple_New(0)));
print("현재 작업 디렉터리: %s\\n" % result);
✅ 위 코드는 Python의 os.getcwd()를 Mu에서 호출하여 현재 작업 디렉터리를 출력합니다.
4️⃣ Python과 Mu 간 데이터 변환
Python과 Mu는 데이터 타입이 다르므로, 서로 변환 과정이 필요합니다.
🔹 Mu → Python 변환 테이블
Mu 타입 | Python 변환 타입 |
string | str (유니코드 문자열) |
int, short, byte | int |
int64 | long |
float, double | float |
bool | bool |
vector float[2] | (float, float) (튜플) |
vector float[3] | (float, float, float) (튜플) |
vector float[4] | (float, float, float, float) (튜플) |
dictionary | dict (Python 딕셔너리) |
list | list (Python 리스트) |
✅ 예제: Python에서 Mu 함수 호출 및 데이터 변환
from pymu import MuSymbol
F = MuSymbol("commands.getFrameRange")
frame_range = F() # (시작 프레임, 종료 프레임) 튜플 반환
print(f"현재 프레임 범위: {frame_range[0]} ~ {frame_range[1]}")
- Mu의 getFrameRange() 함수는 튜플로 변환되어 Python에서 사용 가능
5️⃣ PySide를 활용한 RV UI 확장
RV는 PySide2(Qt) 기반으로 GUI를 구성합니다. 따라서 PySide를 사용하여 RV 인터페이스를 확장할 수 있습니다.
🔹 PySide를 활용한 간단한 예제
#!/Applications/RV.app/Contents/MacOS/py-interp
import sys
from PySide2.QtWidgets import QApplication, QLabel
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
label = QLabel("RV PySide2 UI")
label.show()
app.exec_()
sys.exit()
✅ 위 코드는 RV 내부에서 PySide2를 활용하여 간단한 라벨을 표시
🔹 RV 내부 UI 컨트롤 가져오기
import rv.qtutils
# RV의 세션 창 가져오기
rvSessionWindow = rv.qtutils.sessionWindow()
# RV의 OpenGL 뷰 가져오기
rvSessionGLView = rv.qtutils.sessionGLView()
# RV의 상단 및 하단 툴바 가져오기
rvSessionTopToolBar = rv.qtutils.sessionTopToolBar()
rvSessionBottomToolBar = rv.qtutils.sessionBottomToolBar()
✅ RV의 기존 UI 요소를 PySide2로 컨트롤 가능
6️⃣ Python 활용 시 주의사항 (FAQ)
✅ OpenGL을 사용하여 화면에 그릴 수 있나요?
가능합니다. PyOpenGL을 사용하면 Mu에서 수행하는 OpenGL 작업을 Python에서도 실행할 수 있습니다.
✅ rv.commands.bind()가 Mu와 다르게 동작하나요?
Python에서는 모든 인자를 명시적으로 전달해야 합니다.
bind("default", "global", event, func, event_doc_string)
✅ RV에서 실행한 Python 코드가 외부에서 다르게 동작하는 이유는?
RV는 PYTHONPATH를 변경하여 실행됩니다.
이를 해결하려면 QProcess.setEnvironment()를 사용하여 환경 변수를 명시적으로 설정해야 합니다.
🔹 마무리
RV에서 Python을 사용하면 강력한 자동화 및 확장 기능을 활용할 수 있습니다.
- RV API(rv.commands, rv.rvtypes)를 활용하여 RV의 모든 기능을 제어 가능
- Mu와 Python 간 상호 호출 지원 → 기존 Mu 코드 활용 가능
- PySide2(Qt) UI 확장을 통해 RV의 UI를 직접 제어 가능
✅ Python을 활용하여 자신만의 RV 기능을 커스터마이징해 보세요! 🚀
'RV' 카테고리의 다른 글
Open RV 패키지 만들기 (레퍼런스 매뉴얼 10장 요약) (0) | 2025.02.09 |
---|---|
Open RV 패키지 시스템 가이드 (사용자 매뉴얼 10장 요약) (0) | 2025.02.09 |
Open RV에서 OpenColorIO(OCIO) 사용하기 (0) | 2025.02.09 |
Open RV 명령줄 사용법 가이드 (Chapter 3 요약) (0) | 2025.02.09 |
Autodesk RV 다운로드 및 설치 가이드 (0) | 2025.02.09 |