지원 티켓 만들기
팔로우

Q100291 : OpScript에서 CEL 문 수집

개요

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

이는 OpScript 노드에서 스크립트 버튼의 Python 스크립트를 실행하고 결과 장면 그래프 위치 경로를 사용자 매개 변수에 캐싱하여 OpScript 노드의 Lua 스크립트 자체에서 사용할 수 있도록합니다.

이를 통해 사용자 는 편리 할 때 수집 작업 을 수행 할 수 있으며 OpScript 노드가 쿠킹 될 때마다 CEL 문을 전체 장면 그래프와 일치시킬 필요없이 캐시 된 결과에 대해 OpScript Lua 스크립트 작업을 수행 할 수 있습니다.

이러한 스크립트를 설정하는 방법과 이유에 대한 정보는 계속 읽으십시오.

추가 정보

사용자는 OpScript 노드의 Lua 스크립트 내에서 수집 작업 결과를 사용하여 결과 위치 경로를 장면 그래프 속성 아래에 저장하거나 Lua 스크립트에서 작동 할 수 있도록 할 수 있습니다.

바람직하지 않은 접근법

OpScript 내에서 CEL 문을 평가 한 결과를 수집하는 것은 바람직하지 않습니다. 위치가 주어진 CEL 문과 일치하는지 여부를 판별하기 위해 업스트림 레시피가 수정 될 때마다 장면의 일부 (일부는 아님)를 요리해야하기 때문에 바람직하지 않습니다. .

큰 장면 그래프가있는 장면에서 작업 할 때 계산 비용이 많이 들고 시간이 오래 걸릴 수 있습니다. 이는 대화식 환경에서 바람직하지 않으며 Katana의 지연된 평가 모델과 상충됩니다.

권장 접근법

CEL 문 평가 결과를 수집하려면 한 번 실행되는 사용자 트리거 스크립트를 사용하는 것이 더 좋습니다. 이 스크립트는 일회성 쿡에서 장면을 탐색하고 노드 매개 변수를 채우는 데 사용할 수있는 정보를 수집합니다.

관련 위치가 변경 될 경우 프로젝트를 최신 상태로 유지하려면이 과정을 반복해야합니다.

CEL 문과 일치하는 기존 위치 세트를 검색하려면 CEL 수집 조작을 사용하십시오. 스크립트 버튼을 통해 실행되는 스크립트 에서 위젯 모듈의 일부인 CollectAndSelectInScenegraph () 함수를 사용할 수 있습니다 .

 

EXAMPLE SCENE

In the attached example scene you can see an implementation of this strategy. The scene is using t he L-system from the 'Generating Geometry in OpScript' example project. You can inspect the script in the CollectAndSet OpScript node by clicking on the wrench icon at the top of the Parameters tab > ‘Edit User Parameters’, then clicking on the wrench icon above the CollectGeometryLocations button > ‘Widget Options…’.

 Capture.PNG

3.PNG

4.PNG

The user parameters on the CollectAndSelect OpScript node were set up following these steps:

  1. Create an OpScript node and press to open its parameters in the Parameters tab.
  2. Click on the wrench icon at the top of the Parameters tab > ‘Edit User Parameters’. This adds a new group parameter to the node, named user .

    6.png

  3. Click ‘Add’ to add parameters to the user group parameter and choose ‘String Array’ as the parameter type. This will be the parameter where we will store the matched location paths.

    6.png

  4. Click the wrench icon directly above the new parameter and click ‘Rename Parameter’. This will open a dialog where you can enter a new name. Rename the parameter to ‘matchedLocationPaths’

    7.png


  5. Click ‘Add’ again and this time choose ‘Button’ as the parameter type.
  6. Click the wrench icon directly above the newly created Button, and choose ‘Widget Options…’. This will open a dialog where you can change the button text to something descriptive, for example ‘CollectGeometryLocations’. The dialog also provides a Script field where you can add the Python commands that should be executed when the button is clicked.
  7. Copy and paste the following Python commands into the Script field:

    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
    To store the matched location paths in the node’s matchedLocationPaths user parameter, add the following commands to the script:

    param.parseXmlIO(element)

Running the script by clicking the button will open a modal dialog while the scene is being traversed and locations are cooked, giving you the option to cancel the operation.

The collectAndSelect() function will return a list of location paths that can then be set as a user parameter on an OpScript node so that it is accessible for use in the Lua script as a user Op Arg, for example.

5.PNG 

FURTHER READING

For more information on the CEL syntax,  please see the CEL Reference section of the Katana Developer Guide.

For more details on accessing user op args, like the one set in the Python script, in an OpScript node’s Lua script, please see  the Katana Developer Guide on the Cook Interface (OpScript) .

If you are encountering any issues with this, then please open a Support ticket and let us know about the problem and which troubleshooting steps you have taken so far.

For more information on how to open a Support ticket, please refer to Q100064: How to raise a support ticket .

도움이 되었습니까?

우리는 문제로 불편을 끼쳐 드려 죄송합니다

이유를 알려주세요
8명 중 8명이 도움이 되었다고 했습니다.