97 lines
2.7 KiB
C
97 lines
2.7 KiB
C
![]() |
// ----------------------------------------------------------------------------
|
||
|
// - Open3D: www.open3d.org -
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Copyright (c) 2018-2023 www.open3d.org
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
namespace open3d {
|
||
|
namespace geometry {
|
||
|
|
||
|
/// \class KDTreeSearchParam
|
||
|
///
|
||
|
/// \brief Base class for KDTree search parameters.
|
||
|
class KDTreeSearchParam {
|
||
|
public:
|
||
|
/// \enum SearchType
|
||
|
///
|
||
|
/// \brief Specifies the search type for the search.
|
||
|
enum class SearchType {
|
||
|
Knn = 0,
|
||
|
Radius = 1,
|
||
|
Hybrid = 2,
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
virtual ~KDTreeSearchParam() {}
|
||
|
|
||
|
protected:
|
||
|
KDTreeSearchParam(SearchType type) : search_type_(type) {}
|
||
|
|
||
|
public:
|
||
|
/// Get the search type (KNN, Radius, Hybrid) for the search parameter.
|
||
|
SearchType GetSearchType() const { return search_type_; }
|
||
|
|
||
|
private:
|
||
|
SearchType search_type_;
|
||
|
};
|
||
|
|
||
|
/// \class KDTreeSearchParamKNN
|
||
|
///
|
||
|
/// \brief KDTree search parameters for pure KNN search.
|
||
|
class KDTreeSearchParamKNN : public KDTreeSearchParam {
|
||
|
public:
|
||
|
/// \brief Default Constructor.
|
||
|
///
|
||
|
/// \param knn Specifies the knn neighbors that will searched. Default
|
||
|
/// is 30.
|
||
|
KDTreeSearchParamKNN(int knn = 30)
|
||
|
: KDTreeSearchParam(SearchType::Knn), knn_(knn) {}
|
||
|
|
||
|
public:
|
||
|
/// Number of the neighbors that will be searched.
|
||
|
int knn_;
|
||
|
};
|
||
|
|
||
|
/// \class KDTreeSearchParamRadius
|
||
|
///
|
||
|
/// \brief KDTree search parameters for pure radius search.
|
||
|
class KDTreeSearchParamRadius : public KDTreeSearchParam {
|
||
|
public:
|
||
|
/// \brief Default Constructor.
|
||
|
///
|
||
|
/// \param radius Specifies the radius of the search.
|
||
|
KDTreeSearchParamRadius(double radius)
|
||
|
: KDTreeSearchParam(SearchType::Radius), radius_(radius) {}
|
||
|
|
||
|
public:
|
||
|
/// Search radius.
|
||
|
double radius_;
|
||
|
};
|
||
|
|
||
|
/// \class KDTreeSearchParamHybrid
|
||
|
///
|
||
|
/// \brief KDTree search parameters for hybrid KNN and radius search.
|
||
|
class KDTreeSearchParamHybrid : public KDTreeSearchParam {
|
||
|
public:
|
||
|
/// \brief Default Constructor.
|
||
|
///
|
||
|
/// \param radius Specifies the radius of the search.
|
||
|
/// \param max_nn Specifies the max neighbors to be searched.
|
||
|
KDTreeSearchParamHybrid(double radius, int max_nn)
|
||
|
: KDTreeSearchParam(SearchType::Hybrid),
|
||
|
radius_(radius),
|
||
|
max_nn_(max_nn) {}
|
||
|
|
||
|
public:
|
||
|
/// Search radius.
|
||
|
double radius_;
|
||
|
/// At maximum, max_nn neighbors will be searched.
|
||
|
int max_nn_;
|
||
|
};
|
||
|
|
||
|
} // namespace geometry
|
||
|
} // namespace open3d
|