Blender  V3.3
GEO_reverse_uv_sampler.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
5 #include <optional>
6 
7 #include "BLI_math_vector.hh"
8 #include "BLI_multi_value_map.hh"
9 #include "BLI_span.hh"
10 
11 #include "DNA_meshdata_types.h"
12 
13 namespace blender::geometry {
14 
21  private:
22  const Span<float2> uv_map_;
23  const Span<MLoopTri> looptris_;
24  int resolution_;
25  MultiValueMap<int2, int> looptris_by_cell_;
26 
27  public:
28  ReverseUVSampler(const Span<float2> uv_map, const Span<MLoopTri> looptris);
29 
30  enum class ResultType {
31  None,
32  Ok,
33  Multiple,
34  };
35 
36  struct Result {
38  const MLoopTri *looptri = nullptr;
40  };
41 
42  Result sample(const float2 &query_uv) const;
43  void sample_many(Span<float2> query_uvs, MutableSpan<Result> r_results) const;
44 };
45 
46 } // namespace blender::geometry
ReverseUVSampler(const Span< float2 > uv_map, const Span< MLoopTri > looptris)
Result sample(const float2 &query_uv) const
void sample_many(Span< float2 > query_uvs, MutableSpan< Result > r_results) const