23class [[nodiscard]] DistanceMap :
public RectIndexer
26 DistanceMap() =
default;
30 [[nodiscard]]
MRMESH_API DistanceMap(
size_t resX,
size_t resY );
36 static constexpr float NOT_VALID_VALUE = std::numeric_limits<float>::lowest();
39 [[nodiscard]]
MRMESH_API bool isValid(
size_t x,
size_t y )
const;
41 [[nodiscard]]
MRMESH_API bool isValid(
size_t i )
const;
44 [[nodiscard]]
bool isInBounds(
size_t x,
size_t y )
const {
return x < size_t( dims_.x ) && y < size_t( dims_.y ); }
46 [[nodiscard]]
bool isInBounds(
size_t i )
const {
return i < size_; }
49 [[nodiscard]]
MRMESH_API std::optional<float>
get(
size_t x,
size_t y )
const;
51 [[nodiscard]]
MRMESH_API std::optional<float>
get(
size_t i )
const;
54 [[nodiscard]]
float&
getValue(
size_t x,
size_t y )
56 return data_[toIndex( { int( x ), int( y ) } )];
58 [[nodiscard]]
float getValue(
size_t x,
size_t y )
const
60 return data_[toIndex( { int( x ), int( y ) } )];
62 [[nodiscard]]
float&
getValue(
size_t i )
66 [[nodiscard]]
float getValue(
size_t i )
const
71 float* data() {
return data_.data(); }
72 const float* data()
const {
return data_.data(); }
83 [[nodiscard]]
MRMESH_API std::optional<float> getInterpolated(
float x,
float y )
const;
88 [[nodiscard]]
MRMESH_API std::optional<Vector3f> unproject(
size_t x,
size_t y,
const AffineXf3f& toWorld )
const;
98 [[nodiscard]]
MRMESH_API std::optional<Vector3f> unprojectInterpolated(
float x,
float y,
const AffineXf3f& toWorld )
const;
105 [[nodiscard]]
MRMESH_API DistanceMap
max(
const DistanceMap& rhs )
const;
107 MRMESH_API const DistanceMap& mergeMax(
const DistanceMap& rhs );
109 [[nodiscard]]
MRMESH_API DistanceMap
min(
const DistanceMap& rhs )
const;
111 MRMESH_API const DistanceMap& mergeMin(
const DistanceMap& rhs );
118 MRMESH_API void set(
size_t x,
size_t y,
float val );
122 MRMESH_API void set( std::vector<float> data );
134 [[nodiscard]]
MRMESH_API DistanceMap getDerivativeMap()
const;
136 [[nodiscard]]
MRMESH_API std::pair< DistanceMap, DistanceMap > getXYDerivativeMaps()
const;
139 [[nodiscard]]
MRMESH_API std::vector< std::pair<size_t, size_t> > getLocalMaximums()
const;
142 [[nodiscard]]
size_t resX()
const
147 [[nodiscard]]
size_t resY()
const
153 [[nodiscard]]
size_t numPoints()
const
160 [[nodiscard]]
MRMESH_API std::pair<float, float> getMinMaxValues()
const;
163 [[nodiscard]]
MRMESH_API std::pair<size_t, size_t> getMinIndex()
const;
166 [[nodiscard]]
MRMESH_API std::pair<size_t, size_t> getMaxIndex()
const;
175 std::vector<float> data_;
184 ProgressCallback cb = {}, std::vector<MeshTriPoint> * outSamples = nullptr );
189 ProgressCallback cb = {}, std::vector<MeshTriPoint> * outSamples = nullptr );
192struct [[nodiscard]] ContoursDistanceMapOffset
195 const Vector<float, UndirectedEdgeId>& perEdgeOffset;
196 enum class OffsetType
200 } type{ OffsetType::Shell };
203struct [[nodiscard]] ContoursDistanceMapOptions
206 enum SignedDetectionMethod
215 } signMethod{ ContourOrientation };
217 const ContoursDistanceMapOffset* offsetParameters{
nullptr };
219 const PixelBitSet* region{
nullptr };
221 std::vector<UndirectedEdgeId>* outClosestEdges{
nullptr };
225 float maxDist{ FLT_MAX };
260 const AffineXf3f& xf,
float isoValue,
bool useDepth =
false );
constexpr A operator-(A a)
Definition MRImGuiVectorOperators.h:98
constexpr A & operator-=(A &a, B b)
Definition MRImGuiVectorOperators.h:113
#define MRMESH_API
Definition MRMeshFwd.h:80
Definition MRDistanceMapParams.h:94
Definition MRDistanceMap.h:204
Definition MRDistanceMap.h:24
Definition MRDistanceMapParams.h:17
size_t heapBytes(const BitSet &bs)
returns the amount of memory given BitSet occupies on heap
Definition MRMesh/MRBitSet.h:298
constexpr const V & get(const Box< V > &box) noexcept
get<0> returns min, get<1> returns max
Definition MRMesh/MRBox.h:400
MRMESH_API std::vector< Vector3f > edgePointsFromContours(const Polyline2 &polyline, float pixelSize, float threshold)
MRMESH_API Expected< Mesh > distanceMapToMesh(const DistanceMap &distMap, const AffineXf3f &toWorld, ProgressCallback cb={})
converts distance map into mesh and applies a transformation to all points
MRMESH_API DistanceMap combineXYderivativeMaps(std::pair< DistanceMap, DistanceMap > XYderivativeMaps)
fill another distance map pair with gradients across X and Y axes of the argument map
MRMESH_API Polyline2 contourUnion(const Polyline2 &contoursA, const Polyline2 &contoursB, const ContourToDistanceMapParams ¶ms, float offsetInside=0)
computes the union of the shapes bounded by input 2d contours
MRMESH_API DistanceMap distanceMapFromContours(const Polyline2 &contours, const ContourToDistanceMapParams ¶ms, const ContoursDistanceMapOptions &options={})
Computes distance of 2d contours according ContourToDistanceMapParams.
MRMESH_API Polyline2 contourIntersection(const Polyline2 &contoursA, const Polyline2 &contoursB, const ContourToDistanceMapParams ¶ms, float offsetInside=0.f)
computes the intersection of the shapes bounded by input 2d contours
MRMESH_API DistanceMap computeDistanceMapD(const MeshPart &mp, const MeshToDistanceMapParams ¶ms, ProgressCallback cb={}, std::vector< MeshTriPoint > *outSamples=nullptr)
MRMESH_API Polyline2 distanceMapTo2DIsoPolyline(const DistanceMap &distMap, float isoValue)
MRMESH_API Polyline2 contourSubtract(const Polyline2 &contoursA, const Polyline2 &contoursB, const ContourToDistanceMapParams ¶ms, float offsetInside=0.f)
computes the difference between the shapes bounded by contoursA and the shapes bounded by contoursB
MRMESH_API Expected< DistanceMap > convertImageToDistanceMap(const Image &image, float threshold=1.f/255, bool invert=true)
MRMESH_API Image convertDistanceMapToImage(const DistanceMap &distMap, float threshold=1.f/255)
MRMESH_API Polyline2 polylineOffset(const Polyline2 &polyline, float pixelSize, float offset)
constructs an offset contour for given polyline
MRMESH_API DistanceMap computeDistanceMap(const MeshPart &mp, const MeshToDistanceMapParams ¶ms, ProgressCallback cb={}, std::vector< MeshTriPoint > *outSamples=nullptr)
constexpr auto max(A a, B b)
Definition MRImGuiVectorOperators.h:143
constexpr auto min(A a, B b)
Definition MRImGuiVectorOperators.h:141
Definition MRCameraOrientationPlugin.h:8
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:29
float getValue(FloatGrid grid, Vector3i p)
int heapBytes(FloatGrid grid)