MeshLib C++ Docs
Loading...
Searching...
No Matches
MRPrecisePredicates2.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVector2.h"
4#include "MRId.h"
5#include <array>
6#include <functional>
7
8namespace MR
9{
10
13
15{
16 VertId id;
17 int pt;
18};
19
22[[nodiscard]] inline bool smaller( const PreciseVertCoord& l, const PreciseVertCoord& r )
23 { return l.pt < r.pt || ( l.pt == r.pt && r.id < l.id ); }
24
27[[nodiscard]] MRMESH_API bool ccw( const Vector2i & a, const Vector2i & b );
28
31[[nodiscard]] inline bool ccw( const Vector2i & a, const Vector2i & b, const Vector2i & c )
32 { return ccw( a - c, b - c ); }
33
35{
36 VertId id;
37 Vector2i pt;
38};
39
42[[nodiscard]] MRMESH_API bool ccw( const std::array<PreciseVertCoords2, 3> & vs );
43[[nodiscard]] MRMESH_API bool ccw( const PreciseVertCoords2* vs );
44
49[[nodiscard]] MRMESH_API bool smaller2( const std::array<PreciseVertCoords2, 4> & vs );
50
54[[nodiscard]] MRMESH_API bool orientParaboloid3d( const Vector2i & a, const Vector2i & b, const Vector2i & c );
55[[nodiscard]] inline bool orientParaboloid3d( const Vector2i & a, const Vector2i & b, const Vector2i & c, const Vector2i & d )
56 { return orientParaboloid3d( a - d, b - d, c - d ); }
57
59[[nodiscard]] MRMESH_API bool inCircle( const std::array<PreciseVertCoords2, 4>& vs );
60[[nodiscard]] MRMESH_API bool inCircle( const PreciseVertCoords2* vs );
61
63{
64 bool doIntersect = false;
65 bool cIsLeftFromAB = false;
66
67 explicit operator bool() const { return doIntersect; }
68};
69
73 const std::array<PreciseVertCoords2, 4> & vs );
74
76using ConvertToIntVector2 = std::function<Vector2i( const Vector2f& )>;
78using ConvertToFloatVector2 = std::function<Vector2f( const Vector2i& )>;
85
90[[nodiscard]] MRMESH_API bool segmentIntersectionOrder( const std::array<PreciseVertCoords2, 6> & vs );
91
95 const Vector2i& a, const Vector2i& b, const Vector2i& c, const Vector2i& d );
96
100 const Vector2f& a, const Vector2f& b, const Vector2f& c, const Vector2f& d,
101 CoordinateConverters2 converters );
102
104
105} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:80
Definition MRCameraOrientationPlugin.h:8
MRMESH_API bool ccw(const Vector2i &a, const Vector2i &b)
MRMESH_API bool inCircle(const std::array< PreciseVertCoords2, 4 > &vs)
return true if 4th point in array lays inside circumcircle of first 3 points based triangle
MRMESH_API SegmentSegmentIntersectResult doSegmentSegmentIntersect(const std::array< PreciseVertCoords2, 4 > &vs)
MRMESH_API Vector2i findSegmentSegmentIntersectionPrecise(const Vector2i &a, const Vector2i &b, const Vector2i &c, const Vector2i &d)
MRMESH_API bool segmentIntersectionOrder(const std::array< PreciseVertCoords2, 6 > &vs)
MRMESH_API bool orientParaboloid3d(const Vector2i &a, const Vector2i &b, const Vector2i &c)
std::function< Vector2i(const Vector2f &)> ConvertToIntVector2
float-to-int coordinate converter
Definition MRPrecisePredicates2.h:76
std::function< Vector2f(const Vector2i &)> ConvertToFloatVector2
int-to-float coordinate converter
Definition MRPrecisePredicates2.h:78
MRMESH_API bool smaller2(const std::array< PreciseVertCoords2, 4 > &vs)
bool smaller(const PreciseVertCoord &l, const PreciseVertCoord &r)
Definition MRPrecisePredicates2.h:22
this struct contains coordinate converters float-int-float
Definition MRPrecisePredicates2.h:81
ConvertToFloatVector2 toFloat
Definition MRPrecisePredicates2.h:83
ConvertToIntVector2 toInt
Definition MRPrecisePredicates2.h:82
Definition MRPrecisePredicates2.h:15
VertId id
unique id of the vertex (in both contours)
Definition MRPrecisePredicates2.h:16
int pt
coordinate
Definition MRPrecisePredicates2.h:17
Definition MRPrecisePredicates2.h:35
Vector2i pt
integer coordinates of the vertex
Definition MRPrecisePredicates2.h:37
VertId id
unique id of the vertex (in both contours)
Definition MRPrecisePredicates2.h:36
Definition MRPrecisePredicates2.h:63
bool doIntersect
whether the segments intersect
Definition MRPrecisePredicates2.h:64
bool cIsLeftFromAB
whether the directed line AB has C point at the left
Definition MRPrecisePredicates2.h:65