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 | 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
from pxr import Gf
from omni.physx.scripts import physicsUtils
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): イベントタイプ
"""
print(f"event type: {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の作成
object_map = CollapsableFrame("Object Controls", collapsed=False)
with object_map:
with ui.VStack(style=get_style(), spacing=5, height=0):
with ui.VStack():
grandplate_button = Button(
"Ground plane",
"SET",
on_click_fn=self._on_set_groudplane,
)
self.wrapped_ui_elements.extend([grandplate_button])
def _on_set_groudplane(self):
"""
ボタンが押されたら呼ばれる
"""
# シーンを読み込む
usd_file_path = "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/4.1/Isaac/Environments/Simple_Room/simple_room.usd"
omni.usd.get_context().open_stage(usd_file_path)
print("USDシーンがロードされました")
def _on_init(self):
print("_on_init")
|