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{
12
13
16
18{
19 VertId id;
20 int pt;
21};
22
25[[nodiscard]] inline bool smaller( const PreciseVertCoord& l, const PreciseVertCoord& r )
26 { return l.pt < r.pt || ( l.pt == r.pt && r.id < l.id ); }
27
30[[nodiscard]] MRMESH_API bool ccw( const Vector2i & a, const Vector2i & b );
31
34[[nodiscard]] inline bool ccw( const Vector2i & a, const Vector2i & b, const Vector2i & c )
35 { return ccw( a - c, b - c ); }
36
38{
39 VertId id;
40 Vector2i pt;
41};
42
45[[nodiscard]] MRMESH_API bool ccw( const std::array<PreciseVertCoords2, 3> & vs );
46[[nodiscard]] MRMESH_API bool ccw( const PreciseVertCoords2* vs );
47
52[[nodiscard]] MRMESH_API bool smaller2( const std::array<PreciseVertCoords2, 4> & vs );
53
57[[nodiscard]] MRMESH_API bool orientParaboloid3d( const Vector2i & a, const Vector2i & b, const Vector2i & c );
58[[nodiscard]] inline bool orientParaboloid3d( const Vector2i & a, const Vector2i & b, const Vector2i & c, const Vector2i & d )
59 { return orientParaboloid3d( a - d, b - d, c - d ); }
60
62[[nodiscard]] MRMESH_API bool inCircle( const std::array<PreciseVertCoords2, 4>& vs );
63[[nodiscard]] MRMESH_API bool inCircle( const PreciseVertCoords2* vs );
64
66{
67 bool doIntersect = false;
68 bool cIsLeftFromAB = false;
69
70 explicit operator bool() const { return doIntersect; }
71};
72
76 const std::array<PreciseVertCoords2, 4> & vs );
77
79using ConvertToIntVector2 = std::function<Vector2i( const Vector2f& )>;
81using ConvertToFloatVector2 = std::function<Vector2f( const Vector2i& )>;
88
93[[nodiscard]] MRMESH_API bool segmentIntersectionOrder( const std::array<PreciseVertCoords2, 6> & vs );
94
97[[nodiscard]] MRMESH_API Vector2i findSegmentSegmentIntersectionPrecise(
98 const Vector2i& a, const Vector2i& b, const Vector2i& c, const Vector2i& d );
99
102[[nodiscard]] MRMESH_API Vector2f findSegmentSegmentIntersectionPrecise(
103 const Vector2f& a, const Vector2f& b, const Vector2f& c, const Vector2f& d,
104 CoordinateConverters2 converters );
105
107
108}
MRMESH_API bool ccw(const Vector2i &a, const Vector2i &b)
VertId id
unique id of the vertex (in both contours)
Definition MRPrecisePredicates2.h:19
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)
int pt
coordinate
Definition MRPrecisePredicates2.h:20
Vector2i pt
integer coordinates of the vertex
Definition MRPrecisePredicates2.h:40
MRMESH_API bool segmentIntersectionOrder(const std::array< PreciseVertCoords2, 6 > &vs)
MRMESH_API bool orientParaboloid3d(const Vector2i &a, const Vector2i &b, const Vector2i &c)
VertId id
unique id of the vertex (in both contours)
Definition MRPrecisePredicates2.h:39
ConvertToFloatVector2 toFloat
Definition MRPrecisePredicates2.h:86
std::function< Vector2i(const Vector2f &)> ConvertToIntVector2
float-to-int coordinate converter
Definition MRPrecisePredicates2.h:79
std::function< Vector2f(const Vector2i &)> ConvertToFloatVector2
int-to-float coordinate converter
Definition MRPrecisePredicates2.h:81
MRMESH_API bool smaller2(const std::array< PreciseVertCoords2, 4 > &vs)
bool smaller(const PreciseVertCoord &l, const PreciseVertCoord &r)
Definition MRPrecisePredicates2.h:25
bool doIntersect
whether the segments intersect
Definition MRPrecisePredicates2.h:67
bool cIsLeftFromAB
whether the directed line AB has C point at the left
Definition MRPrecisePredicates2.h:68
ConvertToIntVector2 toInt
Definition MRPrecisePredicates2.h:85
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
this struct contains coordinate converters float-int-float
Definition MRPrecisePredicates2.h:84
Definition MRPrecisePredicates2.h:18
Definition MRPrecisePredicates2.h:38
Definition MRPrecisePredicates2.h:66