MUDA
Loading...
Searching...
No Matches
predicator.h
1#pragma once
2#include <muda/ext/geo/lbvh/aabb.h>
3
4namespace muda::lbvh
5{
6template <typename Real>
8{
9 MUDA_GENERIC query_overlap(const AABB<Real>& tgt)
10 : target(tgt)
11 {
12 }
13
14 query_overlap() = default;
15 ~query_overlap() = default;
16 query_overlap(const query_overlap&) = default;
17 query_overlap(query_overlap&&) = default;
18 query_overlap& operator=(const query_overlap&) = default;
19 query_overlap& operator=(query_overlap&&) = default;
20
21 MUDA_GENERIC inline bool operator()(const AABB<Real>& box) noexcept
22 {
23 return intersects(box, target);
24 }
25
26 AABB<Real> target;
27};
28
29template <typename Real>
30MUDA_GENERIC query_overlap<Real> overlaps(const AABB<Real>& region) noexcept
31{
32 return query_overlap<Real>(region);
33}
34
35template <typename Real>
37{
38 // float4/double4
39 using vector_type = typename vector_of<Real>::type;
40
41 MUDA_GENERIC query_nearest(const vector_type& tgt)
42 : target(tgt)
43 {
44 }
45
46 query_nearest() = default;
47 ~query_nearest() = default;
48 query_nearest(const query_nearest&) = default;
49 query_nearest(query_nearest&&) = default;
50 query_nearest& operator=(const query_nearest&) = default;
51 query_nearest& operator=(query_nearest&&) = default;
52
53 vector_type target;
54};
55
56MUDA_GENERIC inline query_nearest<float> nearest(const float4& point) noexcept
57{
58 return query_nearest<float>(point);
59}
60MUDA_GENERIC inline query_nearest<float> nearest(const float3& point) noexcept
61{
62 return query_nearest<float>(make_float4(point.x, point.y, point.z, 0.0f));
63}
64MUDA_GENERIC inline query_nearest<double> nearest(const double4& point) noexcept
65{
66 return query_nearest<double>(point);
67}
68MUDA_GENERIC inline query_nearest<double> nearest(const double3& point) noexcept
69{
70 return query_nearest<double>(make_double4(point.x, point.y, point.z, 0.0));
71}
72
73} // namespace muda::lbvh
Definition aabb.h:11
Definition predicator.h:37
Definition predicator.h:8
Definition utility.h:9