1cimport cython
2cimport cython.floating
3
4import numpy as np
5
6cimport numpy as np
7from vec3_ops cimport cross, dot, subtract
8
9
10cdef struct Ray:
11    np.float64_t origin[3]
12    np.float64_t direction[3]
13    np.float64_t inv_dir[3]
14    np.float64_t data_val
15    np.float64_t t_near
16    np.float64_t t_far
17    np.int64_t elem_id
18    np.int64_t near_boundary
19
20cdef struct BBox:
21    np.float64_t left_edge[3]
22    np.float64_t right_edge[3]
23
24cdef struct RayHitData:
25    np.float64_t u
26    np.float64_t v
27    np.float64_t t
28    np.int64_t converged
29
30cdef struct Triangle:
31    np.float64_t p0[3]
32    np.float64_t p1[3]
33    np.float64_t p2[3]
34    np.int64_t elem_id
35
36cdef np.int64_t ray_bbox_intersect(Ray* ray, const BBox bbox) nogil
37
38cdef np.int64_t ray_triangle_intersect(const void* primitives,
39                                       const np.int64_t item,
40                                       Ray* ray) nogil
41
42cdef void triangle_centroid(const void *primitives,
43                            const np.int64_t item,
44                            np.float64_t[3] centroid) nogil
45
46cdef void triangle_bbox(const void *primitives,
47                        const np.int64_t item,
48                        BBox* bbox) nogil
49
50cdef struct Patch:
51    np.float64_t[8][3] v  # 8 vertices per patch
52    np.int64_t elem_id
53
54cdef void patchSurfaceFunc(const cython.floating[8][3] verts,
55                           const cython.floating u,
56                           const cython.floating v,
57                           cython.floating[3] S) nogil
58
59cdef void patchSurfaceDerivU(const cython.floating[8][3] verts,
60                             const cython.floating u,
61                             const cython.floating v,
62                             cython.floating[3] Su) nogil
63
64cdef void patchSurfaceDerivV(const cython.floating[8][3] verts,
65                             const cython.floating u,
66                             const cython.floating v,
67                             cython.floating[3] Sv) nogil
68
69cdef RayHitData compute_patch_hit(cython.floating[8][3] verts,
70                                  cython.floating[3] ray_origin,
71                                  cython.floating[3] ray_direction) nogil
72
73cdef np.int64_t ray_patch_intersect(const void* primitives,
74                                    const np.int64_t item,
75                                    Ray* ray) nogil
76
77cdef void patch_centroid(const void *primitives,
78                         const np.int64_t item,
79                         np.float64_t[3] centroid) nogil
80
81cdef void patch_bbox(const void *primitives,
82                     const np.int64_t item,
83                     BBox* bbox) nogil
84
85cdef struct TetPatch:
86    np.float64_t[6][3] v # 6 vertices per patch
87    np.int64_t elem_id
88
89cdef RayHitData compute_tet_patch_hit(cython.floating[6][3] verts,
90                                  cython.floating[3] ray_origin,
91                                  cython.floating[3] ray_direction) nogil
92
93cdef void tet_patchSurfaceFunc(const cython.floating[6][3] verts,
94                           const cython.floating u,
95                           const cython.floating v,
96                           cython.floating[3] S) nogil
97
98cdef void tet_patchSurfaceDerivU(const cython.floating[6][3] verts,
99                             const cython.floating u,
100                             const cython.floating v,
101                             cython.floating[3] Su) nogil
102
103cdef void tet_patchSurfaceDerivV(const cython.floating[6][3] verts,
104                             const cython.floating u,
105                             const cython.floating v,
106                             cython.floating[3] Sv) nogil
107
108cdef np.int64_t ray_tet_patch_intersect(const void* primitives,
109                                    const np.int64_t item,
110                                    Ray* ray) nogil
111
112cdef void tet_patch_centroid(const void *primitives,
113                         const np.int64_t item,
114                         np.float64_t[3] centroid) nogil
115
116cdef void tet_patch_bbox(const void *primitives,
117                     const np.int64_t item,
118                     BBox* bbox) nogil
119