It’s similar to the ur10_scenarios/bin_stack.py
self._physx_query_interface = omni.physx.get_physx_scene_query_interface()
hit = self._physx_query_interface.raycast_closest(origin, rayDir, 100.0)
but with overlap test numHits = get_physx_scene_query_interface().overlap_box(extent, origin, rot, self.report_hit, False)
We’ll add these tips to the docs.
import carb
from omni.physx.scripts.physicsUtils import *
from pxr import UsdGeom, Gf, Vt
import omni.physxdemos as demo
from omni.physx import get_physx_scene_query_interface
from omni.debugdraw import _debugDraw
from .SceneQueryBaseDemo import *
class OverlapBoxDemo(demo.Base):
title = “Overlap box”
category = demo.Categories.SAMPLES
short_description = “Demo showing overlap box usage”
description = “Demo showing overlap usage. Overlap on a camera position, if it hits a box it turns red. Press play (space) to run the simulation.”
def create(self, stage):
self._stage = stage
self.defaultPrimPath = str(stage.GetDefaultPrim().GetPath())
createSceneQueryBase(stage)
self._debugDraw = _debugDraw.acquire_debug_draw_interface()
def report_hit(self, hit):
hitColor = Vt.Vec3fArray([Gf.Vec3f(180.0 / 255.0, 16.0 / 255.0, 0.0)])
usdGeom = UsdGeom.Mesh.Get(self._stage, hit.rigid_body)
usdGeom.GetDisplayColorAttr().Set(hitColor)
return True
def draw_box(self, origin, extent):
color = 4283782485
minimum = carb.Float3(origin[0] - extent[0], origin[1] - extent[1], origin[2] - extent[2])
maximum = carb.Float3(origin[0] + extent[0], origin[1] + extent[1], origin[2] + extent[2])
self._debugDraw.draw_line(carb.Float3(minimum[0], minimum[1], minimum[2]),color, carb.Float3(maximum[0], minimum[1], minimum[2]), color)
self._debugDraw.draw_line(carb.Float3(maximum[0], minimum[1], minimum[2]),color, carb.Float3(maximum[0], maximum[1], minimum[2]), color)
self._debugDraw.draw_line(carb.Float3(maximum[0], maximum[1], minimum[2]),color, carb.Float3(minimum[0], maximum[1], minimum[2]), color)
self._debugDraw.draw_line(carb.Float3(minimum[0], maximum[1], minimum[2]),color, carb.Float3(minimum[0], minimum[1], minimum[2]), color)
self._debugDraw.draw_line(carb.Float3(minimum[0], minimum[1], minimum[2]),color, carb.Float3(minimum[0], minimum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(minimum[0], minimum[1], maximum[2]),color, carb.Float3(maximum[0], minimum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(maximum[0], minimum[1], maximum[2]),color, carb.Float3(maximum[0], maximum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(maximum[0], maximum[1], maximum[2]),color, carb.Float3(minimum[0], maximum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(minimum[0], maximum[1], maximum[2]),color, carb.Float3(minimum[0], minimum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(maximum[0], minimum[1], minimum[2]),color, carb.Float3(maximum[0], minimum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(maximum[0], maximum[1], minimum[2]),color, carb.Float3(maximum[0], maximum[1], maximum[2]), color)
self._debugDraw.draw_line(carb.Float3(minimum[0], maximum[1], minimum[2]),color, carb.Float3(minimum[0], maximum[1], maximum[2]), color)
def update(self, stage, dt, viewport, physxIFace):
self._stage = stage
viewport_window = viewport.get_viewport_window()
activeCamera = viewport_window.get_active_camera()
cameraPos = viewport_window.get_camera_position(activeCamera)
cameraForward = viewport_window.get_camera_forward(activeCamera)
if cameraPos[0]:
origColor = Vt.Vec3fArray([Gf.Vec3f(71.0 / 255.0, 165.0 / 255.0, 1.0)])
usdGeom = UsdGeom.Mesh.Get(stage, self.defaultPrimPath + "/boxActor0")
usdGeom.GetDisplayColorAttr().Set(origColor)
usdGeom = UsdGeom.Mesh.Get(stage, self.defaultPrimPath + "/boxActor1")
usdGeom.GetDisplayColorAttr().Set(origColor)
usdGeom = UsdGeom.Mesh.Get(stage, self.defaultPrimPath + "/boxActor2")
usdGeom.GetDisplayColorAttr().Set(origColor)
origin = carb.Float3(cameraPos[1], cameraPos[2], cameraPos[3])
forwardDir = carb.Float3(cameraForward[1], cameraForward[2], cameraForward[3])
origin[0] = origin[0] + forwardDir[0] * 800.0
origin[1] = origin[1] + forwardDir[1] * 800.0
origin[2] = origin[2] + forwardDir[2] * 800.0
rot = carb.Float4(0.0, 0.0, 0.0, 1.0)
extent = carb.Float3(100.0, 100.0, 100.0)
self.draw_box(origin, extent)
numHits = get_physx_scene_query_interface().overlap_box(extent, origin, rot, self.report_hit, False)