MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMeshIntersect.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRPointOnFace.h"
4#include "MRTriPoint.h"
5#include "MRLine3.h"
6#include "MRMeshPart.h"
7#include "MRMeshTriPoint.h"
8#include <cfloat>
9#include <functional>
10
11namespace MR
12{
13
16
18{
21
24
27
29 explicit operator bool() const { return proj.face.valid(); }
30};
31
38[[nodiscard]] MRMESH_API MeshIntersectionResult rayMeshIntersect( const MeshPart& meshPart, const Line3f& line,
39 float rayStart = 0.0f, float rayEnd = FLT_MAX, const IntersectionPrecomputes<float>* prec = nullptr, bool closestIntersect = true,
40 const FacePredicate & validFaces = {} );
41
48[[nodiscard]] MRMESH_API MeshIntersectionResult rayMeshIntersect( const MeshPart& meshPart, const Line3d& line,
49 double rayStart = 0.0, double rayEnd = DBL_MAX, const IntersectionPrecomputes<double>* prec = nullptr, bool closestIntersect = true,
50 const FacePredicate & validFaces = {} );
51
53{
54 // outputs (each one if optional) for every ray:
56 std::vector<float> * rayDistances = nullptr;
57 std::vector<FaceId> * isectFaces = nullptr;
58 std::vector<TriPointf> * isectBary = nullptr;
59 std::vector<Vector3f> * isectPts = nullptr;
60};
61
66 // input:
67 const MeshPart& meshPart,
68 const std::vector<Vector3f>& origins,
69 const std::vector<Vector3f>& dirs,
70 const MultiRayMeshIntersectResult& result,
71 // advanced options:
72 float rayStart = 0.0f, float rayEnd = FLT_MAX,
73 bool closestIntersect = true,
74 const FacePredicate & validFaces = {}
75);
76
82
83template<typename T>
85{
88 const Mesh * mesh = nullptr;
89 const AABBTree * tree = nullptr;
90 const FaceBitSet * region = nullptr;
91};
94
97[[nodiscard]] MRMESH_API MultiMeshIntersectionResult rayMultiMeshAnyIntersect( const std::vector<Line3fMesh> & lineMeshes,
98 float rayStart = 0.0f, float rayEnd = FLT_MAX );
100[[nodiscard]] MRMESH_API MultiMeshIntersectionResult rayMultiMeshAnyIntersect( const std::vector<Line3dMesh> & lineMeshes,
101 double rayStart = 0.0, double rayEnd = DBL_MAX );
102
105using MeshIntersectionCallback = std::function<bool(const MeshIntersectionResult &)>;
108MRMESH_API void rayMeshIntersectAll( const MeshPart& meshPart, const Line3f& line, MeshIntersectionCallback callback,
109 float rayStart = 0.0f, float rayEnd = FLT_MAX, const IntersectionPrecomputes<float>* prec = nullptr );
111MRMESH_API void rayMeshIntersectAll( const MeshPart& meshPart, const Line3d& line, MeshIntersectionCallback callback,
112 double rayStart = 0.0, double rayEnd = DBL_MAX, const IntersectionPrecomputes<double>* prec = nullptr );
113
119MRMESH_API void planeMeshIntersect( const MeshPart& meshPart, const Plane3f & plane,
120 FaceBitSet * fs, UndirectedEdgeBitSet * ues, VertBitSet * vs,
121 std::vector<FaceId> * fsVec = nullptr );
122
128MRMESH_API void xyPlaneMeshIntersect( const MeshPart& meshPart, float zLevel,
129 FaceBitSet * fs, UndirectedEdgeBitSet * ues, VertBitSet * vs,
130 std::vector<FaceId> * fsVec = nullptr );
131
133
134} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:80
Definition MRAABBTree.h:16
Definition MRMesh/MRBitSet.h:28
MRMESH_API void multiRayMeshIntersect(const MeshPart &meshPart, const std::vector< Vector3f > &origins, const std::vector< Vector3f > &dirs, const MultiRayMeshIntersectResult &result, float rayStart=0.0f, float rayEnd=FLT_MAX, bool closestIntersect=true, const FacePredicate &validFaces={})
MRMESH_API MeshIntersectionResult rayMeshIntersect(const MeshPart &meshPart, const Line3f &line, float rayStart=0.0f, float rayEnd=FLT_MAX, const IntersectionPrecomputes< float > *prec=nullptr, bool closestIntersect=true, const FacePredicate &validFaces={})
MRMESH_API void xyPlaneMeshIntersect(const MeshPart &meshPart, float zLevel, FaceBitSet *fs, UndirectedEdgeBitSet *ues, VertBitSet *vs, std::vector< FaceId > *fsVec=nullptr)
MRMESH_API MultiMeshIntersectionResult rayMultiMeshAnyIntersect(const std::vector< Line3fMesh > &lineMeshes, float rayStart=0.0f, float rayEnd=FLT_MAX)
MRMESH_API void planeMeshIntersect(const MeshPart &meshPart, const Plane3f &plane, FaceBitSet *fs, UndirectedEdgeBitSet *ues, VertBitSet *vs, std::vector< FaceId > *fsVec=nullptr)
std::function< bool(const MeshIntersectionResult &)> MeshIntersectionCallback
Definition MRMeshIntersect.h:105
MRMESH_API void rayMeshIntersectAll(const MeshPart &meshPart, const Line3f &line, MeshIntersectionCallback callback, float rayStart=0.0f, float rayEnd=FLT_MAX, const IntersectionPrecomputes< float > *prec=nullptr)
Definition MRCameraOrientationPlugin.h:8
std::function< bool(FaceId)> FacePredicate
Definition MRMesh/MRMeshFwd.h:555
Definition MRMesh/MRMeshFwd.h:499
Definition MRMeshIntersect.h:85
Line3< T > line
in the reference frame of mesh
Definition MRMeshIntersect.h:86
const Mesh * mesh
must be set a valid pointer before use
Definition MRMeshIntersect.h:88
const FaceBitSet * region
may remain nullptr, meaning all mesh
Definition MRMeshIntersect.h:90
const AABBTree * tree
must be set a valid pointer before use
Definition MRMeshIntersect.h:89
IntersectionPrecomputes< T > * prec
set it to a valid pointer for better performance
Definition MRMeshIntersect.h:87
Definition MRLine.h:12
Definition MRMeshIntersect.h:18
PointOnFace proj
stores intersected face and global coordinates
Definition MRMeshIntersect.h:20
float distanceAlongLine
stores the distance from ray origin to the intersection point in direction units
Definition MRMeshIntersect.h:26
MeshTriPoint mtp
stores barycentric coordinates
Definition MRMeshIntersect.h:23
Definition MRMesh/MRMeshTriPoint.h:23
Definition MRMesh/MRMesh.h:23
Definition MRMeshIntersect.h:78
const Mesh * mesh
the intersection found in this mesh
Definition MRMeshIntersect.h:80
Definition MRMeshIntersect.h:53
BitSet * intersectingRays
true if the ray has intersection with mesh part, false otherwise
Definition MRMeshIntersect.h:55
std::vector< Vector3f > * isectPts
intersection points or NaNs if no intersection
Definition MRMeshIntersect.h:59
std::vector< float > * rayDistances
distance along each ray till the intersection point or NaN if no intersection
Definition MRMeshIntersect.h:56
std::vector< FaceId > * isectFaces
intersected triangles from mesh
Definition MRMeshIntersect.h:57
std::vector< TriPointf > * isectBary
barycentric coordinates of the intersection point within intersected triangle or NaNs if no intersect...
Definition MRMeshIntersect.h:58
a point located on some mesh's face
Definition MRMesh/MRPointOnFace.h:11
FaceId face
mesh's face containing the point
Definition MRMesh/MRPointOnFace.h:13