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