#ifndef NURBSPERFORMER_LOOP_DETECTION_CUH #define NURBSPERFORMER_LOOP_DETECTION_CUH #include "device/srf_mesh.cuh" #include "map" #include "set" #include class LoopDetection { public: SrfMesh *d_s_srfMesh; SrfMesh *d_f_srfMesh; float s_paramRegionSize_u; float s_paramRegionSize_v; int edgeSampleCnt; glm::vec<2, int> *d_selectedPointsIdx; glm::vec2 *d_vectorFields; int *d_rotationNumbers; LoopDetection(glm::vec3 *d_s_eval, glm::vec3 *d_f_eval, glm::vec3 *d_s_tan_u, glm::vec3 *d_f_tan_u, glm::vec3 *d_s_tan_v, glm::vec3 *d_f_tan_v, glm::vec3 *d_s_norm, glm::vec3 *d_f_norm, int edgeSampleCnt, float s_paramRegionSize_u, float s_paramRegionSize_v); // LoopDetection(SrfMesh *h_s_srfMesh, SrfMesh *h_f_srfMesh, int // edgeSampleCnt, float s_paramRegionSize_u, // float s_paramRegionSize_v); __host__ void h_initOrientedDisAndVecFields( const std::map, std::set>> &intersectBoxPairs); __host__ void h_getRotationNumber(); ~LoopDetection(); }; __global__ void g_initOrientedDisAndVecFields( SrfMesh *s_srfMesh, SrfMesh *f_srfMesh, int s_cellCnt, glm::vec<2, int> *s_cells, glm::vec<2, int> **f_cells, const int *f_cellCnt, glm::vec<2, int> *selectedPointsIdx, glm::vec2 *vectorFields); __global__ void g_getRotationNumber(SrfMesh *s_srfMesh, float paramRegionSize_u, float paramRegionSize_v, glm::vec2 *vectorFields, int *rotationNumbers); #endif // NURBSPERFORMER_LOOP_DETECTION_CUH