MeshLib C++ Docs
Loading...
Searching...
No Matches
MRPolylineProject.h
Go to the documentation of this file.
1#pragma once
2#include "MRId.h"
3#include "MRVector3.h"
4#include <cfloat>
5#include <functional>
6
7namespace MR
8{
9
12
13template<typename V>
15{
17 UndirectedEdgeId line;
18
21
23 float distSq = 0;
24
26 [[nodiscard]] bool valid() const { return line.valid(); }
27 [[nodiscard]] explicit operator bool() const { return line.valid(); }
28};
29
36MRMESH_API PolylineProjectionResult2 findProjectionOnPolyline2( const Vector2f& pt, const Polyline2& polyline,
37 float upDistLimitSq = FLT_MAX, AffineXf2f* xf = nullptr, float loDistLimitSq = 0 );
38
45MRMESH_API PolylineProjectionResult3 findProjectionOnPolyline( const Vector3f& pt, const Polyline3& polyline,
46 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
47
54MRMESH_API PolylineProjectionResult3 findProjectionOnPolyline( const Line3f& ln, const Polyline3& polyline,
55 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
56
57template<typename V>
59{
61 UndirectedEdgeId line;
65 float dist = 0;
66};
67
76 const Vector<float, UndirectedEdgeId>& offsetPerEdge, float upDistLimit = FLT_MAX, AffineXf2f* xf = nullptr, float loDistLimit = 0 );
77
85MRMESH_API PolylineProjectionWithOffsetResult3 findProjectionOnPolylineWithOffset( const Vector3f& pt, const Polyline3& polyline,
86 const Vector<float, UndirectedEdgeId>& offsetPerEdge, float upDistLimit = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimit = 0 );
87
88template<typename V>
89using FoundEdgeCallback = std::function<void( UndirectedEdgeId, const V& closestPt, float distSq )>;
92
94MRMESH_API void findEdgesInBall( const Polyline2& polyline, const Vector2f& center, float radius, const FoundEdgeCallback2& foundCallback, AffineXf2f* xf = nullptr );
95
97MRMESH_API void findEdgesInBall( const Polyline3& polyline, const Vector3f& center, float radius, const FoundEdgeCallback3& foundCallback, AffineXf3f* xf = nullptr );
98
100MRMESH_API void findMeshEdgesInBall( const Mesh& mesh, const AABBTreePolyline3& tree, const Vector3f& center, float radius, const FoundEdgeCallback3& foundCallback, AffineXf3f* xf = nullptr );
101
108MRMESH_API PolylineProjectionResult3 findProjectionOnMeshEdges( const Vector3f& pt, const Mesh& mesh, const AABBTreePolyline3& tree,
109 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
110
117MRMESH_API PolylineProjectionResult3 findProjectionOnMeshEdges( const Line3f& ln, const Mesh& mesh, const AABBTreePolyline3& tree,
118 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
119
121
122} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
std::vector<T>-like container that requires specific indexing type,
Definition MRMesh/MRVector.h:20
MRMESH_API void findMeshEdgesInBall(const Mesh &mesh, const AABBTreePolyline3 &tree, const Vector3f &center, float radius, const FoundEdgeCallback3 &foundCallback, AffineXf3f *xf=nullptr)
Finds all edges of given mesh edges (specified by the tree) that cross or touch given ball (center,...
MRMESH_API void findEdgesInBall(const Polyline2 &polyline, const Vector2f &center, float radius, const FoundEdgeCallback2 &foundCallback, AffineXf2f *xf=nullptr)
Finds all edges of given polyline that cross or touch given ball (center, radius)
FoundEdgeCallback< Vector2f > FoundEdgeCallback2
Definition MRPolylineProject.h:90
MRMESH_API PolylineProjectionResult3 findProjectionOnPolyline(const Vector3f &pt, const Polyline3 &polyline, float upDistLimitSq=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
computes the closest point on polyline to given point
MRMESH_API PolylineProjectionResult3 findProjectionOnMeshEdges(const Vector3f &pt, const Mesh &mesh, const AABBTreePolyline3 &tree, float upDistLimitSq=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
computes the closest point on the mesh edges (specified by the tree) to given point
MRMESH_API PolylineProjectionResult2 findProjectionOnPolyline2(const Vector2f &pt, const Polyline2 &polyline, float upDistLimitSq=FLT_MAX, AffineXf2f *xf=nullptr, float loDistLimitSq=0)
computes the closest point on polyline to given point
MRMESH_API PolylineProjectionWithOffsetResult3 findProjectionOnPolylineWithOffset(const Vector3f &pt, const Polyline3 &polyline, const Vector< float, UndirectedEdgeId > &offsetPerEdge, float upDistLimit=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimit=0)
computes the closest point on polyline to given point, respecting each edge offset
FoundEdgeCallback< Vector3f > FoundEdgeCallback3
Definition MRPolylineProject.h:91
std::function< void(UndirectedEdgeId, const V &closestPt, float distSq)> FoundEdgeCallback
Definition MRPolylineProject.h:89
MRMESH_API Polyline2ProjectionWithOffsetResult findProjectionOnPolyline2WithOffset(const Vector2f &pt, const Polyline2 &polyline, const Vector< float, UndirectedEdgeId > &offsetPerEdge, float upDistLimit=FLT_MAX, AffineXf2f *xf=nullptr, float loDistLimit=0)
computes the closest point on polyline to given point, respecting each edge offset
MRMESH_CLASS Vector3< double > Matrix2< double > Matrix4< double > SymMatrix3< double > AffineXf2f
Definition MRMesh/MRMeshFwd.h:235
Polyline2ProjectionWithOffsetResult
Definition MRMesh/MRMeshFwd.h:574
Definition MRMesh/MRMesh.h:22
Definition MRPolylineProject.h:15
UndirectedEdgeId line
polyline's edge containing the closest point
Definition MRPolylineProject.h:17
bool valid() const
check for validity, otherwise the projection was not found
Definition MRPolylineProject.h:26
float distSq
squared distance from pt to proj
Definition MRPolylineProject.h:23
V point
closest point on polyline, transformed by xf if it is given
Definition MRPolylineProject.h:20
Definition MRPolylineProject.h:59
UndirectedEdgeId line
closest line id on polyline
Definition MRPolylineProject.h:61
V point
closest point on polyline, transformed by xf if it is given
Definition MRPolylineProject.h:63
float dist
distance from offset point to proj
Definition MRPolylineProject.h:65