MeshLib C++ Docs
Loading...
Searching...
No Matches
MRTriDist.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVector3.h"
4#include <limits>
5
6namespace MR
7{
10
11
12template<class T>
14{
21
25 T distSq = 0;
26
29 bool overlap = true;
30};
33
34enum class UpLimitCheck : bool
35{
38};
39
40template<class T>
42{
46 T upDistLimitSq = std::numeric_limits<T>::max();
47
49
50 bool canExitEarlier() const
51 {
52 return upDistLimitSq < std::numeric_limits<T>::max();
53 }
54
55 bool canExitEarlier( T distSqLowerBound ) const
56 {
57 return distSqLowerBound > upDistLimitSq || ( upLimitCheck == UpLimitCheck::GreaterOrEqual && distSqLowerBound == upDistLimitSq );
58 }
59};
62
64[[nodiscard]] MRMESH_API TriTriDistanceResultf findTriTriDistance( const Triangle3f& a, const Triangle3f& b, const TriTriDistanceParamsf& params = {} );
65[[nodiscard]] MRMESH_API TriTriDistanceResultd findTriTriDistance( const Triangle3d& a, const Triangle3d& b, const TriTriDistanceParamsd& params = {} );
66
68[[deprecated( "Use findDistance() instead" )]] MRMESH_API MR_BIND_IGNORE float triDist( Vector3f & p, Vector3f & q, const Vector3f s[3], const Vector3f t[3] );
69
70[[deprecated( "Use findDistance() instead" )]] MRMESH_API float triDist( Vector3f & p, Vector3f & q, const std::array<Vector3f, 3> & s, const std::array<Vector3f, 3> & t );
71
72[[deprecated( "Use findTwoLineSegmClosestPoints() instead" )]] MRMESH_API void segPoints(
73 Vector3f & VEC,
74 Vector3f & X, Vector3f & Y,
75 const Vector3f & P, const Vector3f & A,
76 const Vector3f & Q, const Vector3f & B);
77
78}
#define MRMESH_API
Definition MRMeshFwd.h:80
float distSq
Definition MRTriDist.h:25
Vector3< float > a
Definition MRTriDist.h:20
Vector3< float > b
Definition MRTriDist.h:20
TriTriDistanceResult< double > TriTriDistanceResultd
Definition MRTriDist.h:32
UpLimitCheck
Definition MRTriDist.h:35
float upDistLimitSq
Definition MRTriDist.h:46
bool canExitEarlier() const
with the current parameters
Definition MRTriDist.h:50
bool canExitEarlier(T distSqLowerBound) const
with this particular lower bound
Definition MRTriDist.h:55
TriTriDistanceParams< float > TriTriDistanceParamsf
Definition MRTriDist.h:60
TriTriDistanceParams< double > TriTriDistanceParamsd
Definition MRTriDist.h:61
UpLimitCheck upLimitCheck
Definition MRTriDist.h:48
bool overlap
Definition MRTriDist.h:29
void segPoints(Vector3f &VEC, Vector3f &X, Vector3f &Y, const Vector3f &P, const Vector3f &A, const Vector3f &Q, const Vector3f &B)
Triangle3< double > Triangle3d
Definition MRMeshFwd.h:469
TriTriDistanceResult< float > TriTriDistanceResultf
Definition MRTriDist.h:31
TriTriDistanceResultf findTriTriDistance(const Triangle3f &a, const Triangle3f &b, const TriTriDistanceParamsf &params={})
computes the closest points on two triangles
Triangle3< float > Triangle3f
Definition MRMeshFwd.h:468
MR_BIND_IGNORE float triDist(Vector3f &p, Vector3f &q, const Vector3f s[3], const Vector3f t[3])
This version is not in the bindings, because the pointer parameters are assumed to point to single ob...
std::array< Vector3f, 3 > MR_BIND_IGNORE
Definition MRMeshBuilderTypes.h:13
@ X
Definition MRAxis.h:10
@ Y
Definition MRAxis.h:11
@ GreaterOrEqual
findTriTriDistance exits earlier if (distSqLowerBound >= upDistLimitSq)
Definition MRTriDist.h:36
@ Greater
findTriTriDistance exits earlier if (distSqLowerBound > upDistLimitSq)
Definition MRTriDist.h:37
@ GreaterOrEqual
Definition MRIRenderObject.h:27
@ Greater
Definition MRIRenderObject.h:25
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRTriDist.h:42
Definition MRTriDist.h:14
Definition MRVector3.h:33