15 std::set<MVertex *> vtcs;
20 index =
new ANNidx[1];
21 dist =
new ANNdist[1];
22 vCoord = annAllocPts(
nbVtcs, 3);
24 auto vIter = vtcs.begin();
25 for(; vIter != vtcs.end(); ++vIter, ++k) {
27 vCoord[k][0] = mv->
x();
28 vCoord[k][1] = mv->
y();
29 vCoord[k][2] = mv->
z();
32 kdtree =
new ANNkd_tree(vCoord,
nbVtcs, 3);
36 "Gmsh must be compiled with ANN support for finding closest nodes");
45 annDeallocPts(vCoord);
56 if(
nbVtcs == 0)
return nullptr;
57 double xyz[3] = {p.
x(), p.
y(), p.
z()};
58 kdtree->annkSearch(xyz, 1, index, dist);
59 return vertex[index[0]];
66 const std::vector<double> &tfo)
69 if(
nbVtcs == 0)
return nullptr;
70 double ori[4] = {p.
x(), p.
y(), p.
z(), 1};
71 double xyz[4] = {0, 0, 0, 0};
72 if(tfo.size() == 16) {
74 for(
int i = 0; i < 4; i++)
75 for(
int j = 0; j < 4; j++) xyz[i] += tfo[idx++] * ori[j];
78 std::memcpy(xyz, ori, 3 *
sizeof(
double));
79 kdtree->annkSearch(xyz, 1, index, dist);
80 return vertex[index[0]];