24[[nodiscard]]
MRMESH_API bool orient3d(
const Vector3i & a,
const Vector3i & b,
const Vector3i & c );
33[[nodiscard]]
inline bool orient3d(
const Vector3i & a,
const Vector3i & b,
const Vector3i & c,
const Vector3i & d )
34 {
return orient3d( a - d, b - d, c - d ); }
48[[nodiscard]]
inline bool orient3d(
const std::array<PreciseVertCoords, 4> & vs )
61[[nodiscard]]
inline bool ccwAroundLine(
const std::array<PreciseVertCoords, 5> & vs )
76 const std::array<PreciseVertCoords, 5> & vs );
106 return (
int)std::round( v *
invRange );
112 const auto d = p -
center;
130 [[nodiscard]] Vector3d
convert(
const Vector3i& v )
const
138 return Vector3f(
convert( v ) );
157 const VertCoords& points,
const VertBitSet* valid =
nullptr );
171 const Vector3f& a,
const Vector3f& b,
const Vector3f& c,
172 const Vector3f& d,
const Vector3f& e,
#define MRMESH_API
Definition MRMeshFwd.h:85
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:23
Vector3d convert(const Vector3i &v) const
int-to-double coordinates converter
Definition MRPrecisePredicates3.h:130
Vector3i pt
integer coordinates of the vertex
Definition MRPrecisePredicates3.h:39
Vector3i operator()(const Vector3d &p) const
double-to-int coordinates converter
Definition MRPrecisePredicates3.h:110
int scaleOnly(double v) const
applies scaling only (without translation) with the following rounding to the nearest int
Definition MRPrecisePredicates3.h:104
Vector3f operator()(const Vector3i &v) const
int-to-float coordinates converter
Definition MRPrecisePredicates3.h:136
Vector3i operator()(const Vector3f &p) const
float-to-int coordinates converter
Definition MRPrecisePredicates3.h:117
double invRange
Definition MRPrecisePredicates3.h:101
Vector3d center
Definition MRPrecisePredicates3.h:127
bool doIntersect
whether triangle and segment intersect
Definition MRPrecisePredicates3.h:66
Vector3d center
Definition MRPrecisePredicates3.h:100
ConvertToFloatVector toFloat
Definition MRPrecisePredicates3.h:146
bool segmentIntersectionOrder(const std::array< PreciseVertCoords2, 6 > &vs)
bool dIsLeftFromABC
value of orient3d( A, B, C, D ) (see there); "left" means the side the right-hand normal cross( B - A...
Definition MRPrecisePredicates3.h:67
double range
Definition MRPrecisePredicates3.h:126
VertId id
unique id of the vertex (in both meshes)
Definition MRPrecisePredicates3.h:38
ConvertToIntVector toInt
Definition MRPrecisePredicates3.h:145
ConvertToIntVector getToIntConverter(const Box3d &box)
creates converter from Vector3f to Vector3i in Box range (int diapason is mapped to box range)
bool orient3d(const Vector3i &a, const Vector3i &b, const Vector3i &c)
Vector< Vector3i, VertId > computeIntCoords(const ConvertToIntVector &conv, const VertCoords &points, const VertBitSet *valid=nullptr)
std::optional< Vector3i > findTwoSegmentsIntersection(const Vector3i &ai, const Vector3i &bi, const Vector3i &ci, const Vector3i &di)
TriangleSegmentIntersectResult doTriangleSegmentIntersect(const std::array< PreciseVertCoords, 5 > &vs)
ConvertToFloatVector getToFloatConverter(const Box3d &box)
creates converter from Vector3i to Vector3f in Box range (int diapason is mapped to box range)
bool ccwAroundLine(const PreciseVertCoords *vs)
Vector3f findTriangleSegmentIntersectionPrecise(const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d, const Vector3f &e, CoordinateConverters converters)
bool segmentIntersectionTriPlaneOrder(const std::array< PreciseVertCoords, 8 > &vs)
VertCoords computeFloatCoords(const ConvertToFloatVector &conv, const Vector< Vector3i, VertId > &intCoords, const VertBitSet *valid=nullptr)
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
scale then translate int-to-float coordinate converter
Definition MRPrecisePredicates3.h:125
translate then scale float-to-int coordinate converter
Definition MRPrecisePredicates3.h:99
this struct contains coordinate converters float-int-float
Definition MRPrecisePredicates3.h:144
Definition MRPrecisePredicates3.h:37
Definition MRPrecisePredicates3.h:65