VRED Python API v2

이 문서는 Python용 Qt(이전의 PySide 2)를 기반으로 하는 새로운 VRED Python API v2 설명서입니다. VRED Python API v1 설명서는 여기에서 볼 수 있습니다. VRED 2024 이후 VRED는 Qt 6(PySide6 및 shiboken6)을 사용합니다.

유형

새 인터페이스의 일부 함수는 매개변수에 대해 또는 반환 유형으로 Qt 유형을 사용합니다. 해당 유형을 PySide2 모듈에서 가져오지 않고도 Python 네임스페이스로 자동으로 가져와 사용할 수 있습니다.

다음과 같이 추가 Qt 클래스를 가져올 수 있습니다.

from PySide6.QtCore import QLine
from PySide6.QtGui import QBrush

line = QLine(0,0,100,100)
brush = QBrush()

객체

새 인터페이스의 장면 객체는 vrdObject에서 파생됩니다. 이러한 객체의 클래스 이름은 접두어 vrd로 시작합니다. 예를 들어 노드 객체의 경우 vrdNode이고 재질 객체의 경우 vrdMaterial로 시작합니다.

이러한 객체가 API 함수 또는 메서드에서 반환될 때마다 해당 클래스 유형이 동적으로 결정됩니다. 즉, 문서에 지정된 기본 클래스 유형 또는 하위 클래스로 지정됩니다. 예를 들어, vrMaterialService.findMaterial(Environments)를 통해 기본 환경 스위치를 검색하면 반환되는 객체는 문서화된 기본 유형 vrdEnvironmentSwitchMaterial 대신 vrdMaterial 유형이 됩니다.

따라서 반환된 객체를 업캐스팅할 필요가 없습니다. 반환된 객체는 이미 가장 구체적인 유형을 나타내기 때문입니다. 그러나 런타임 오류를 방지하려면 특정 유형의 메서드나 속성에 액세스하기 전에 vrdObject.isType()을 통해 반환된 객체 유형을 확인해야 합니다. 예를 들어 위의 에 대한 호출에서 반환된 재질의 특정 속성에 액세스하려고 findMaterial()할 경우 material.getChoice()를 호출하기 전에 material.isType(vrdSwitchMaterial)을 통해 재질 유형을 확인해야 합니다. 물론, 문서화된 기본 유형의 메서드 또는 속성만 액세스하려는 경우에는 그럴 필요가 없습니다.

서비스

객체에는 속성을 쿼리하고 변경하는 데 사용할 수 있는 많은 함수가 있지만 기본 진입점은 작업할 객체를 가져오는 서비스입니다.

서비스를 통해 기존 장면 객체를 찾거나, 새 객체를 생성하거나, 객체를 삭제하거나, 관련 VRED 모듈에서 제공되는 다른 함수에 액세스할 수 있습니다.

서비스 클래스와 이름이 같은 객체를 통해 서비스 함수를 호출합니다. 예:

camNode = vrCameraService.createCamera("new camera")

함수 호출

VRED API v2에서는 선택적 매개변수만 함수 호출에서 키워드 인수(명명된 인수)로 전달할 수 있습니다. 선택적 매개변수는 이 문서의 함수 서명에 기본값과 함께 표시됩니다.

모든 필수 매개변수는 위치 인수, 즉 서명에 지정된 순서대로 이름 없이 전달되어야 합니다.

vrNodeService.findNode에는 하나의 필수 매개변수(name)가 있으며 나머지는 선택 사항입니다. 즉, 다음 함수 호출은 작동합니다(두 번째 및 세 번째 매개변수 생략).

trackNode = vrNodeService.findNode("track1", root=vrCameraService.getCameraRoot())

반면에 다음 함수 호출은 오류가 발생합니다.

trackNode = vrNodeService.findNode(name="track1", root=vrCameraService.getCameraRoot())

타사 모듈 설치

VRED는 Python 3으로 전환되었으므로 타사 모듈을 쉽게 설치할 수 있습니다. 전체 Python 설치는 lib/python 아래에 있는 설치 폴더에서 찾을 수 있습니다. Pip를 사용하여 공식 Python 리포지토리에서 설치할 수 있습니다. 'numpy'를 설치하려면 다음과 같이 하면 됩니다.

python.exe -m pip install numpy

Pip는 Python과 독립적으로 개발되었습니다. Pip를 최신 버전으로 업그레이드하려면 다음을 사용하십시오.

python.exe -m pip install --upgrade pip

포함된 Pip가 작업을 중지해야 하는 경우 Python 부트스트랩 메커니즘을 사용하여 복원할 수 있습니다.

python.exe -m ensurepip

또한 모듈을 Lib/site-packages에 수동으로 설치할 수도 있습니다. Python API를 사용하여 자체 C 또는 C++ 확장을 컴파일하려면 호환 가능한 컴파일러를 사용해야 합니다. 다시 컴파일하지 않고 VRED용 공식 Python 3 바이너리를 사용하고 있습니다. 따라서 VRED에서 제공되는 버전과 버전 번호가 동일한 python.org의 Python 배포를 컴파일하는 모든 작업이 작동해야 합니다.

웹 인터페이스를 통해 Python API 사용

이 인터페이스는 Python 또는 웹 인터페이스를 통해 사용할 수 있습니다. 액세스는 JavaScript를 통해 이루어집니다. 함수 호출은 비동기적으로 실행됩니다. 다음 예는 이러한 호출이 웹 페이지에서 어떻게 이루어질 수 있는지를 보여줍니다. 모든 매개변수 및 반환 유형이 JavaScript 유형에 매핑됩니다. 예를 들어 QVector3D 및 QMatrix4x4는 3개 또는 16개 숫자로 구성된 배열에 매핑됩니다.

<script type="module">
  import {api} from '/api.js';

  // reacting on a signal
  api.vrClusterService.started.connect(() => {console.log('Started')});
  // calling a function
  api.vrClusterService.start();
  // changing the position of the camera
  api.vrNodeService.findNode("Perspective")
      .then((node) => node.setTranslation([10,20,30]));
</script&gt>

API v1과 v2를 함께 사용

동일한 스크립트에서 API v1과 API v2의 함수를 함께 사용할 수 있습니다.

API v1에서 노드 객체 유형은 vrNodePtr입니다. vrNodePtr을 매개변수로 사용하는 API v1의 함수에서 vrdNode 객체를 사용할 수 있으며, 반대로 vrdNode를 매개변수로 사용하는 API v2의 함수에서 vrNodePtr 객체를 사용할 수 있습니다. 이러한 변환은 자동으로 수행됩니다.

명시적으로 vrdNodevrNodePtr 객체로 변환하려면 다음을 수행합니다.

oldNodePtr = toNode(newVRDObject.getObjectId())

vrNodePtr을 vrdNode로 변환할 수도 있습니다.

newVRDObject = vrNodeService.getNodeFromId(oldNodePtr.getID())

장면 그래프 용어

이 문서에서 노드 그래프를 참조하는 방법을 알아보려면 VRED의 노드 그래프를 참조하십시오.

Python 예제 스크립트

이 스크립트는 VRED Python API의 다양한 기능을 보여 주는 예제 스크립트 모음입니다.