コンテンツにスキップ

Templateの作成

起動直後

HelloWorldをenableの状態でIsaac SIMを起動すると、UIBuilderクラスの'init()'が呼び出されます。

最小構成のTemplate

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import numpy as np
import omni.timeline
import omni.ui as ui
from omni.isaac.ui.element_wrappers import CollapsableFrame, DropDown, FloatField, TextBlock
from omni.isaac.ui.ui_utils import get_style
from omni.isaac.ui.element_wrappers import Button
import omni.usd

class UIBuilder:
    def __init__(self):
        """enableの状態だとIsaac SIMが起動した際に1度呼び出される
        """
        # フレームは、複数のUI要素を含むことができるサブウィンドウです
        self.frames = []

        # UI要素は、omni.isaac.ui.element_wrappers の UIElementWrapper を使用して作成されます
        self.wrapped_ui_elements = []

        # タイムラインにアクセスして、プログラム上で停止/一時停止/再生を制御します
        self._timeline = omni.timeline.get_timeline_interface()

        # __on_init()を呼び出し
        self._on_init()

    def on_menu_callback(self):
        """ツールバーからUIが開かれたときに呼び出されるコールバック。 

        これは、build_ui()の直後に呼び出されます。
        """
        print("on_menu_callback")

    def on_timeline_event(self, event):
        """タイムラインイベント(再生、停止、一時停止)のコールバック

        Args: 
             event (omni.timeline.TimelineEventType): イベントの種類
        """
        #print("on_timeline_event")
        pass

    def on_physics_step(self, step):
        """物理ステップのコールバック。
        物理ステップは、タイムラインが再生されているときにのみ発生します

        Args:
            step (float): 物理ステップのサイズ
        """
        #print("on_physics_step")
        pass

    def on_stage_event(self, event):
        """ステージイベントのコールバック

        Args:
            event (omni.usd.StageEventType): イベントタイプ
        """
        if event.type == int(omni.usd.StageEventType.HIERARCHY_CHANGED):
            print("Hierarchy changed")
        elif event.type == int(omni.usd.StageEventType.SIMULATION_START_PLAY):
            print("Physx Simulation starts playing")
        elif event.type == int(omni.usd.StageEventType.OMNIGRAPH_START_PLAY):
            print("OmniGraph is starting to play")
        elif event.type == int(omni.usd.StageEventType.ANIMATION_START_PLAY):
            print("Timeline starts playing")
        elif event.type == int(omni.usd.StageEventType.ASSETS_LOADING):
            print("Assets are loading")
        elif event.type == int(omni.usd.StageEventType.ASSETS_LOADED):
            print("Assets loaded successfully")
        elif event.type == int(omni.usd.StageEventType.SIMULATION_STOP_PLAY):
            print("Physx Simulation stopped")
        elif event.type == int(omni.usd.StageEventType.OMNIGRAPH_STOP_PLAY):
            print("OmniGraph stopped playing")
        elif event.type == int(omni.usd.StageEventType.ANIMATION_STOP_PLAY):
            print("Timeline stopped")
        else:
            print(f"Unknown stage event: {event.type}, event name: {event.type}")

        pass

    def cleanup(self):
        """
        ステージが閉じられたときや拡張機能がホットリロードされたときに呼び出されます。 
        必要なクリーンアップ処理を行い、アクティブなコールバック関数を削除します。 
        omni.isaac.ui.element_wrappersからインポートされたボタンは、
        クリーンアップ関数を実装しているので、それを呼び出す必要があります。
        """
        print("cleanup")
        for ui_elem in self.wrapped_ui_elements:
            ui_elem.cleanup()

    def build_ui(self):
        """
        カスタムUIツールを構築して、拡張機能を実行します。 
        この関数は、UIウィンドウが閉じて再度開かれるたびに呼び出されます。
        """
        print("build_ui")

        # ボタンUIの作成
        test_map = CollapsableFrame("Test Controls", collapsed=False)

        with test_map:
            with ui.VStack(style=get_style(), spacing=5, height=0):
                with ui.VStack():
                    road_button = Button(
                        "Test button",
                        "TEST",
                        on_click_fn=self._on_test_clicked,
                    )

                self.wrapped_ui_elements.extend([road_button])

    def _on_test_clicked(self):
        """
        ボタンが押されたら呼ばれる
        """
        print("TEST")

    def _on_init(self):
        print("_on_init")

on_stage_eventで取得できるevent

https://docs.omniverse.nvidia.com/kit/docs/omni.usd/latest/omni.usd/omni.usd.StageEventType.html を参照