59 const NavMap & nm,
bool from_boundary,
60 float max_distance = std::numeric_limits<float>::infinity());
63 void compute(
const std::vector<NavCelId> & seed_cells);
69 void update(
const std::vector<NavCelId> & added,
const std::vector<NavCelId> & removed);
71 const std::vector<float> &
distances()
const {
return dist_;}
75 const std::vector<NavCelId> &
changed()
const {
return changed_;}
78 bool is_seed(
NavCelId cid)
const {
return cid < seed_of_.size() && seed_of_[cid] != kNoSeed;}
81 static constexpr std::uint32_t kNoSeed = std::numeric_limits<std::uint32_t>::max();
89 float distance_to(
NavCelId c, std::uint32_t seed)
const;
91 void begin_operation();
94 void flood(std::uint32_t seed, F && f);
95 void splat(std::uint32_t seed);
96 std::uint32_t new_point_seed(
NavCelId c);
97 static std::int64_t bucket_key(
int bx,
int by,
int bz);
98 void index_seed(std::uint32_t seed,
bool insert);
104 std::unordered_map<std::int64_t, std::vector<std::uint32_t>> buckets_;
105 std::vector<Eigen::Vector3f> centroid_;
106 std::vector<Seed> seeds_;
107 std::size_t n_boundary_{0};
108 std::vector<std::uint32_t> boundary_start_;
109 std::vector<std::uint32_t> seed_of_;
110 std::vector<std::uint32_t> nearest_;
111 std::vector<float> dist_;
112 std::vector<std::uint32_t> free_seed_slots_;
114 std::vector<NavCelId> touched_;
115 std::vector<float> before_;
116 std::vector<std::uint32_t> touched_stamp_;
117 std::uint32_t stamp_{0};
118 std::vector<NavCelId> changed_;
120 std::vector<NavCelId> flood_;
121 std::vector<std::uint32_t> flood_stamp_;
122 std::uint32_t flood_id_{0};
void update(const std::vector< NavCelId > &added, const std::vector< NavCelId > &removed)
Incremental update: NavCels that became seeds and NavCels that stopped being seeds since the last com...
Definition DistanceField.cpp:223
DistanceField(const NavMap &nm, bool from_boundary, float max_distance=std::numeric_limits< float >::infinity())
Definition DistanceField.cpp:34
void compute(const std::vector< NavCelId > &seed_cells)
Full computation from these seed cells.
Definition DistanceField.cpp:185
const std::vector< NavCelId > & changed() const
NavCels whose distance changed in the last compute() / update().
Definition DistanceField.hpp:75