요약
이 문서에서는 OpScript 노드의 Lua 스크립트 내에서 평가된 CEL 문의 캐시된 결과( 수집 작업)를 사용하는 방법을 설명합니다.
이는 OpScript 노드에서 스크립트 버튼의 Python 스크립트를 실행하고 결과 장면 그래프 위치 경로를 사용자 매개변수에 캐싱하여 OpScript 노드의 Lua 스크립트 자체에서 사용할 수 있도록 함으로써 달성됩니다.
이를 통해 사용자는 편리할 때 수집 작업을 수행할 수 있으며, OpScript 노드가 쿠킹될 때마다 전체 장면 그래프에 대해 CEL 문을 일치시킬 필요 없이 OpScript Lua 스크립트가 캐시된 결과에 대해 작동하도록 할 수 있습니다 .
그러한 스크립트를 설정하는 방법과 이유에 대한 정보를 읽으십시오.
추가 정보
사용자는 OpScript 노드의 Lua 스크립트 내에서 수집 작업 결과를 사용할 수 있습니다. 예를 들어 결과 위치 경로를 장면 그래프 속성 아래에 저장하거나 Lua 스크립트에서 작업하는 데 사용할 수 있도록 할 수 있습니다.
바람직하지 않은 접근 방식
OpScript 내에서 CEL 문 평가 결과를 수집하는 것은 위치가 주어진 CEL 문과 일치하는지 확인하기 위해 업스트림 레시피가 수정될 때마다 장면의 전부는 아니더라도 일부를 쿠킹해야 하기 때문에 바람직하지 않습니다.
큰 장면 그래프가 있는 장면에서 작업할 때 이는 계산 비용이 매우 많이 들고 시간이 오래 걸리는 작업일 수 있습니다. 이는 대화형 컨텍스트에서 매우 바람직하지 않으며 Katana 의 지연 평가 모델에 위배됩니다.
권장 접근 방식
CEL 문 평가 결과를 수집하려면 한 번만 실행되는 사용자 트리거 스크립트를 사용하는 것이 더 좋습니다. 이 스크립트는 일회성 요리사로 장면을 탐색하고 노드 매개변수를 채우는 데 사용할 수 있는 정보를 수집합니다. 관련 위치가 변경될 경우 프로젝트를 최신 상태로 유지하려면 이 작업을 반복해야 합니다.
CEL 문과 일치하는 기존 위치 집합을 검색하려면 CEL 수집 작업을 사용하세요. 스크립트 버튼을 통해 실행되는 스크립트에서는 위젯 모듈 의 일부인 CollectAndSelectInScenegraph()
함수를 사용할 수 있습니다 .
collector = Widgets.CollectAndSelectInScenegraph(celStatement, traversalRootLocationPath)
matchedLocationPaths = collector.collectAndSelect(select=False, node=myNode)
어디:
- celStatement 는 평가할 표현식입니다.
- traversalRootLocationPath 는 평가가 시작되어야 하는 장면 그래프 위치 경로입니다. 이는 /root 또는 기타 지정된 장면 그래프 위치 일 수 있습니다 . 예를 들어 이 분기의 하위 위치만 CEL 문과 일치해야 하는 경우 /root/world/geo 입니다.
예시 장면
첨부된 예제 장면에서 이 전략의 구현을 볼 수 있습니다. 장면은 'OpScript에서 기하학 생성' 예제 프로젝트의 L-시스템을 사용하고 있습니다. 매개변수 탭 상단의 렌치 아이콘 > '사용자 매개변수 편집'을 클릭한 다음 CollectGeometryLocations 버튼 > '위젯 옵션…' 위의 렌치 아이콘을 클릭하여 CollectAndSet OpScript 노드의 스크립트를 검사할 수 있습니다 .
CollectAndSelect OpScript 노드의 사용자 매개변수는 다음 단계에 따라 설정되었습니다.
- OpScript 노드를 생성하고 e를 눌러 매개변수 탭에서 해당 매개변수를 엽니다.
- 매개변수 탭 > '사용자 매개변수 편집' 상단의 렌치 아이콘을 클릭합니다. 그러면 user 라는 새 그룹 매개변수가 노드에 추가됩니다 .
- 사용자 그룹 매개변수에 매개변수를 추가하려면 '추가'를 클릭하고, 매개변수 유형은 'String Array'를 선택하세요. 이는 일치하는 위치 경로를 저장할 매개변수가 됩니다.
- 새 매개변수 바로 위에 있는 렌치 아이콘을 클릭하고 '매개변수 이름 바꾸기'를 클릭하세요. 그러면 새 이름을 입력할 수 있는 대화 상자가 열립니다. 매개변수 이름을 'matchedLocationPaths'로 바꿉니다.
- '추가'를 다시 클릭하고 이번에는 매개변수 유형으로 '버튼'을 선택합니다.
- 새로 생성된 버튼 바로 위에 있는 렌치 아이콘을 클릭하고 '위젯 옵션…'을 선택하세요. 그러면 버튼 텍스트를 설명적인 내용(예: 'CollectGeometryLocations')으로 변경할 수 있는 대화상자가 열립니다. 대화 상자는 버튼을 클릭할 때 실행되어야 하는 Python 명령을 추가할 수 있는 스크립트 필드도 제공합니다.
- 다음 Python 명령을 복사하여 스크립트 필드에 붙여넣습니다.
collector = Widgets.CollectAndSelectInScenegraph('//*{hasattr("geometry")}', '/root/world/geo')
노드의 matchLocationPaths 사용자 매개변수에 일치하는 위치 경로를 저장하려면 스크립트에 다음 명령을 추가합니다.
# This command will match all scene graph locations underneath /root/world/geo that have a ‘geometry’ attribute
paths = collector.collectAndSelect(select=False, node=node)
# The 'node' variable is this parameter's node
paramName = 'user.matchedLocationPaths'
param = node.getParameter(paramName)
element = param.buildXmlIO(True)
element.removeAllChildren()
for path in paths:
child = element.addChild(PyXmlIO.Element("string_parameter"))
child.setAttr("name", "i%i" % (len(element) - 1))
child.setAttr("value", path)
element.setAttr("size", len(element))
param.parseXmlIO(element)
버튼을 클릭하여 스크립트를 실행하면 장면이 이동되고 위치가 쿠킹되는 동안 모달 대화 상자가 열리고 작업을 취소할 수 있는 옵션이 제공됩니다.
CollectAndSelect collectAndSelect()
함수는 Lua 스크립트에서 사용자 Op Arg로 사용할 수 있도록 OpScript 노드에서 사용자 매개 변수로 설정할 수 있는 위치 경로 목록을 반환합니다. 예를 들면 다음과 같습니다.
추가 읽기
CEL 구문에 대한 자세한 내용은 Katana 개발자 가이드의 CEL 참조 섹션을 참조하세요.
OpScript 노드의 Lua 스크립트에서 Python 스크립트에 설정된 것과 같은 사용자 op 인수에 액세스하는 방법에 대한 자세한 내용은 Cook 인터페이스(OpScript)에 대한 Katana 개발자 가이드를 참조 하세요 .
이와 관련하여 문제가 발생하는 경우 지원 티켓을 열고 문제에 대해 알려주고 지금까지 수행한 문제 해결 단계를 알려주십시오.
지원 티켓을 여는 방법에 대한 자세한 내용은 Q100064: 지원 티켓을 올리는 방법을 참조하세요 .
첨부 파일
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요