# {py:mod}`simvx.core.collision` ```{py:module} simvx.core.collision ``` ```{autodoc2-docstring} simvx.core.collision :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`CollisionShape ` - ```{autodoc2-docstring} simvx.core.collision.CollisionShape :summary: ``` * - {py:obj}`SphereShape ` - ```{autodoc2-docstring} simvx.core.collision.SphereShape :summary: ``` * - {py:obj}`BoxShape ` - ```{autodoc2-docstring} simvx.core.collision.BoxShape :summary: ``` * - {py:obj}`ConvexShape ` - ```{autodoc2-docstring} simvx.core.collision.ConvexShape :summary: ``` * - {py:obj}`CapsuleShape ` - ```{autodoc2-docstring} simvx.core.collision.CapsuleShape :summary: ``` * - {py:obj}`SpatialHashGrid ` - ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid :summary: ``` * - {py:obj}`RayHit ` - ```{autodoc2-docstring} simvx.core.collision.RayHit :summary: ``` * - {py:obj}`ShapeCastResult ` - ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult :summary: ``` * - {py:obj}`CollisionWorld ` - ```{autodoc2-docstring} simvx.core.collision.CollisionWorld :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.collision.__all__ :summary: ``` ```` ### API ````{py:data} __all__ :canonical: simvx.core.collision.__all__ :value: > ['CollisionShape', 'SphereShape', 'BoxShape', 'ConvexShape', 'CapsuleShape', 'SpatialHashGrid', 'Ray... ```{autodoc2-docstring} simvx.core.collision.__all__ ``` ```` `````{py:class} CollisionShape :canonical: simvx.core.collision.CollisionShape ```{autodoc2-docstring} simvx.core.collision.CollisionShape ``` ````{py:method} get_aabb(position: numpy.ndarray) -> tuple[numpy.ndarray, numpy.ndarray] :canonical: simvx.core.collision.CollisionShape.get_aabb :abstractmethod: ```{autodoc2-docstring} simvx.core.collision.CollisionShape.get_aabb ``` ```` ````{py:method} support(position: numpy.ndarray, direction: numpy.ndarray) -> numpy.ndarray :canonical: simvx.core.collision.CollisionShape.support :abstractmethod: ```{autodoc2-docstring} simvx.core.collision.CollisionShape.support ``` ```` ````` `````{py:class} SphereShape(radius: float = 1.0) :canonical: simvx.core.collision.SphereShape Bases: {py:obj}`simvx.core.collision.CollisionShape` ```{autodoc2-docstring} simvx.core.collision.SphereShape ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.collision.SphereShape.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.collision.SphereShape.__slots__ :value: > ('radius',) ```{autodoc2-docstring} simvx.core.collision.SphereShape.__slots__ ``` ```` ````{py:method} get_aabb(position: numpy.ndarray) -> tuple[numpy.ndarray, numpy.ndarray] :canonical: simvx.core.collision.SphereShape.get_aabb ```{autodoc2-docstring} simvx.core.collision.SphereShape.get_aabb ``` ```` ````{py:method} support(position: numpy.ndarray, direction: numpy.ndarray) -> numpy.ndarray :canonical: simvx.core.collision.SphereShape.support ```{autodoc2-docstring} simvx.core.collision.SphereShape.support ``` ```` ````` `````{py:class} BoxShape(half_extents: tuple[float, float, float] = (0.5, 0.5, 0.5)) :canonical: simvx.core.collision.BoxShape Bases: {py:obj}`simvx.core.collision.CollisionShape` ```{autodoc2-docstring} simvx.core.collision.BoxShape ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.collision.BoxShape.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.collision.BoxShape.__slots__ :value: > ('half_extents',) ```{autodoc2-docstring} simvx.core.collision.BoxShape.__slots__ ``` ```` ````{py:method} get_aabb(position: numpy.ndarray) -> tuple[numpy.ndarray, numpy.ndarray] :canonical: simvx.core.collision.BoxShape.get_aabb ```{autodoc2-docstring} simvx.core.collision.BoxShape.get_aabb ``` ```` ````{py:method} support(position: numpy.ndarray, direction: numpy.ndarray) -> numpy.ndarray :canonical: simvx.core.collision.BoxShape.support ```{autodoc2-docstring} simvx.core.collision.BoxShape.support ``` ```` ````` `````{py:class} ConvexShape(vertices: numpy.ndarray) :canonical: simvx.core.collision.ConvexShape Bases: {py:obj}`simvx.core.collision.CollisionShape` ```{autodoc2-docstring} simvx.core.collision.ConvexShape ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.collision.ConvexShape.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.collision.ConvexShape.__slots__ :value: > ('vertices',) ```{autodoc2-docstring} simvx.core.collision.ConvexShape.__slots__ ``` ```` ````{py:method} get_aabb(position: numpy.ndarray) -> tuple[numpy.ndarray, numpy.ndarray] :canonical: simvx.core.collision.ConvexShape.get_aabb ```{autodoc2-docstring} simvx.core.collision.ConvexShape.get_aabb ``` ```` ````{py:method} support(position: numpy.ndarray, direction: numpy.ndarray) -> numpy.ndarray :canonical: simvx.core.collision.ConvexShape.support ```{autodoc2-docstring} simvx.core.collision.ConvexShape.support ``` ```` ````` `````{py:class} CapsuleShape(radius: float = 0.5, height: float = 2.0) :canonical: simvx.core.collision.CapsuleShape Bases: {py:obj}`simvx.core.collision.CollisionShape` ```{autodoc2-docstring} simvx.core.collision.CapsuleShape ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.collision.CapsuleShape.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.collision.CapsuleShape.__slots__ :value: > ('radius', 'height') ```{autodoc2-docstring} simvx.core.collision.CapsuleShape.__slots__ ``` ```` ````{py:method} get_aabb(position: numpy.ndarray) -> tuple[numpy.ndarray, numpy.ndarray] :canonical: simvx.core.collision.CapsuleShape.get_aabb ```{autodoc2-docstring} simvx.core.collision.CapsuleShape.get_aabb ``` ```` ````{py:method} support(position: numpy.ndarray, direction: numpy.ndarray) -> numpy.ndarray :canonical: simvx.core.collision.CapsuleShape.support ```{autodoc2-docstring} simvx.core.collision.CapsuleShape.support ``` ```` ````` `````{py:class} SpatialHashGrid(cell_size: float = 2.0) :canonical: simvx.core.collision.SpatialHashGrid ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.collision.SpatialHashGrid.__slots__ :value: > ('cell_size', '_inv_cell', '_grid') ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid.__slots__ ``` ```` ````{py:method} insert(body_id: int, aabb_min: numpy.ndarray, aabb_max: numpy.ndarray) -> None :canonical: simvx.core.collision.SpatialHashGrid.insert ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid.insert ``` ```` ````{py:method} query(aabb_min: numpy.ndarray, aabb_max: numpy.ndarray) -> set[int] :canonical: simvx.core.collision.SpatialHashGrid.query ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid.query ``` ```` ````{py:method} clear() -> None :canonical: simvx.core.collision.SpatialHashGrid.clear ```{autodoc2-docstring} simvx.core.collision.SpatialHashGrid.clear ``` ```` ````` `````{py:class} RayHit :canonical: simvx.core.collision.RayHit ```{autodoc2-docstring} simvx.core.collision.RayHit ``` ````{py:attribute} body :canonical: simvx.core.collision.RayHit.body :type: typing.Any :value: > None ```{autodoc2-docstring} simvx.core.collision.RayHit.body ``` ```` ````{py:attribute} point :canonical: simvx.core.collision.RayHit.point :type: numpy.ndarray :value: > None ```{autodoc2-docstring} simvx.core.collision.RayHit.point ``` ```` ````{py:attribute} distance :canonical: simvx.core.collision.RayHit.distance :type: float :value: > None ```{autodoc2-docstring} simvx.core.collision.RayHit.distance ``` ```` ````` `````{py:class} ShapeCastResult :canonical: simvx.core.collision.ShapeCastResult ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult ``` ````{py:attribute} body :canonical: simvx.core.collision.ShapeCastResult.body :type: typing.Any :value: > None ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult.body ``` ```` ````{py:attribute} point :canonical: simvx.core.collision.ShapeCastResult.point :type: numpy.ndarray :value: > None ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.collision.ShapeCastResult.normal :type: numpy.ndarray :value: > None ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult.normal ``` ```` ````{py:attribute} distance :canonical: simvx.core.collision.ShapeCastResult.distance :type: float :value: > None ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult.distance ``` ```` ````{py:attribute} fraction :canonical: simvx.core.collision.ShapeCastResult.fraction :type: float :value: > None ```{autodoc2-docstring} simvx.core.collision.ShapeCastResult.fraction ``` ```` ````` `````{py:class} CollisionWorld(use_spatial_hash: bool = False, cell_size: float = 2.0) :canonical: simvx.core.collision.CollisionWorld ```{autodoc2-docstring} simvx.core.collision.CollisionWorld ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.__init__ ``` ````{py:method} add_body(body: typing.Any, shape: simvx.core.collision.CollisionShape, position: numpy.ndarray | None = None, layer: int = 1, mask: int = 1) -> None :canonical: simvx.core.collision.CollisionWorld.add_body ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.add_body ``` ```` ````{py:method} remove_body(body: typing.Any) -> None :canonical: simvx.core.collision.CollisionWorld.remove_body ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.remove_body ``` ```` ````{py:method} update_position(body: typing.Any, position: numpy.ndarray) -> None :canonical: simvx.core.collision.CollisionWorld.update_position ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.update_position ``` ```` ````{py:method} rebuild_spatial_hash() -> None :canonical: simvx.core.collision.CollisionWorld.rebuild_spatial_hash ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.rebuild_spatial_hash ``` ```` ````{py:method} query_overlaps(body: typing.Any) -> list[typing.Any] :canonical: simvx.core.collision.CollisionWorld.query_overlaps ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.query_overlaps ``` ```` ````{py:method} test_overlap(body_a: typing.Any, body_b: typing.Any) -> bool :canonical: simvx.core.collision.CollisionWorld.test_overlap ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.test_overlap ``` ```` ````{py:method} raycast(origin: numpy.ndarray, direction: numpy.ndarray, max_dist: float = 1000.0, layer_mask: int = 4294967295) -> list[simvx.core.collision.RayHit] :canonical: simvx.core.collision.CollisionWorld.raycast ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.raycast ``` ```` ````{py:method} shape_cast(shape: simvx.core.collision.CollisionShape, from_pos: numpy.ndarray, to_pos: numpy.ndarray, layer_mask: int = 4294967295, exclude: set | None = None, max_results: int = 32) -> list[simvx.core.collision.ShapeCastResult] :canonical: simvx.core.collision.CollisionWorld.shape_cast ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.shape_cast ``` ```` ````{py:property} body_count :canonical: simvx.core.collision.CollisionWorld.body_count :type: int ```{autodoc2-docstring} simvx.core.collision.CollisionWorld.body_count ``` ```` `````