Loading...
Searching...
No Matches
PointParallelHashGridSearcher.hpp
Go to the documentation of this file.
1// This code is based on Jet framework.
2// Copyright (c) 2018 Doyub Kim
3// CubbyFlow is voxel-based fluid simulation engine for computer games.
4// Copyright (c) 2020 CubbyFlow Team
5// Core Part: Chris Ohk, Junwoo Hwang, Jihong Sin, Seungwoo Yoo
6// AI Part: Dongheon Cho, Minseo Kim
7// We are making my contributions/submissions to this project solely in our
8// personal capacity and are not conveying any rights to any intellectual
9// property of any third parties.
10
11#ifndef CUBBYFLOW_POINT_PARALLEL_HASH_GRID_SEARCHER_HPP
12#define CUBBYFLOW_POINT_PARALLEL_HASH_GRID_SEARCHER_HPP
13
16
17namespace CubbyFlow
18{
26template <size_t N>
28{
29 public:
31
32 class Builder;
33
36
48 double gridSpacing);
49
51 ~PointParallelHashGridSearcher() override = default;
52
55
59
63
67
75 void Build(const ConstArrayView1<Vector<double, N>>& points) override;
76
87 double maxSearchRadius) override;
88
98 const Vector<double, N>& origin, double radius,
99 const ForEachNearbyPointFunc& callback) const override;
100
111 double radius) const override;
112
122
147
172
184
191 [[nodiscard]] std::shared_ptr<PointNeighborSearcher<N>> Clone()
192 const override;
193
196
198 void Serialize(std::vector<uint8_t>* buffer) const override;
199
201 void Deserialize(const std::vector<uint8_t>& buffer) override;
202
205
206 private:
208
209 template <size_t M = N>
210 static std::enable_if_t<M == 2, void> Serialize(
212 std::vector<uint8_t>* buffer);
213
214 template <size_t M = N>
215 static std::enable_if_t<M == 3, void> Serialize(
217 std::vector<uint8_t>* buffer);
218
219 template <size_t M = N>
220 static std::enable_if_t<M == 2, void> Deserialize(
221 const std::vector<uint8_t>& buffer,
223
224 template <size_t M = N>
225 static std::enable_if_t<M == 3, void> Deserialize(
226 const std::vector<uint8_t>& buffer,
228
229 double m_gridSpacing = 1.0;
231 Array1<Vector<double, N>> m_points;
232 Array1<size_t> m_keys;
233 Array1<size_t> m_startIndexTable;
234 Array1<size_t> m_endIndexTable;
235 Array1<size_t> m_sortedIndices;
236};
237
240
243
246 std::shared_ptr<PointParallelHashGridSearcher2>;
247
250 std::shared_ptr<PointParallelHashGridSearcher3>;
251
256template <size_t N>
259{
260 public:
262 Builder() = default;
263
265 ~Builder() override = default;
266
268 Builder(const Builder& other) = delete;
269
271 Builder(Builder&& other) noexcept = delete;
272
274 Builder& operator=(const Builder& other) = delete;
275
277 Builder& operator=(Builder&& other) noexcept = delete;
278
281
284
287
289 std::shared_ptr<PointParallelHashGridSearcher<N>> MakeShared() const;
290
292 std::shared_ptr<PointNeighborSearcher<N>> BuildPointNeighborSearcher()
293 const override;
294
295 private:
297 double m_gridSpacing = 1.0;
298};
299} // namespace CubbyFlow
300
301#endif
#define CUBBYFLOW_NEIGHBOR_SEARCHER_TYPE_NAME(DerivedClassName, N)
Definition PointNeighborSearcher.hpp:163
Generic N-dimensional array class interface.
Definition ArrayView.hpp:26
static std::enable_if_t< IsMatrixSizeStatic< Rows, Cols >(), D > MakeConstant(ValueType val)
Makes a static matrix with constant entries.
Definition MatrixDenseBase-Impl.hpp:152
Definition Matrix.hpp:30
Abstract base class for N-D point neighbor searcher builders.
Definition PointNeighborSearcher.hpp:120
Abstract base class for N-D neighbor point searcher.
Definition PointNeighborSearcher.hpp:33
std::function< void(size_t, const Vector< double, N > &)> ForEachNearbyPointFunc
Definition PointNeighborSearcher.hpp:38
Front-end to create PointParallelHashGridSearcher objects step by step.
Definition PointParallelHashGridSearcher.hpp:259
Builder & WithResolution(const Vector< size_t, N > &resolution)
Returns builder with resolution.
std::shared_ptr< PointParallelHashGridSearcher< N > > MakeShared() const
Builds shared pointer of PointParallelHashGridSearcher instance.
PointParallelHashGridSearcher< N > Build() const
Builds PointParallelHashGridSearcher instance.
std::shared_ptr< PointNeighborSearcher< N > > BuildPointNeighborSearcher() const override
Returns shared pointer of PointNeighborSearcher type.
Builder & operator=(Builder &&other) noexcept=delete
Deleted move assignment operator.
Builder & WithGridSpacing(double gridSpacing)
Returns builder with grid spacing.
~Builder() override=default
Default virtual destructor.
Builder & operator=(const Builder &other)=delete
Deleted copy assignment operator.
Builder(Builder &&other) noexcept=delete
Deleted move constructor.
Builder(const Builder &other)=delete
Deleted copy constructor.
Parallel version of hash grid-based N-D point searcher.
Definition PointParallelHashGridSearcher.hpp:28
void Serialize(std::vector< uint8_t > *buffer) const override
Serializes the neighbor searcher into the buffer.
bool HasNearbyPoint(const Vector< double, N > &origin, double radius) const override
~PointParallelHashGridSearcher() override=default
Default virtual destructor.
static Builder GetBuilder()
Returns builder fox PointParallelHashGridSearcher.
PointParallelHashGridSearcher & operator=(PointParallelHashGridSearcher &&other) noexcept
Move assignment operator.
void ForEachNearbyPoint(const Vector< double, N > &origin, double radius, const ForEachNearbyPointFunc &callback) const override
friend class PointParallelHashGridSearcherTests
Definition PointParallelHashGridSearcher.hpp:207
void Build(const ConstArrayView1< Vector< double, N > > &points, double maxSearchRadius) override
Builds internal acceleration structure for given points list and max search radius.
PointParallelHashGridSearcher(const Vector< size_t, N > &resolution, double gridSpacing)
Constructs hash grid with given resolution and grid spacing.
std::shared_ptr< PointNeighborSearcher< N > > Clone() const override
Creates a new instance of the object with same properties than original.
PointParallelHashGridSearcher(PointParallelHashGridSearcher &&other) noexcept
Move constructor.
void Deserialize(const std::vector< uint8_t > &buffer) override
Deserializes the neighbor searcher from the buffer.
ConstArrayView1< size_t > StartIndexTable() const
Returns the start index table.
ConstArrayView1< size_t > Keys() const
Returns the hash key list.
void Build(const ConstArrayView1< Vector< double, N > > &points) override
Builds internal acceleration structure for given points list.
PointParallelHashGridSearcher(const PointParallelHashGridSearcher &other)
Copy constructor.
ConstArrayView1< size_t > EndIndexTable() const
Returns the end index table.
PointParallelHashGridSearcher & operator=(const PointParallelHashGridSearcher &other)
Copy assignment operator.
void Set(const PointParallelHashGridSearcher &other)
Copy from the other instance.
ConstArrayView1< size_t > SortedIndices() const
Returns the sorted indices of the points.
Definition pybind11Utils.hpp:21
Matrix< T, Rows, 1 > Vector
Definition Matrix.hpp:738
std::shared_ptr< PointParallelHashGridSearcher2 > PointParallelHashGridSearcher2Ptr
Shared pointer for the PointParallelHashGridSearcher2 type.
Definition PointParallelHashGridSearcher.hpp:246
std::shared_ptr< PointParallelHashGridSearcher3 > PointParallelHashGridSearcher3Ptr
Shared pointer for the PointParallelHashGridSearcher3 type.
Definition PointParallelHashGridSearcher.hpp:250