Extension: omni.kit.manipulator.transform-106.0.1 |
Documentation Generated: Dec 17, 2024 |
Usage Examples#
Transform Manipulator Usage Example#
import omni.kit.app
import omni.ui as ui
from omni.kit.manipulator.transform import (
TransformManipulator,
Axis,
SimpleRotateChangedGesture,
SimpleScaleChangedGesture,
SimpleTranslateChangedGesture,
)
from omni.ui import scene as sc
# Initialize a simple manipulator example with predefined projection and view matrices
projection = [
0.011730205278592375, 0.0, 0.0, 0.0, 0.0, 0.02055498458376156, 0.0, 0.0,
0.0, 0.0, 2.00000020000002e-07, 0.0, -0.0, -0.0, 1.00000020000002, 1.0
]
view = [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -2.2368736267089844, 13.669827461242786, -5.0, 1.0]
# Create a window and a scene with a TransformManipulator
window = ui.Window("Simple Manipulator Example")
class Select(sc.ClickGesture):
"""A gesture class for handling selection in a scene."""
def __init__(self, example):
super().__init__()
self._example = example
def on_ended(self):
self._example.on_point_clicked(self.sender)
class SimpleManipulatorExample:
def __init__(self):
with window.frame:
scene_view = sc.SceneView(projection=projection, view=view)
with scene_view.scene:
# Instantiate the TransformManipulator with gestures for translation, rotation, and scaling
self._manipulator = TransformManipulator(
size=1,
axes=Axis.ALL & ~Axis.Z & ~Axis.SCREEN,
enabled=False,
gestures=[
SimpleTranslateChangedGesture(),
SimpleRotateChangedGesture(),
SimpleScaleChangedGesture(),
],
)
# Placeholder for selected shape
self._selected_shape = None
# Subscribe to manipulator model item changes
self._sub = self._manipulator.model.subscribe_item_changed_fn(self._on_item_changed)
# Create points in the scene and attach a selection gesture to each
points = [
([0, 0, 0], ui.color.white),
([50, 0, 0], ui.color.white),
([50, -50, 0], ui.color.white),
([0, -50, 0], ui.color.white)
]
for position, color in points:
sc.Points(positions=[position], colors=[color], sizes=[10], gestures=[Select(self)])
def on_point_clicked(self, shape):
self._selected_shape = shape
self._manipulator.enabled = True
model = self._manipulator.model
model.set_floats(
model.get_item("translate"),
[
self._selected_shape.positions[0][0],
self._selected_shape.positions[0][1],
self._selected_shape.positions[0][2],
],
)
def _on_item_changed(self, model, item):
if self._selected_shape is not None:
if item.operation == Operation.TRANSLATE:
self._selected_shape.positions = model.get_as_floats(item)
# Create an instance to show the manipulator
example = SimpleManipulatorExample()
# Display the window
window.visible = True