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
22inline bool smaller( const PreciseVertCoord& l, const PreciseVertCoord& r )
23{ return l.pt < r.pt || ( l.pt == r.pt && r.id < l.id ); }
24
27MRMESH_API bool ccw( const Vector2i & a, const Vector2i & b );
28
31inline 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
41MRMESH_API bool ccw( const std::array<PreciseVertCoords2, 3> & vs );
43
47MRMESH_API bool orientParaboloid3d( const Vector2i & a, const Vector2i & b, const Vector2i & c );
48inline bool orientParaboloid3d( const Vector2i & a, const Vector2i & b, const Vector2i & c, const Vector2i & d )
49 { return orientParaboloid3d( a - d, b - d, c - d ); }
50
52MRMESH_API bool inCircle( const std::array<PreciseVertCoords2, 4>& vs );
54
56{
57 bool doIntersect = false;
58 bool cIsLeftFromAB = false;
59
60 explicit operator bool() const { return doIntersect; }
61};
62
66 const std::array<PreciseVertCoords2, 4> & vs );
67
69using ConvertToIntVector2 = std::function<Vector2i( const Vector2f& )>;
71using ConvertToFloatVector2 = std::function<Vector2f( const Vector2i& )>;
78
82 const Vector2i& a, const Vector2i& b, const Vector2i& c, const Vector2i& d );
83
87 const Vector2f& a, const Vector2f& b, const Vector2f& c, const Vector2f& d,
88 CoordinateConverters2 converters );
89
91
92} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
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 orientParaboloid3d(const Vector2i &a, const Vector2i &b, const Vector2i &c)
std::function< Vector2i(const Vector2f &)> ConvertToIntVector2
float-to-int coordinate converter
Definition MRPrecisePredicates2.h:69
std::function< Vector2f(const Vector2i &)> ConvertToFloatVector2
int-to-float coordinate converter
Definition MRPrecisePredicates2.h:71
bool smaller(const PreciseVertCoord &l, const PreciseVertCoord &r)
Definition MRPrecisePredicates2.h:22
this struct contains coordinate converters float-int-float
Definition MRPrecisePredicates2.h:74
ConvertToFloatVector2 toFloat
Definition MRPrecisePredicates2.h:76
ConvertToIntVector2 toInt
Definition MRPrecisePredicates2.h:75
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:56
bool doIntersect
whether the segments intersect
Definition MRPrecisePredicates2.h:57
bool cIsLeftFromAB
whether the directed line AB has C point at the left
Definition MRPrecisePredicates2.h:58