36 using DataPoint =
typename Traits::DataPoint;
37 using IndexType =
typename Traits::IndexType;
38 using Scalar =
typename DataPoint::Scalar;
39 using VectorType =
typename DataPoint::VectorType;
52 return QueryType::template
operator()<
Self>(index, radius);
72 inline void initialize(Iterator& iterator)
75 m_flag.insert(QueryType::input());
77 PONCA_DEBUG_ASSERT(
m_stack.empty());
78 m_stack.push(QueryType::input());
80 iterator.m_index = -1;
83 inline void advance(Iterator& iterator)
85 const auto& points = m_graph->m_kdTreePoints;
86 const auto& point = points[QueryType::input()].pos();
88 if (!(iterator !=
end()))
97 int idx_current =
m_stack.top();
100 PONCA_DEBUG_ASSERT((point - points[idx_current].pos()).squaredNorm() < QueryType::squaredRadius());
102 iterator.m_index = idx_current;
104 for (
int idx_nei : m_graph->kNearestNeighbors(idx_current))
106 PONCA_DEBUG_ASSERT(idx_nei >= 0);
107 Scalar d = (point - points[idx_nei].pos()).squaredNorm();
108 Scalar th = QueryType::descentDistanceThreshold();
109 if ((point - points[idx_nei].pos()).squaredNorm() < QueryType::descentDistanceThreshold() &&
110 m_flag.insert(idx_nei).second)
115 if (iterator.m_index == QueryType::input())
121 const KnnGraphBase<Traits>* m_graph{
nullptr};