지원 티켓 만들기
팔로우

Q100291 : OpScript에서 CEL 문 수집하기

개요

이 기사에서는 OpScript 노드의 Lua 스크립트 에서 CEL 문 ( 수집 작업) 을 평가 한 캐시 된 결과를 사용하는 방법에 대해 설명합니다 .

이것은 OpScript 노드에서 스크립트 버튼의 파이썬 스크립트를 실행하고 사용자 매개 변수에서 결과 장면 그래프 위치 경로를 캐싱하여 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)

Where:
- celStatement  is the expression to be evaluated.
- traversalRootLocationPath is the scene graph location path at which the evaluation should start. This can be /root or any other specified scene graph location, for example /root/world/geo if only child locations in this branch should be matched against the CEL statement.

보기 장면

첨부 된 예제 장면에서이 전략의 구현을 볼 수 있습니다. 장면은 'OpScript에서 도형 생성'예제 프로젝트의 L 시스템을 사용하고 있습니다. 매개 변수 탭 상단의 공구 모양 아이콘> '사용자 매개 변수 편집'을 클릭 한 다음 CollectGeometryLocations 버튼 위의 공구 모양 아이콘> '위젯 옵션 ...'을 클릭하여 CollectAndSet OpScript 노드에서 스크립트를 검사 할 수 있습니다 .

Capture.PNG

3.PNG

4.PNG

CollectAndSelect OpScript 노드의 사용자 매개 변수는 다음 단계에 따라 설정되었습니다.

  1. OpScript 노드를 생성하고 e 를 눌러 매개 변수 탭에서 해당 매개 변수를 엽니 다.
  2. 매개 변수 탭 상단의 공구 모양 아이콘> '사용자 매개 변수 편집'을 클릭하십시오. 그러면 user 라는 노드에 새 그룹 매개 변수가 추가 됩니다.

    6.png

  3. '추가'를 클릭하여 매개 변수를 사용자 그룹 매개 변수에 추가하고 '문자열 배열'을 매개 변수 유형으로 선택하십시오. 이것은 일치 된 위치 경로를 저장할 매개 변수가됩니다.

    6.png

  4. 새 매개 변수 바로 위에있는 공구 모양 아이콘을 클릭하고 '매개 변수 이름 바꾸기'를 클릭하십시오. 그러면 새 이름을 입력 할 수있는 대화 상자가 열립니다. 매개 변수의 이름을 'matchedLocationPaths'로 변경하십시오.

    7.png


  5. '추가'를 다시 클릭하고 이번에는 '버튼'을 매개 변수 유형으로 선택하십시오.
  6. 새로 생성 된 버튼 바로 위에있는 공구 모양 아이콘을 클릭하고 '위젯 옵션 ...'을 선택하십시오. 이렇게하면 버튼 텍스트를 설명이 가능한 것으로 변경할 수있는 대화 상자가 열립니다 (예 : 'CollectGeometryLocations'). 이 대화 상자에는 버튼을 클릭 할 때 실행해야하는 Python 명령을 추가 할 수있는 Script 필드도 있습니다.
  7. 다음 Python 명령어를 복사하여 Script 필드에 붙여 넣습니다.

    collector = Widgets.CollectAndSelectInScenegraph('//*{hasattr("geometry")}', '/root/world/geo')
    # 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
    일치하는 위치 경로를 노드의 matchedLocationPaths 사용자 매개 변수에 저장하려면 다음 명령을 스크립트에 추가하십시오.

    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 () 함수는, 예를 들어 사용자가 사설의 Arg 같은 루아 스크립트에서 사용하기에 액세스 할 수 있도록 다음 OpScript 노드의 사용자 매개 변수로서 설정 될 수있다 위치 경로의 목록을 반환한다.

5.PNG

더 읽기

CEL 구문에 대한 자세한 내용 은 Katana 개발자 가이드 CEL 참조 섹션을 참조 하십시오.

OpScript 노드의 Lua 스크립트에서 Python 스크립트에 설정된 것과 같은 사용자 op 인수에 액세스하는 방법에 대한 자세한 내용은 Cook Interface (OpScript) 의 Katana 개발자 안내서를 참조하십시오 .

이 문제가 발생하면 지원 티켓을 열고 지금까지 문제 및 해결 방법에 대해 알려주십시오.

지원 티켓을 여는 방법에 대한 자세한 내용은 ' 지원 포털 사용 '문서를 참조하십시오.

도움이 되었습니까?
/

We're sorry to hear that!

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

댓글