WEMRayIntersect

MLModule

author

MeVis Medical Solutions AG

package

MeVisLab/Standard

dll

MLWEMAcceleration

definition

MLWEMAcceleration.def

keywords

BVH, BoundingVolumeHierarchy

Purpose

The WEMRayIntersect allows for the intersection of a ray with WEM triangle patches. It utilizes a bounding volume hierarchy (BVH) internally to ensure fast intersection. The information of the first hit point is provided as field values, while a list of all hit points is available as a marker list.

The precision of the ray intersection is limited to float precision, as the underlying Embree library does not support double precision.

Access to the BVH wrapper is also possible via the outBVH field using:

bvh = ctx.field("outBVH").object()
result = bvh.rayIntersectClosest([30., 0., 0.], [-1., 0., 0.])

Another alternative is to avoid using the WEMRayIntersect module entirely and instead create the BVH in Python:

wem = ctx.field("SomeWEMModule.outWEM").object()
bvh = MLAB.createMLBaseObject("WEMBoundingVolumeHierarchy", [wem])
result = bvh.rayIntersectClosest([30., 0., 0.], [-1., 0., 0.])

This allows for performing ray intersection directly from Python code.

For more details on scripting, have a look at the MLWEMBoundingVolumeHierarchyWrapper.

Output Fields

outBVH

name: outBVH, type: WEMBoundingVolumeHierarchy(MLBase)

For accessing this object via scripting, see the Scripting Reference: MLWEMBoundingVolumeHierarchyWrapper.

Parameter Fields

Field Index

Cast Ray: Trigger

Intersect Mode: Enum

Direction: Vector3

Position: Vector3

Hit Bary Coord: Vector3

Ray Far: Float

Hit Face Index: Integer

Ray Near: Float

Hit Face Normal: Vector3

Ready: Bool

Hit Patch Index: Integer

Update: Trigger

Hit Position: Vector3

Hit Valid: Bool

Visible Fields

Intersect Mode

name: intersectMode, type: Enum, default: RemoveDuplicateHits

Defines the intersection mode.

Values:

Title

Name

Description

​All Hits

​AllHits

​This collects all hits; it can contain duplicate hits on neighboring triangle edges or nodes.

​Remove Duplicate Hits

​RemoveDuplicateHits

​This removes duplicate hits by checking whether the hits are close to each other within a certain epsilon and if they face the same direction relative to the ray direction.

Update

name: update, type: Trigger

When pressed, the BVH from the input WEM is updated.

Ready

name: ready, type: Bool, persistent: no

Shows whether the module is ready for ray intersections.

Position

name: position, type: Vector3, default: 0 0 0

Sets the origin of the ray.

Direction

name: direction, type: Vector3, default: 0 0 0

Sets the start direction of the ray. This should be normalized.

Ray Near

name: rayNear, type: Float, default: 0

Sets the near distance for the ray.

The intersection starts from position + direction * rayNear.

Ray Far

name: rayFar, type: Float, default: 3.4028235e+38

Sets the far distance for the ray.

The intersection stops at position + direction * rayFar.

Cast Ray

name: castRay, type: Trigger

When pressed, a ray is cast.

Hit Valid

name: hitValid, type: Bool, persistent: no

Shows whether the hit is valid.

Hit Position

name: hitPosition, type: Vector3, persistent: no

Shows the hit position of the closest triangle.

Hit Face Normal

name: hitFaceNormal, type: Vector3, persistent: no

Shows the face normal of the hit triangle.

Hit Bary Coord

name: hitBaryCoord, type: Vector3, persistent: no

Shows the barycentric coordinate of the hit triangle.

Hit Face Index

name: hitFaceIndex, type: Integer, persistent: no

Shows the face index of the hit triangle.

Hit Patch Index

name: hitPatchIndex, type: Integer, persistent: no

Shows the WEM patch index of the hit triangle.