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
48struct PolylineProjectionResult3Arg : PolylineProjectionResult3
49{
50 VertId pointId; // id of source point from which closest point was searched
51};
52
58MRMESH_API PolylineProjectionResult3Arg findMaxProjectionOnPolyline( const VertCoords& points, const Polyline3& polyline,
59 const VertBitSet* pointsRegion = nullptr, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
60
61
68MRMESH_API PolylineProjectionResult3 findProjectionOnPolyline( const Line3f& ln, const Polyline3& polyline,
69 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
70
71template<typename V>
73{
75 UndirectedEdgeId line;
79 float dist = 0;
80};
81
90 const Vector<float, UndirectedEdgeId>& offsetPerEdge, float upDistLimit = FLT_MAX, AffineXf2f* xf = nullptr, float loDistLimit = 0 );
91
99MRMESH_API PolylineProjectionWithOffsetResult3 findProjectionOnPolylineWithOffset( const Vector3f& pt, const Polyline3& polyline,
100 const Vector<float, UndirectedEdgeId>& offsetPerEdge, float upDistLimit = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimit = 0 );
101
102template<typename V>
103using FoundEdgeCallback = std::function<void( UndirectedEdgeId, const V& closestPt, float distSq )>;
106
108MRMESH_API void findEdgesInBall( const Polyline2& polyline, const Vector2f& center, float radius, const FoundEdgeCallback2& foundCallback, AffineXf2f* xf = nullptr );
109
111MRMESH_API void findEdgesInBall( const Polyline3& polyline, const Vector3f& center, float radius, const FoundEdgeCallback3& foundCallback, AffineXf3f* xf = nullptr );
112
114MRMESH_API void findMeshEdgesInBall( const Mesh& mesh, const AABBTreePolyline3& tree, const Vector3f& center, float radius, const FoundEdgeCallback3& foundCallback, AffineXf3f* xf = nullptr );
115
122MRMESH_API PolylineProjectionResult3 findProjectionOnMeshEdges( const Vector3f& pt, const Mesh& mesh, const AABBTreePolyline3& tree,
123 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
124
131MRMESH_API PolylineProjectionResult3 findProjectionOnMeshEdges( const Line3f& ln, const Mesh& mesh, const AABBTreePolyline3& tree,
132 float upDistLimitSq = FLT_MAX, AffineXf3f* xf = nullptr, float loDistLimitSq = 0 );
133
135
136} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
std::vector<T>-like container that requires specific indexing type,
Definition MRMesh/MRVector.h:19
MRMESH_API PolylineProjectionResult3Arg findMaxProjectionOnPolyline(const VertCoords &points, const Polyline3 &polyline, const VertBitSet *pointsRegion=nullptr, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
for each of points (pointsRegion) computes the closest point on polyline and returns the point for wh...
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:104
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:105
std::function< void(UndirectedEdgeId, const V &closestPt, float distSq)> FoundEdgeCallback
Definition MRPolylineProject.h:103
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
Definition MRCameraOrientationPlugin.h:8
MRMESH_CLASS Vector3< double > Matrix2< double > Matrix4< double > SymMatrix3< double > AffineXf2f
Definition MRMesh/MRMeshFwd.h:242
Polyline2ProjectionWithOffsetResult
Definition MRMesh/MRMeshFwd.h:596
Definition MRMesh/MRMesh.h:22
Definition MRPolylineProject.h:49
VertId pointId
Definition MRPolylineProject.h:50
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:73
UndirectedEdgeId line
closest line id on polyline
Definition MRPolylineProject.h:75
V point
closest point on polyline, transformed by xf if it is given
Definition MRPolylineProject.h:77
float dist
distance from offset point to proj
Definition MRPolylineProject.h:79