A tool for evaluating multiple NURBS curve/surface points using the GPU.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

53 lines
1.7 KiB

#ifndef NURBSPERFORMER_LOOP_DETECTION_CUH
#define NURBSPERFORMER_LOOP_DETECTION_CUH
#include "device/srf_mesh.cuh"
#include "map"
#include "set"
#include <cuda_runtime.h>
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::pair<int, int>, std::set<std::pair<int, int>>>
&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