MeshLib C++ Docs
Loading...
Searching...
No Matches
MRPrecisePredicates3.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVector3.h"
4#include "MRId.h"
5#include <array>
6#include <optional>
7
8namespace MR
9{
12
13
16
19MRMESH_API bool orient3d( const Vector3i & a, const Vector3i & b, const Vector3i & c );
20
23inline bool orient3d( const Vector3i & a, const Vector3i & b, const Vector3i & c, const Vector3i & d )
24 { return orient3d( a - d, b - d, c - d ); }
25
27{
28 VertId id;
29 Vector3i pt;
30};
31
33MRMESH_API bool orient3d( const std::array<PreciseVertCoords, 4> & vs );
34MRMESH_API bool orient3d( const PreciseVertCoords* vs );
35
37{
38 bool doIntersect = false;
39 bool dIsLeftFromABC = false;
40
41 explicit operator bool() const { return doIntersect; }
42};
43
47 const std::array<PreciseVertCoords, 5> & vs );
48
53[[nodiscard]] MRMESH_API bool segmentIntersectionOrder( const std::array<PreciseVertCoords, 8> & vs );
54
56using ConvertToIntVector = std::function<Vector3i( const Vector3f& )>;
58using ConvertToFloatVector = std::function<Vector3f( const Vector3i& )>;
65
67MRMESH_API ConvertToIntVector getToIntConverter( const Box3d& box );
69MRMESH_API ConvertToFloatVector getToFloatConverter( const Box3d& box );
70
73[[nodiscard]] MRMESH_API std::optional<Vector3i> findTwoSegmentsIntersection( const Vector3i& ai, const Vector3i& bi, const Vector3i& ci, const Vector3i& di );
74
77[[nodiscard]] MRMESH_API Vector3f findTriangleSegmentIntersectionPrecise(
78 const Vector3f& a, const Vector3f& b, const Vector3f& c,
79 const Vector3f& d, const Vector3f& e,
80 CoordinateConverters converters );
81
83
84}
Vector3i pt
integer coordinates of the vertex
Definition MRPrecisePredicates3.h:29
MRMESH_API TriangleSegmentIntersectResult doTriangleSegmentIntersect(const std::array< PreciseVertCoords, 5 > &vs)
MRMESH_API ConvertToFloatVector getToFloatConverter(const Box3d &box)
creates converter from Vector3i to Vector3f in Box range (int diapason is mapped to box range)
std::function< Vector3f(const Vector3i &)> ConvertToFloatVector
int-to-float coordinate converter
Definition MRPrecisePredicates3.h:58
MRMESH_API bool segmentIntersectionOrder(const std::array< PreciseVertCoords2, 6 > &vs)
MRMESH_API Vector3f findTriangleSegmentIntersectionPrecise(const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d, const Vector3f &e, CoordinateConverters converters)
bool doIntersect
whether triangle and segment intersect
Definition MRPrecisePredicates3.h:38
MRMESH_API ConvertToIntVector getToIntConverter(const Box3d &box)
creates converter from Vector3f to Vector3i in Box range (int diapason is mapped to box range)
ConvertToFloatVector toFloat
Definition MRPrecisePredicates3.h:63
MRMESH_API std::optional< Vector3i > findTwoSegmentsIntersection(const Vector3i &ai, const Vector3i &bi, const Vector3i &ci, const Vector3i &di)
std::function< Vector3i(const Vector3f &)> ConvertToIntVector
float-to-int coordinate converter
Definition MRPrecisePredicates3.h:56
bool dIsLeftFromABC
whether the plane with orientated triangle ABC has D point at the left
Definition MRPrecisePredicates3.h:39
VertId id
unique id of the vertex (in both meshes)
Definition MRPrecisePredicates3.h:28
ConvertToIntVector toInt
Definition MRPrecisePredicates3.h:62
MRMESH_API bool orient3d(const Vector3i &a, const Vector3i &b, const Vector3i &c)
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
this struct contains coordinate converters float-int-float
Definition MRPrecisePredicates3.h:61
Definition MRPrecisePredicates3.h:27
Definition MRPrecisePredicates3.h:37