19 py::class_<geometry::KDTreeSearchParam> kdtreesearchparam(
20 m,
"KDTreeSearchParam",
"Base class for KDTree search parameters.");
21 kdtreesearchparam.def(
"get_search_type",
23 "Get the search type (KNN, Radius, Hybrid) for the "
28 py::native_enum<KDTreeSearchParam::SearchType>(
29 kdtreesearchparam,
"Type",
"enum.Enum",
30 "Enum class for Geometry types.")
38 py::class_<geometry::KDTreeSearchParamKNN> kdtreesearchparam_knn(
39 m,
"KDTreeSearchParamKNN", kdtreesearchparam,
40 "KDTree search parameters for pure KNN search.");
41 kdtreesearchparam_knn.def(py::init<int>(),
"knn"_a = 30)
45 "geometry::KDTreeSearchParamKNN with knn "
50 "Number of the neighbors that will be searched.");
53 py::class_<geometry::KDTreeSearchParamRadius> kdtreesearchparam_radius(
54 m,
"KDTreeSearchParamRadius", kdtreesearchparam,
55 "KDTree search parameters for pure radius search.");
56 kdtreesearchparam_radius.def(py::init<double>(),
"radius"_a)
60 "geometry::KDTreeSearchParamRadius with "
64 .def_readwrite(
"radius",
69 py::class_<geometry::KDTreeSearchParamHybrid> kdtreesearchparam_hybrid(
70 m,
"KDTreeSearchParamHybrid", kdtreesearchparam,
71 "KDTree search parameters for hybrid KNN and radius search.");
72 kdtreesearchparam_hybrid
73 .def(py::init<double, int>(),
"radius"_a,
"max_nn"_a)
77 "geometry::KDTreeSearchParamHybrid with "
82 .def_readwrite(
"radius",
87 "At maximum, ``max_nn`` neighbors will be searched.");
90 static const std::unordered_map<std::string, std::string>
91 map_kd_tree_flann_method_docs = {
92 {
"query",
"The input query point."},
93 {
"radius",
"Search radius."},
95 "At maximum, ``max_nn`` neighbors will be searched."},
96 {
"knn",
"``knn`` neighbors will be searched."},
97 {
"feature",
"Feature data."},
98 {
"data",
"Matrix data."}};
99 py::class_<KDTreeFlann, std::shared_ptr<KDTreeFlann>> kdtreeflann(
100 m,
"KDTreeFlann",
"KDTree with FLANN for nearest neighbor search.");
101 kdtreeflann.def(py::init<>())
102 .def(py::init<const Eigen::MatrixXd &>(),
"data"_a)
104 "Sets the data for the KDTree from a matrix.",
"data"_a)
105 .def(py::init<const ccHObject &>(),
"geometry"_a)
107 "Sets the data for the KDTree from geometry.",
"geometry"_a)
108 .def(py::init<const utility::Feature &>(),
"feature"_a)
110 "Sets the data for the KDTree from the feature data.",
132 const Eigen::Vector3d &query,
134 std::vector<int> indices;
135 std::vector<double> distance2;
136 int k = tree.
Search(query, param, indices, distance2);
138 throw std::runtime_error(
139 "search_vector_3d() error!");
140 return std::make_tuple(k, indices, distance2);
142 "query"_a,
"search_param"_a)
146 const std::vector<Eigen::Vector3d> &queries,
148 std::vector<std::vector<int>> indices;
149 std::vector<std::vector<double>> distance2;
150 int k = tree.
Query(queries, param, indices, distance2);
152 throw std::runtime_error(
153 "search_vector_3d() error!");
154 return std::make_tuple(k, indices, distance2);
156 "queries"_a,
"search_param"_a)
158 "search_knn_vector_3d",
160 const Eigen::Vector3d &query,
int knn) {
161 std::vector<int> indices;
162 std::vector<double> distance2;
163 int k = tree.
SearchKNN(query, knn, indices, distance2);
165 throw std::runtime_error(
166 "search_knn_vector_3d() error!");
167 return std::make_tuple(k, indices, distance2);
171 "search_radius_vector_3d",
173 const Eigen::Vector3d &query,
double radius) {
174 std::vector<int> indices;
175 std::vector<double> distance2;
179 throw std::runtime_error(
180 "search_radius_vector_3d() error!");
181 return std::make_tuple(k, indices, distance2);
183 "query"_a,
"radius"_a)
185 "search_hybrid_vector_3d",
187 const Eigen::Vector3d &query,
double radius,
189 std::vector<int> indices;
190 std::vector<double> distance2;
194 throw std::runtime_error(
195 "search_hybrid_vector_3d() error!");
196 return std::make_tuple(k, indices, distance2);
198 "query"_a,
"radius"_a,
"max_nn"_a)
202 const Eigen::VectorXd &query,
204 std::vector<int> indices;
205 std::vector<double> distance2;
206 int k = tree.
Search(query, param, indices, distance2);
208 throw std::runtime_error(
209 "search_vector_xd() error!");
210 return std::make_tuple(k, indices, distance2);
212 "query"_a,
"search_param"_a)
217 const std::vector<Eigen::VectorXd> &queries,
219 std::vector<std::vector<int>> indices;
220 std::vector<std::vector<double>> distance2;
221 int k = tree.
Query(queries, param, indices, distance2);
223 throw std::runtime_error(
224 "query_vector_xd() error!");
225 return std::make_tuple(k, indices, distance2);
227 "queries"_a,
"search_param"_a)
229 "search_knn_vector_xd",
231 const Eigen::VectorXd &query,
int knn) {
232 std::vector<int> indices;
233 std::vector<double> distance2;
234 int k = tree.
SearchKNN(query, knn, indices, distance2);
236 throw std::runtime_error(
237 "search_knn_vector_xd() error!");
238 return std::make_tuple(k, indices, distance2);
242 "search_radius_vector_xd",
244 const Eigen::VectorXd &query,
double radius) {
245 std::vector<int> indices;
246 std::vector<double> distance2;
250 throw std::runtime_error(
251 "search_radius_vector_xd() error!");
252 return std::make_tuple(k, indices, distance2);
254 "query"_a,
"radius"_a)
256 "search_hybrid_vector_xd",
258 const Eigen::VectorXd &query,
double radius,
260 std::vector<int> indices;
261 std::vector<double> distance2;
265 throw std::runtime_error(
266 "search_hybrid_vector_xd() error!");
267 return std::make_tuple(k, indices, distance2);
269 "query"_a,
"radius"_a,
"max_nn"_a);
271 map_kd_tree_flann_method_docs);
273 map_kd_tree_flann_method_docs);
275 map_kd_tree_flann_method_docs);
277 map_kd_tree_flann_method_docs);
279 map_kd_tree_flann_method_docs);
281 map_kd_tree_flann_method_docs);
283 map_kd_tree_flann_method_docs);
285 map_kd_tree_flann_method_docs);
287 map_kd_tree_flann_method_docs);
289 map_kd_tree_flann_method_docs);
291 map_kd_tree_flann_method_docs);
KDTree with FLANN for nearest neighbor search.
int SearchRadius(const T &query, double radius, std::vector< int > &indices, std::vector< double > &distance2) const
bool SetMatrixData(const Eigen::MatrixXd &data)
bool SetFeature(const utility::Feature &feature)
int SearchKNN(const T &query, int knn, std::vector< int > &indices, std::vector< double > &distance2) const
int SearchHybrid(const T &query, double radius, int max_nn, std::vector< int > &indices, std::vector< double > &distance2) const
int Query(const std::vector< T > &queries, const KDTreeSearchParam ¶m, std::vector< std::vector< int >> &indices, std::vector< std::vector< double >> &distance2) const
int Search(const T &query, const KDTreeSearchParam ¶m, std::vector< int > &indices, std::vector< double > &distance2) const
bool SetGeometry(const ccHObject &geometry)
KDTree search parameters for hybrid KNN and radius search.
int max_nn_
At maximum, max_nn neighbors will be searched.
double radius_
Search radius.
KDTree search parameters for pure KNN search.
int knn_
Number of the neighbors that will be searched.
KDTree search parameters for pure radius search.
double radius_
Search radius.
Base class for KDTree search parameters.
SearchType GetSearchType() const
Get the search type (KNN, Radius, Hybrid) for the search parameter.
void ClassMethodDocInject(py::module &pybind_module, const std::string &class_name, const std::string &function_name, const std::unordered_map< std::string, std::string > &map_parameter_body_docs)
void pybind_kdtreeflann(py::module &m)
Generic file read and write utility for python interface.
std::string to_string(const T &n)