14#include <lagrange/Mesh.h>
15#include <lagrange/legacy/inline.h>
16#include <lagrange/raycasting/EmbreeRayCaster.h>
32enum RayCasterQuality {
38template <
typename Scalar>
39std::unique_ptr<EmbreeRayCaster<Scalar>> create_ray_caster(
41 RayCasterQuality quality = BUILD_QUALITY_LOW)
43 if (engine & 0b1111) {
45 int flags =
static_cast<int>(RTC_SCENE_FLAG_NONE);
46 if (engine & EMBREE_DYNAMIC) {
47 flags |=
static_cast<int>(RTC_SCENE_FLAG_DYNAMIC);
49 if (engine & EMBREE_ROBUST) {
50 flags |=
static_cast<int>(RTC_SCENE_FLAG_ROBUST);
52 if (engine & EMBREE_COMPACT) {
53 flags |=
static_cast<int>(RTC_SCENE_FLAG_COMPACT);
57 RTCBuildQuality build = RTC_BUILD_QUALITY_LOW;
59 case BUILD_QUALITY_LOW: build = RTC_BUILD_QUALITY_LOW;
break;
60 case BUILD_QUALITY_MEDIUM: build = RTC_BUILD_QUALITY_MEDIUM;
break;
61 case BUILD_QUALITY_HIGH: build = RTC_BUILD_QUALITY_HIGH;
break;
65 return std::make_unique<EmbreeRayCaster<Scalar>>(
static_cast<RTCSceneFlags
>(flags), build);
67 std::stringstream err_msg;
68 err_msg <<
"Unknown ray caster engine: " << engine;
69 throw std::runtime_error(err_msg.str());
Raycasting operations.
Definition ClosestPointResult.h:22
Main namespace for Lagrange.