Extension: omni.kit.viewport.menubar.camera-107.0.2

Documentation Generated: Nov 07, 2024

Usage Examples

Register Custom Widgets to Camera Button and Menu Item

from typing import Optional
import weakref
from omni.kit.viewport.menubar.camera import AbstractCameraButtonDelegate, AbstractCameraMenuItemDelegate
from omni import ui
from pxr import Sdf


class MyButtonDelegate(AbstractCameraButtonDelegate):
    def build_widget(self, parent_id: int, viewport_api: "ViewportAPI", camera_path: Sdf.Path) -> Optional[ui.Widget]:
        widget = ui.HStack()
        with widget:
            ui.Spacer(width=4)
            ui.Label("Custom", style={"color": 0xFFFF00FF})
        return widget

    def on_parent_destroyed(self, parent_id: int) -> None:
        return

    def on_camera_path_changed(self, parent_id: int, camera_path: Sdf.Path):
        return

class MyItemDelegate(AbstractCameraMenuItemDelegate):
    def build_widget(self, parent_id: int, viewport_api: "ViewportAPI", camera_path: Sdf.Path) -> Optional[ui.Widget]:
        widget = ui.HStack()
        with widget:
            ui.Spacer(width=4)
            ui.Label("Custom", style={"color": 0xFF0000FF})
        return widget

    def on_parent_destroyed(self, parent_id: int) -> None:
        return

    def on_camera_path_changed(self, parent_id: int, camera_path: Sdf.Path):
        return

# Define delegates before camera menu bar display
button_delegate = MyButtonDelegate()
item_delegate = MyItemDelegate()

# Clean delegates if not use anymore
# button_delegate.destroy()
# item_delegate.destroy()

Register Custom Menu Item

from omni import ui

def __create_first(viewport_context, root):
    ui.MenuItem("This is first custom menu item")

def __create_second(viewport_context, root):
    ui.MenuItem("This is second custom menu item")

# Get the viewport camera menu bar extension instance
extension = get_instance()

# Register new enu items
extension.register_menu_item(__create_second, order=20)
extension.register_menu_item(__create_first, order=10)

# Deregister menu items if not use anymore
# extension.deregister_menu_item(__create_first)
# extension.deregister_menu_item(__create_second)

Register Custom Menu Item Type

from omni.kit.viewport.menubar.camera import get_instance, SingleCameraMenuItemBase

# Define a custom menu item type
def custom_single_camera_menu_item(*args, **kwargs):
    class CustomSingleCameraMenuItem(SingleCameraMenuItemBase):
        def _option_clicked(self):
            # Do something when clicking the option icon on the right of this menu item
            return

    return CustomSingleCameraMenuItem(*args, **kwargs)

# Get the viewport camera menu bar extension instance
extension = get_instance()

# Register the custom menu item type
extension.register_menu_item_type(custom_single_camera_menu_item)