-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGridMeshCuda.cuh
executable file
·59 lines (50 loc) · 2.12 KB
/
GridMeshCuda.cuh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//
// Created by agalex on 6/14/24.
//
#ifndef KNNCUDA_GRIDMESHCUDA_CUH
#define KNNCUDA_GRIDMESHCUDA_CUH
#include "KNNInterface.cuh"
#include "PLGMesh.h"
typedef long long long64;
class GridMeshCuda: public KNNInterface {
public:
//k maximum allowable neighbors
GridMeshCuda(const PLG::PLGMesh& mesh, int num_cards, float eps = 1e-6, int bucketCount = 1024);
void GetNeighborsFromTriangles(int k);
~GridMeshCuda();
float** GetRefPointsX() override {return dpoints_x.data();}
float** GetRefPointsY() override {return dpoints_y.data();}
float** GetRefPointsZ() override {return dpoints_z.data();}
int** GetKNNIndexesInPartitions() override {return dknn.data();}
[[nodiscard]] int GetPartitionSize() const override {return pointPartitionSize;}
int* GetPointCountInCards() override {return pointsCard.data();}
int** GetOriginalRefIndexes() override {return doriginal_indexes.data();}
void GetKNNIndexes(int* knnIndexes) override;
[[nodiscard]] float GetMaxExtent() const override {return maxExtent;}
[[nodiscard]] float GetMinExtent() const override {return minExtent;}
[[nodiscard]] bool isReady() const override{return dknn[0] != nullptr;};
[[nodiscard]] int pointsRefCount() const override {return pointsCount;};
[[nodiscard]] int NeighborCount() const override {return neighborCount;};
[[nodiscard]] int GetNumberOfCards() const override {return num_cards;};
private:
void InitStructure(const float *points_x, const float *points_y, const float *points_z, const PLG::I3* indexes);
template<typename T>
void getBuckets(int dev_id, int bucketsCount, float min, float max, int &maxBucketSize);
float eps;
int pointPartitionSize;
std::vector<float*> dpoints_x;
std::vector<float*> dpoints_y;
std::vector<float*> dpoints_z;
std::vector<uint32_t*> dtriangleIndexes;
std::vector<int*> doriginal_indexes;
std::vector<int*> dknn;
std::vector<int> pointsCard;
int neighborCount;
int num_cards;
float maxExtent;
float minExtent;
int pointsCount;
int trianglesCount;
int finalBucketCount;
};
#endif //KNNCUDA_GRIDMESHCUDA_CUH